感謝黑馬程序員提供的免費課程
約束
概念:約束是作用于表中字段上的規則,用于限制存儲在表中的數據。
目的:保證數據庫中數據的正確、有效性和完整性。
常見的幾種約束:
注意:約束是作用于表中字段上的,可以在創建表/修改表的時候添加約束。
案例:根據需求,完成表結構的創建
CREATE TABLE user(
id int AUTO_INCREMENT PRIMARY KEY COMMENT 'id唯一標識',
name varchar(10) NOT NULL UNIQUE COMMENT '姓名',
age int CHECK(age>20 && age <=120) COMMENT '年齡',
status char(1) DEFAULT '1' COMMENT '狀態',
gender char(1) COMMENT '性別')INSERT INTO user(name,status,gender,age) VALUES ('tom1','1','男',23);
INSERT INTO user(name,status,gender,age) VALUES ('tom2','1','男',13),('tom3','1','女','32');
INSERT INTO user(name,status,gender,age) VALUES (Null,'1','男',23);
INSERT INTO user(name,status,gender,age) VALUES ('tom5',DEFAULT,'男',23);
外鍵約束
概念:
外鍵用來讓兩張表的數據之間建立連接,從而保證數據的一致性和完整性。
具體來說,外鍵關聯的目標字段需要滿足以下條件:
- 可以是另一個表的主鍵(PRIMARY KEY)(最常見的情況)
- 可以是另一個表中設置了唯一約束(UNIQUE)?的字段
創建外鍵的兩種方式:
1:在創建表時添加外鍵
CREATE TABLE xx(
...
字段? ?類型? ?CONSTRAINT? 外鍵名稱? FOREIGN KEY(外鍵字段名) REFERENCES??
主表(主表列名)
...
)
2:使用alter創建外鍵
ALTER TABLE ADD CONSTRAINT?外鍵名稱? FOREIAGN KEY(外鍵字段名) REFERENCES??主表(主表列名)
刪除外鍵語法:
ALTER TABEL DROP FOREIGN KEY 外鍵名;
#創建emp01表
create table emp01(
id int auto_increment comment 'ID' primary key,
name varchar(50) not null comment '姓名',
age int comment '年齡',
job varchar(20) comment '職位',
salary int comment '薪資',
entrydate date comment '入職時間',
managerid int comment '直屬領導ID',
dept_id int comment '部門ID');
desc emp01;#插入數據
INSERT INTO emp01 (id, name, age, job, salary, entrydate, managerid, dept_id)VALUES
(1,'金庸',66,'總裁',20000,'2000-01-01', null,5),(2,'張無忌',20,'項目經理',12500,'2005-12-05',1,1),
(3,'楊逍',33,'開發',8400,'2000-11-03',2,1),(4,'韋一笑',48,'開發',11000,'2002-02-05',2,1),
(5,'常遇春',43,'開發',10500,'2004-09-07',3,1),(6,'小昭',19,'程序員鼓勵師',6600,'2004-10-12',2,1);select * from emp01;#創建外鍵
ALTER TABLE emp01 ADD CONSTRAINT fk_emp01_dept_id FOREIGN KEY(dept_id) REFERENCES dept(id); #刪除外鍵
ALTER TABLE emp01 DROP FOREIGN KEY fk_emp01_dept_id;
外鍵約束-刪除/更新行為
父表是reference關聯的表,子表是外鍵所在的表
語法:
ALTER TABLE ADD CONSTRAINT?外鍵名稱? FOREIAGN KEY(外鍵字段名) REFERENCES??主表(主表列名)ON UPDATE 行為 ON DELETE 行為
ALTER TABLE emp01 ADD CONSTRAINT fk_emp01_dept_id FOREIGN KEY(dept_id) REFERENCES dept(id) ON UPDATE SET NULL ON DELETE SET NULL; ALTER TABLE emp01 ADD CONSTRAINT fk_emp01_dept_id FOREIGN KEY(dept_id) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE;
約束總結:
這是我的個人學習筆記,主要用于記錄自己對知識點的理解和梳理。由于目前仍在學習探索階段,內容中難免存在理解偏差或表述疏漏,懇請各位大佬不吝賜教,多提寶貴意見~ 若有不同看法,歡迎理性交流探討,感謝包容與指正!