MySQL:SQL約束
阿新 • • 發佈:2021-07-12
1) 約束的作用:
對錶中的資料進行進一步的限制,從而保證資料的正確性、有效性、完整性.
違反約束的 不正確資料,將無法插入到表中
2) 常見的約束
約束名 | 約束關鍵字 |
主鍵 | primary key |
唯一 | unique |
非空 | not null |
外來鍵 | foreign key |
主鍵約束
特點 | 不可重複 唯一 非空 |
作用 | 用來表示資料庫中的每一條記錄 |
1.新增主鍵約束
語法格式
欄位名 欄位型別 primary key
1) 需求: 建立一個帶主鍵的表
# 方式1 建立一個帶主鍵的表 CREATE TABLE emp2( -- 設定主鍵 唯一 非空eid INT PRIMARY KEY, ename VARCHAR(20), sex CHAR(1) ); -- 刪除表 DROP TABLE emp2; -- 方式2 建立一個帶主鍵的表 CREATE TABLE emp2( eid INT , ename VARCHAR(20), sex CHAR(1), -- 指定主鍵為 eid欄位 PRIMARY KEY(eid) ); -- 方式3 建立一個帶主鍵的表 CREATE TABLE emp2( eid INT , ename VARCHAR(20), sex CHAR(1) ) -- 建立的時候不指定主鍵,然後通過 DDL語句進行設定 ALTERTABLE emp2 ADD PRIMARY KEY(eid);
DESC 查看錶結構
-- 查看錶的詳細資訊 DESC emp2;
2) 測試主鍵的唯一性 非空性
# 正常插入一條資料 INSERT INTO emp2 VALUES(1,'宋江','男'); # 插入一條資料,主鍵為空 -- Column 'eid' cannot be null 主鍵不能為空 INSERT INTO emp2 VALUES(NULL,'李逵','男'); # 插入一條資料,主鍵為 1 -- Duplicate entry '1' for key 'PRIMARY' 主鍵不能重複 INSERT INTOemp2 VALUES(1,'孫二孃','女');
3) 哪些欄位可以作為主鍵 ?
通常針對業務去設計主鍵,每張表都設計一個主鍵id
主鍵是給資料庫和程式使用的,跟最終的客戶無關,所以主鍵沒有意義沒有關係,只要能夠保證不重複 就好,
比如 身份證就可以作為主鍵
2.刪除主鍵約束
刪除 表中的主鍵約束 (瞭解)
-- 使用DDL語句 刪除表中的主鍵 ALTER TABLE emp2 DROP PRIMARY KEY; DESC emp2;
3.主鍵的自增
注: 主鍵如果讓我們自己新增很有可能重複,我們通常希望在每次插入新記錄時,資料庫自動生成主鍵欄位的值.
關鍵字:
AUTO_INCREMENT 表示自動增長(欄位型別必須是整數型別)
1) 建立主鍵自增的表
-- 建立主鍵自增的表 CREATE TABLE emp2( -- 關鍵字 AUTO_INCREMENT,主鍵型別必須是整數型別 eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), sex CHAR(1) );
2) 新增資料 觀察主鍵的自增
INSERT INTO emp2(ename,sex) VALUES('張三','男'); INSERT INTO emp2(ename,sex) VALUES('李四','男'); INSERT INTO emp2 VALUES(NULL,'翠花','女'); INSERT INTO emp2 VALUES(NULL,'豔秋','女');
4. 修改主鍵自增的起始值
預設地 AUTO_INCREMENT 的開始值是 1,如果希望修改起始值,請使用下面的方式
-- 建立主鍵自增的表,自定義自增其實值 CREATE TABLE emp2( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), sex CHAR(1) )AUTO_INCREMENT=100; -- 插入資料,觀察主鍵的起始值 INSERT INTO emp2(ename,sex) VALUES('張百萬','男'); INSERT INTO emp2(ename,sex) VALUES('豔秋','女');
5. DELETE和TRUNCATE對自增長的影響
刪除表中所有資料有兩種方式
清空表資料的方式 | 特點 |
DELETE | 只是刪除表中所有資料,對自增沒有影響 |
TRUNCATE | truncate 是將整個表刪除掉,然後建立一個新的表 自增的主鍵,重新從 1開始 |
測試1: delete 刪除表中所有資料
-- 目前最後的主鍵值是 101 SELECT * FROM emp2; -- delete 刪除表中資料,對自增沒有影響 DELETE FROM emp2; -- 插入資料 檢視主鍵 INSERT INTO emp2(ename,sex) VALUES('張百萬','男'); INSERT INTO emp2(ename,sex) VALUES('豔秋','女')
測試2: truncate刪除 表中資料
-- 使用 truncate 刪除表中所有資料, TRUNCATE TABLE emp2; -- 插入資料 檢視主鍵 INSERT INTO emp2(ename,sex) VALUES('張百萬','男'); INSERT INTO emp2(ename,sex) VALUES('豔秋','女');