網(wǎng)站設(shè)計(jì)培訓(xùn)課程廣州seo網(wǎng)站推廣平臺(tái)
MySQL約束
create table [if not exists] 表名(字段名1 類型[(寬度)] [約束條件] [comment '字段說明'],字段名2 類型[(寬度)] [約束條件] [comment '字段說明'],字段名3 類型[(寬度)] [約束條件] [comment '字段說明'] )[表的一些設(shè)置];
-
概念
約束英文:constraint
約束實(shí)際上就是表中數(shù)據(jù)的限制條件
-
作用
表再設(shè)計(jì)的時(shí)候加入約束的目的就是為了保證表中的記錄完整性和有效性,比如用戶表有些列的值(手機(jī)號(hào))不能為空,有些列的值(身份證號(hào))不能重復(fù)。
-
分類
-
主鍵約束(primary key) PK
-
自增長(zhǎng)約束(auto_ increment)
-
非空約束(not_null)
-
唯一性約束(unique)
-
默認(rèn)約束(default)
-
零填充約束(zerofill)
-
外鍵約束(foreign key) FK
-
主鍵約束
-
概念
MySQL主鍵約束是一個(gè)列或者多個(gè)列的組合,其值能唯一地標(biāo)識(shí)表中的每一行,方便再RDBMS中盡快的找到某一行。
主鍵約束相當(dāng)于唯一約束+非空約束的組合,主鍵約束列不允許重復(fù),也不允許出現(xiàn)空值。
每個(gè)表最多只允許一個(gè)主鍵
主鍵約束的關(guān)鍵字是:primary key
當(dāng)創(chuàng)建主鍵的約束時(shí),系統(tǒng)默認(rèn)會(huì)在所在的列和列組合上建立對(duì)應(yīng)的唯一索引。
操作
-
添加單列主鍵
-
添加多列聯(lián)合主鍵
-
刪除主鍵
-
①:添加單列主鍵
創(chuàng)建單列主鍵有兩種方式,一種是在定義字段的同時(shí)指定主鍵,一種是定義完字段之后指定主鍵
方式1-語法:
在 create table 語句中,通過 primary key 關(guān)鍵字來指定主鍵。 在定義字段的同時(shí)指定主鍵,語法格式如下: create table 表名( ... <字段名><數(shù)據(jù)類型> primary key ... )
方式1-實(shí)現(xiàn):
在定義字段之后再指定主鍵,語法格式如下: create table 表名( ... [constraint<約束名>] primary key[字段名] )數(shù)據(jù)修改 格式 create ?table if not exists emp(sid int primary key,sname varchar(20),deptid int,salary double );
方式2-實(shí)現(xiàn):
create table emp2( eid INT, name VARCHAR(20), deptId INT, salary double, constraint pk1 primary key(id) )主鍵不能重復(fù) insert into emp(sid, sname, deptid, salary) VALUES (1001,'tom',1,122.34); insert into emp(sid, sname, deptid, salary) VALUES (1002,'jerry',1,122.34); 主鍵不能為空 insert into emp(sid, sname, deptid, salary) VALUES (null,'tom',1,122.34);
②:聯(lián)合主鍵
所謂的聯(lián)合主鍵,就是這個(gè)主鍵是由一張表中多個(gè)字段中有多個(gè)字段組成的。
注意:
1:當(dāng)主鍵是由多個(gè)字段組成時(shí),不能直接在字段名后面聲明主鍵約束。
2:一張表只能有一個(gè)主鍵,聯(lián)合主鍵也是一個(gè)主鍵
語法:
create table 表名( ... primary key(字段1,字段2,...,字段n) )
實(shí)現(xiàn):
create table emp3(name varchar(20),deptId int,salary double,primary key(name,deptId) )insert into emp3(name, deptId, salary) VALUES ('tom',1,1200.12); insert into emp3(name, deptId, salary) VALUES ('tom',1,1200.12); insert into emp3(name, deptId, salary) VALUES ('jerry',1,1200.12); insert into emp3(name, deptId, salary) VALUES (null,1,1200.12);
③:添加主鍵
主鍵約束不僅可以在創(chuàng)建表的同時(shí)創(chuàng)建,也可以在修改表時(shí)添加。
語法:
create table 表名( ... ); alter ?table <表名> add primary key(字段列表);
實(shí)現(xiàn):
添加主列主鍵 ? create table emp5(eid int,name varchar(20),deptId int,salary double ); ? alter table emp5 add primary key(name,deptId);
④:刪除主鍵
一個(gè)表中不需要主鍵約束時(shí),就需要從表中將其刪除。刪除主鍵約束的方法要比創(chuàng)建主鍵約束容易的多。
格式:
alter table <數(shù)據(jù)表名> drop priamry key;
實(shí)現(xiàn):
刪除單列主鍵 alter table emp1 drop primary key; ? 刪除聯(lián)合主鍵 alter table emp5 drop primary key;
自增長(zhǎng)約束
-
概念
在MySQL中,當(dāng)主鍵定義為自增長(zhǎng)后,這個(gè)主鍵的值就不再需要用戶輸入數(shù)據(jù)了,而由數(shù)據(jù)庫(kù)系統(tǒng)根據(jù)定義自動(dòng)賦值。每增加一條記錄,主鍵會(huì)自動(dòng)以相同的步長(zhǎng)進(jìn)行增長(zhǎng)。
通過給字段添加auto_increment屬性來實(shí)現(xiàn)主鍵自增長(zhǎng)
-
語法
字段名 數(shù)據(jù)類型 auto_increment
-
操作
create table t_user1(id int primary key auto_increment,name varchar(20) );
?
?
?
?
?
?
?
非空約束
?
?
唯一約束
?
默認(rèn)約束
零填充約束
?