⑴ sql怎麼在已經創建的表中插入一列,對這一列進行唯一約束。
如果已經存在的表中是有數據的,那麼你不能用一句SQL實現你的目標。
因為,如果表中已經有數據,那麼你創建的新列,在已有的記錄中要麼是空值,要麼是你設置的預設值,因此所有記錄中,該列的值都是一樣的,因此對該列不能建立唯一性約束。
可採用兩種做法:
1.刪除原表的所有數據,就可以創建;
2.先不建立唯一約束,只建立列,然後給每行記錄的該列賦於不同的值。
然後再設置該列為非空;
然後再為該列設置唯一約束。
⑵ SQL UNIQUE 約束介紹
UNIQUE 約束唯一標識資料庫表中的每條記錄。
UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。PRIMARY KEY 擁有自動定義的 UNIQUE 約束。
請注意,每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。
SQL UNIQUE Constraint on CREATE TABLE
下面的 SQL 在 Persons 表創建時在 Id_P 列創建 UNIQUE 約束:
MySQL:
CREATE TABLE Persons
(Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P))
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255))
如果需要命名 UNIQUE 約談轎寬束,以及為多個列帆扒定義 UNIQUE 約束,請使用下面的 SQL 語法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName))
SQL UNIQUE Constraint on ALTER TABLE
當表已被創建時,如需在 Id_P 列創建 UNIQUE 約束,請使用下列 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD UNIQUE (Id_P)
如需命名 UNIQUE 約束,並定含亮義多個列的 UNIQUE 約束,請使用下面的 SQL 語法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
撤銷 UNIQUE 約束
如需撤銷 UNIQUE 約束,請使用下面的 SQL:
MySQL
ALTER TABLE Persons
DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
⑶ SQL中如何設置唯一性約束
alter table [protectionZone]add constraint cons_02 unique (zoneName)。
約束用於限制加入表的數據的類型。可以在創建表時規定約束(通過 CREATE TABLE 語句),或者在表創建之後也可以(通過 ALTER TABLE 語句)。
(3)sql建立表的唯一約束擴展閱讀:
SQL具有數據定義、數據操縱和數據控制。
1、SQL數據定義功能:能夠定義資料庫的三級模式結構,即外模式、全局模式和內模式結構。在SQL中,外模式有叫做視圖(View),全局模式簡稱模式( Schema),內模式由系統根據資料庫模式自動實現,一般無需用戶過問。
2、SQL數據操縱功能:包括對基本表和視圖的數據插入、刪除和修改,特別是具有很強的數據查詢功能。
3、SQL的數據控制功能:主要是對用戶的訪問許可權加以控制,以保證系統的安全性。
⑷ Sql Server建表多列唯一約束,求教
CREATE UNIQUE NONCLUSTERED INDEX [idx_Staffing_uid_pid] ON Staffing
(
[UID] ASC,
[PID] ASC
)
⑸ Sql中創建唯一約束
唯一約束就是設置表的主鍵,你上面是check約束,這兩個約束是不一樣的!!
⑹ SQL中如何設置唯一性約束
alter table [protectionZone]add constraint cons_02 unique (zoneName)。
約束用於限制加入表的數據的類型。可以在創建表時規定約束(通過 CREATE TABLE 語句),或者在表創建之後也可以(通過 ALTER TABLE 語句)。
(6)sql建立表的唯一約束擴展閱讀:
SQL具有數據定義、數據操縱和數據控制。
1、SQL數據定義功能:能夠定義資料庫的三級模式結構,即外模式、全局模式和內模式結構。在SQL中,外模式有叫做視圖(View),全局模式簡稱模式( Schema),內模式由系統根據資料庫模式自動實現,一般無需用戶過問。
2、SQL數據操縱功能:包括對基本表和視圖的數據插入、刪除和修改,特別是具有很強的數據查詢功能。
3、SQL的數據控制功能:主要是對用戶的訪問許可權加以控制,以保證系統的安全性。
⑺ 在mysql 中為表的欄位添加唯一性約束的語句怎麼寫
1、建表時加上唯一性約束
CREATE TABLE `t_user` (
`Id` int(11) NOT NULL AUTO_INCREMENT,-- 自增
`username` varchar(18) NOT NULL unique,-- 唯一性約束
`password` varchar(18) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;
2、給已經建好的表加上唯一性約束
ALTER TABLE `t_user` ADD unique(`username`);
(7)sql建立表的唯一約束擴展閱讀:
注意事項
MySQL在修改完每一行數據後都驗證數據約束,而不是像SQL標准里執行完整條語句才驗證。這樣做帶來的一個問題就是,如果一條SQL語句會改動多行數據,即使改動過程中違反了數據約束但改動後並不違反數據約束,也會被MySQ判為違反數據約束從而執行失敗。
在特定情況下MySQL的SQL語句中避免數據唯一性沖突有效的解法:
1、暫時刪除相關約束,改動完數據後再加回去
2、在update語句中使用order by子句控制行改動次序,保證在任一行改動後都不違法約束。這個方法局限性比較大,有時我們是想交換兩個不相鄰行的值
3、使用一個臨時值做中轉(如一個沒有被其它任何行使用的值,有些情況下NULL是一個不錯的選擇)。類似於程序設計中典型的交換兩個變數值的方法
4、重新設計應用邏輯,盡量避免一次更改多行的情況出現
⑻ sql唯一約束
一般唯一性約束不放在CHKEK約束,定義表都時候直接加unique限制或者如下加約束是最常用的:
altertablestuinfo--stuinfo是表名
addconstraintUQ_stuIDunique(stuID)--stuID身份證欄位名
當然,CHKEK約束里也可以
check(stuIDnotin(selectstuIDfromstuinfo))
⑼ sqlyog 怎麼設置唯一約束
可以在建表時這樣寫:螞喚
create
table
persons
(
id_p
int
not
null,
lastname
varchar(255)
not
null,
firstname
varchar(255),
address
varchar(255),
city
varchar(255),
check
(id_p>0)
)
如果是多列侍物或需要check約束的話,可是這樣寫:
create
table
persons
(
id_p
int
not
null,
lastname
varchar(255)
not
null,
firstname
varchar(255),
address
varchar(255),
city
varchar(255),
constraint
chk_person
check
(id_p>0
and
city='sandnes')
)
如果老伍已經存在表persons,再需要添加check約束的話,可以這樣寫:
alter
table
persons
add
check
(id_p>0)
如果是多列需要check約束的話,可是這樣寫:
alter
table
persons
add
constraint
chk_person
check
(id_p>0
and
city='sandnes')