SQL約束(對比)

2021-08-25 18:37:49 字數 4935 閱讀 4316

約束主要包括:

not null

unique

primary key

foreign key

check

default

1、not null :用於控制欄位的內容一定不能為空(null)。

用法 :create table mytable

(id varchar(32) not null,

name varchar (32)

)2、unique :控制項字段內容不能重複,乙個表允許有多個 unique 約束。

在sql server、orcale、ms access 支援的新增 unique 語法:

create table mytable

(id varchar(32) not null unique,

name varchar (32)

)在sql server、 my sql 支援的新增 unique 語法:

create table mytable

(id varchar(32) not null,

name varchar (32),

unique (id,.....)

)在sql server、orcale、ms access、my sql 都支援的新增 unique 語法:

create table mytable

(id varchar(32) not null,

name varchar (32),

constraint uniquename unique(uniquecolumn,.....)

)注:第一種寫法(也就是在字段後面直接新增約束),保證每個字段資料唯一性。

第二種寫法(也就是同時新增幾個欄位為約束),這個是保證幾個字段資料同時是唯一的,比如 unique(id,name) 兩個欄位為約束,那麼當 id 有重複值,而 name 沒有重複值的情況下是允許的,只有當兩個字段資料都與原資料重複的情況下才是不允許的。

在sql server、oracle、ms access 刪除 unique 約束語法:drop constraint uniquename;

在my sql 刪除 unique 約束語法:drop index uniquename;

3、primary key :也是用於控制項字段內容不能重複,但它在乙個表只允許出現乙個。

在sql server、orcale、ms access 支援的新增primary key語法:

create table mytb1

(id nvarchar(32) not null primary key,

name nvarchar(32)

)在sql server、my sql 支援的新增primary key 語法:

create table mytb1

(id nvarchar(32) not null,

name nvarchar(32),

primary key (id)

)在sql server、orcale、ms access、my sql 支援的新增primary key 語法:

create table mytb1

(id nvarchar(32) not null,

name nvarchar(32),

constraint primaryname primary key (id)

)在sql server、orcale、ms access、my sql 表已存在的情況下,新增表的primary key約束語法:

alter table mytb1

add primary key (id,......) --這樣的寫法,系統會自定義約束名稱

alter table mytb1

add constaint primaryname primary key (id) --這樣的寫法,自己可以自定義約束名稱

在sql server、orcale、ms access 刪除表已存在的 primary key 約束的語法:

alter table mytb1

drop constraint primaryname

在my sql 刪除表已存在的 primary key 約束的語法:

alter table mytb1

drop primary key

unique 與 primary 的相同之處:unique 和 primary key 約束均為列或列集合提供了唯一性的保證。

unique 與 primary 的不同之處:每個表可以有多個 unique 約束,但是每個表只能有乙個 primary key 約束,unique允許有null值,而 primary key 不允許有null值。

注:在同乙個資料庫中,就算在不同的表中,約束名稱是不允許相同的。

4、foreign key :foreign key 約束用於預防破壞表之間連線的動作,foreign key 約束也能防止非法資料插入外來鍵列,因為它必須是它指向的那個表中的值之一。

在sql server、my sql 支援的新增foreign key語法:

create table mytb1

(id nvarchar(32) not null primary key,

name nvarchar(32),

foreign key(id) references mytb(id)

)在sql server、orcale、ms access 支援的新增foreign key語法:

create table mytb1

(id nvarchar(32) not null foreign key references mytb(id),

name nvarchar(32)

)在sql server、orcale、ms access、my sql 都支援的新增foreign key語法:

create table mytb1

(id nvarchar(32) not null primary key,

name nvarchar(32),

constraint foreignname foreign key(id) references mytb(id)

)在sql server、orcale、ms access、my sql 的表已存在情況下,向表新增外來鍵約束的語法:

alter table mytb1

add foreign key(id) references mytb(id) --這樣寫系統會自定義約束名稱

alter table mytb1

add constraint foreignname foreign key(id) references mytb(id) --這樣寫自己可以自定義約束名稱

在sql server、orcale、ms access 中刪除外來鍵約束的語法:

alter table mytb1

drop constraint foreignname;

在my sql 中刪除外來鍵約束的語法:

alter table mytb1

drop foreign key foreignname;

5、check :用於控制欄位的值範圍。

在sql server、my sql 支援的新增check 語法:

create table mycheck

(id nvarchar(32) not null,

age int not null,

check (age>15 and age <30)

)在sql server、orcale、ms access 支援的新增 check 語法:

create table mycheck

(id nvarchar(32) not null,

age int not null check (age>15 and age<30)

)在sql server、orcale、ms access、my sql 都支援的新增 check 語法:

create table mycheck

(id nvarchar(32) not null,

age int not null,

constraint checkname check (age<15 and age>30)

)在sql server、orcale、ms access、my sql 的表已存在情況下,向表新增check約束的語法:

alter table mycheck

add check (id='celly'); --這樣定義是系統自定義 check約束名稱。

alter table mycheck

add constraint checkname check(id='celly'); --這樣定義是自己自定義 check約束名稱。

在 sql server、orcale、ms access 刪除表已存在的 check 約束的語法:

alter table mycheck

drop constraint checkname

6、default :用於設定新記錄的預設值。

在sql server、orcale、ms access、my sql 新增default約束的語法:

create table mydefault

(id int,

name nvarchar(32) default 'celly'

)在my sql 的已存在表中新增 字段預設值:

alter table mydefault

alter [id] set default 0

在 sql server、orcale、ms access 的已存在表中新增 字段預設值:

alter table mydefault

alter column [id] set default 0

在 my sql 中刪除字段預設值語法:

alter table mydefault

alter columnname drop default

sql主鍵約束

資料字段屬性 unsigned 無符號的,宣告該資料不允許為負數 zerofill 0填充的,不足位數用0來填充 如 int 3 5 則005 auto increment 自動增長的,通常用於設定主鍵,且為整數型別,可定義起始值和步長 null not null 空 和 非空 default 預設...

SQL 新增約束

sql 約束用於規定表中的資料規則。如果存在違反約束的資料行為,行為會被約束終止。約束可以在建立表時規定 通過 create table 語句 或者在表建立之後規定 通過 alter table 語句 建立表的時候新增約束 create table table name column name1 d...

複習 sql約束

對錶中的資料進行限定,保證資料的正確性 有效性和完整性。注意 1.含義 非空且唯一 2.一張表只能有乙個字段為主鍵 3.主鍵就是表中記錄的唯一標識 使用create table stu id int primary key,給id新增主鍵約束 name varchar 20 alter table ...