1. 程式人生 > 其它 >MySQL:SQL約束

MySQL:SQL約束

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語句進行設定 ALTER
TABLE 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 INTO
emp2 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('豔秋','');