日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

九、MySQL常见约束相关知识总结 学习笔记 + 强化复习(六大约束)

發布時間:2024/7/5 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 九、MySQL常见约束相关知识总结 学习笔记 + 强化复习(六大约束) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

常見約束:

一、含義:一種限制,用于限制表中的數據,為了保證表中的數據的準確和可靠性

二、分類:六大約束

1、NOT NULL:非空,用于保證該字段的值不能為空
比如姓名、學號等

2、DEFAULT:默認,用于保證該字段有默認值
比如性別

3、PRIMARY KEY:主鍵,用于保證該字段的值具有唯一性,并且非空
比如學號、員工編號等

4、UNIQUE:唯一,用于保證該字段的值具有唯一性,可以為空
比如座位號

5、CHECK:檢查約束【mysql中不支持】
比如年齡、性別

6、FOREIGN KEY:外鍵,用于限制兩個表的關系,用于保證該字段的值必須來自于主表的關聯列的值
注意:在從表添加外鍵約束,用于引用主表中某列的值
比如學生表的專業編號,員工表的部門編號,員工表的工種編號

三、添加約束的時機:
1.創建表時
2.修改表時

四、約束的添加分類:

1)列級約束:
六大約束語法上都支持,但外鍵約束沒有效果

2)表級約束:
除了非空、默認,其他的都支持

主鍵和唯一的大對比:

鍵的類型保證唯一性是否允許為空一個表中可以有多少個是否允許組合
主鍵×至多有1個√,但不推薦
唯一可以有多個√,但不推薦

外鍵:
1、要求在從表設置外鍵關系
2、從表的外鍵列的類型和主表的關聯列的類型要求一致或兼容,名稱無要求
3、主表的關聯列必須是一個key(一般是主鍵或唯一)
4、插入數據時,先插入主表,再插入從表
刪除數據時,先刪除從表,再刪除主表

CREATE TABLE 表名(字段名 字段類型 列級約束,字段名 字段類型,表級約束) CREATE DATABASE students;

一、創建表時添加約束

1.添加列級約束

語法:

直接在字段名和類型后面追加 約束類型即可。

只支持:默認、非空、主鍵、唯一

USE students; DROP TABLE stuinfo; CREATE TABLE stuinfo(id INT PRIMARY KEY,#主鍵stuName VARCHAR(20) NOT NULL UNIQUE,#非空gender CHAR(1) CHECK(gender='男' OR gender ='女'),#檢查seat INT UNIQUE,#唯一age INT DEFAULT 18,#默認約束majorId INT REFERENCES major(id)#外鍵);CREATE TABLE major(id INT PRIMARY KEY,majorName VARCHAR(20) );#查看stuinfo中的所有索引,包括主鍵、外鍵、唯一 SHOW INDEX FROM stuinfo;

2.添加表級約束

語法:在各個字段的最下面
【constraint 約束名】 約束類型(字段名)

DROP TABLE IF EXISTS stuinfo; CREATE TABLE stuinfo(id INT,stuname VARCHAR(20),gender CHAR(1),seat INT,age INT,majorid INT,CONSTRAINT pk PRIMARY KEY(id),#主鍵CONSTRAINT uq UNIQUE(seat),#唯一鍵CONSTRAINT ck CHECK(gender ='男' OR gender = '女'),#檢查CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外鍵); SHOW INDEX FROM stuinfo;#通用的寫法:★ CREATE TABLE IF NOT EXISTS stuinfo(id INT PRIMARY KEY,stuname VARCHAR(20),sex CHAR(1),age INT DEFAULT 18,seat INT UNIQUE,majorid INT,CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id));

二、修改表時添加約束

1、添加列級約束
alter table 表名 modify column 字段名 字段類型 新約束;

2、添加表級約束
alter table 表名 add 【constraint 約束名】 約束類型(字段名) 【外鍵的引用】;

DROP TABLE IF EXISTS stuinfo; CREATE TABLE stuinfo(id INT,stuname VARCHAR(20),gender CHAR(1),seat INT,age INT,majorid INT ) DESC stuinfo; #1.添加非空約束 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;#2.添加默認約束 ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;#3.添加主鍵 #①列級約束 ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY; #②表級約束 ALTER TABLE stuinfo ADD PRIMARY KEY(id);#4.添加唯一 #①列級約束 ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE; #②表級約束 ALTER TABLE stuinfo ADD UNIQUE(seat);#5.添加外鍵 ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);

三、修改表時刪除約束

1.刪除非空約束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;

2.刪除默認約束
ALTER TABLE stuinfo MODIFY COLUMN age INT ;

3.刪除主鍵
ALTER TABLE stuinfo DROP PRIMARY KEY;

4.刪除唯一
ALTER TABLE stuinfo DROP INDEX seat;

5.刪除外鍵
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

SHOW INDEX FROM stuinfo;

【強化練習】

#1.向表emp2的id列中添加PRIMARY KEY約束(my_emp_id_pk) CREATE TABLE emp2(id INT ); DESC emp2;# 列級約束 ALTER TABLE emp2 MODIFY COLUMN id INT PRIMARY KEY; # 表級約束 ALTER TABLE emp2 ADD CONSTRAINT my_emp_id_pk PRIMARY KEY(id); SHOW INDEX FROM emp2;#2. 向表dept2的id列中添加PRIMARY KEY約束(my_dept_id_pk) CREATE TABLE dept2(id INT ); DESC emp2; # 表級約束 ALTER TABLE dept2 ADD CONSTRAINT my_dept_id_pk PRIMARY KEY(id); SHOW INDEX FROM dept2;#3. 向表emp2中添加列dept_id,并在其中定義FOREIGN KEY約束,與之相關聯的列是dept2表中的id列。 ALTER TABLE emp2 ADD COLUMN dept_id INT; ALTER TABLE emp2 ADD CONSTRAINT fk_emp2_dept2 FOREIGN KEY(dept_id) REFERENCES dept2(id);

總結:

約束類型位置支持的約束類型是否可以起約束名
列級約束列的后面語法都支持,但外鍵沒有效果不可以
表級約束所有列的下面默認和非空不支持,其他支持可以(主鍵沒有效果)

總結

以上是生活随笔為你收集整理的九、MySQL常见约束相关知识总结 学习笔记 + 强化复习(六大约束)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。