MySQL數(shù)據(jù)庫:第十三章:常見約束

回退至Mysql數(shù)據(jù)庫理論與實(shí)戰(zhàn)

#常見約束

理解:約束是用于限定表的字段的,為了保證數(shù)據(jù)表的完整性
常見約束:★
(not null)NOT NULL 非空:用于限定某字段為必填項(xiàng),比如姓名、id等
(default)DEFAULT 默認(rèn):用于限定某字段如果沒有顯式的插入值,默認(rèn)存儲的選項(xiàng),比如性別、成績等
(primary key)PRIMARY KEY主鍵:用于限定某字段是唯一的、非空的,比如學(xué)號
(unique)UNIQUE 唯一:用于限定某字段是唯一的,可以為空,比如:座位號
(check)CHECK檢查:用于限定某字段必須滿足指定條件,比如
check (gender = ‘男’ or gender =‘女’)
但是:mysql不支持
(foreign key)FOREIGN KEY外鍵:用于限定兩個(gè)表的關(guān)系,比如學(xué)員信息表和專業(yè)表通過專業(yè)編號關(guān)聯(lián)
【面試題】主鍵和唯一的對比
主鍵:唯一、非空、一個(gè)表至多有一個(gè)主鍵
唯一:唯一、可以為空、一個(gè)表可以有多個(gè)唯一鍵

#一、創(chuàng)建表時(shí)添加約束 √

分類:
列級約束:直接放在字段的后面,對當(dāng)前字段有效
not null、default、unique、primary key
表級約束:放在所有字段的下面,對顯式指定的字段有效
primary key、unique、foreign key
二者的區(qū)別:
①表級約束可以起名,語法:
【constraint 約束名】 約束類型(字段)
其中主鍵起名后,也無效!
②列級約束不能起名
語法:
create table 表名(
字段名 字段類型 約束類型,
字段名 字段類型 約束類型,

約束
)

#示例1:主鍵和唯一放在列級約束上

CREATE TABLE grade(
    id INT PRIMARY KEY,
    gradename VARCHAR(20)
)
CREATE TABLE testTab1(
    id INT PRIMARY KEY,#主鍵
    tname VARCHAR(20) NOT NULL,#非空
    gender CHAR DEFAULT '男',#默認(rèn)
    seat INT  UNIQUE NOT NULL,#唯一+非空
    gradeId INT ,
    FOREIGN KEY(gradeid) REFERENCES grade(id)
);

#示例2:主鍵和唯一放在表級約束上

DROP TABLE IF EXISTS testTab1;
CREATE TABLE testTab1(
    id INT ,#主鍵
    tname VARCHAR(20) NOT NULL,#非空
    gender CHAR DEFAULT '男',#默認(rèn)
    seat INT  ,#唯一+非空
    gradeId INT ,
    FOREIGN KEY(gradeid) REFERENCES grade(id),
    PRIMARY KEY(id),
    UNIQUE(seat)
);

#二、修改表時(shí)添加約束【了解】

DROP TABLE IF EXISTS testTab1;
CREATE TABLE testTab1(
    id INT ,
    tname VARCHAR(20) ,
    gender CHAR,
    seat INT  ,
    gradeId INT
);

#1、添加非空
ALTER TABLE testTab1 MODIFY COLUMN tname VARCHAR(20) NOT NULL;
#2、添加默認(rèn)
ALTER TABLE testTab1 MODIFY COLUMN gender CHAR DEFAULT ‘女’;
#3、添加唯一
#列級約束的方式
#ALTER TABLE testTab1 MODIFY COLUMN seat int unique;
#表級約束的方式
ALTER TABLE testTab1 ADD CONSTRAINT uq UNIQUE(seat);
#4、添加主鍵
#列級約束的方式
ALTER TABLE testTab1 MODIFY COLUMN id INT PRIMARY KEY;
#表級約束的方式
#ALTER TABLE testTab1 ADD primary key(id);
#5、添加外鍵
ALTER TABLE testTab1 ADD CONSTRAINT fk_t_g FOREIGN KEY(gradeid) REFERENCES grade(id);
#三、修改表時(shí)刪除約束【了解】

#1、刪除非空
ALTER TABLE testTab1 MODIFY COLUMN tname VARCHAR(20) NULL;
#2、刪除默認(rèn)
ALTER TABLE testtab1 MODIFY COLUMN gender CHAR;
#3、刪除唯一(唯一約束的名字默認(rèn)和字段名一致)
ALTER TABLE testtab1 DROP INDEX seat;
#4、刪除主鍵
ALTER TABLE testtab1 DROP PRIMARY KEY;
#5、刪除外鍵
ALTER TABLE testtab1 DROP FOREIGN KEY fk_t_g;
SHOW INDEX FROM testtab1;