MySql的初學習 -- 第五章 -- 瞭解約束
阿新 • • 發佈:2021-01-22
MySql的初學習 -- 第五章 -- 瞭解約束
部落格說明
文章所涉及的資料來自網際網路整理和個人總結,意在於個人學習和經驗彙總,如有什麼地方侵權,請聯絡本人刪除,謝謝!
什麼是約束
- 約束的作用:
對錶中的資料進行進一步的限制,從而保證資料的正確性、有效性、完整性. 違反約束的不正確資料,將無法插入到表中 - 常見的約束
約束名 | 約束關鍵字 |
---|---|
主鍵約束 | primary key |
唯一約束 | unique |
非空約束 | not null |
外來鍵約束 | foreign key |
主鍵約束
特點:不可重複、唯一、不可為空
作用:用來表示資料庫中的每一條資料(類似人的身份證,因此可以通過主鍵來找到相應的資料)
主鍵約束的新增與刪除
-- 方法一:建立表時新增主鍵
-- 格式:欄位名稱 欄位型別 PRIMARY KEY;
CREATE TABLE test1(
id INT PRIMARY KEY,
name VARCHAR(20)
);
-- 方法二:建立表時新增主鍵
-- 格式:PRIMARY KEY(欄位名稱);
CREATE TABLE test2(
id INT,
name VARCHAR(20),
PRIMARY KEY(id)
);
-- 方法三:建立表之後,再新增主鍵 -- 通過DDL語句新增主鍵約束
#第一步,建立一個沒有主鍵的表
CREATE TABLE test3(
id INT,
name VARCHAR(20),
);
#第二步,使用DDL語句新增主鍵約束
ALTER TABLE test3 ADD PRIMARY KEY(id);
-- 刪除主鍵約束 -- 通過DDL語句刪除主要約束
-- 格式:ALTER TABLE 表名 DROP PRIMARY KEY;
ALTER TABLE test3 DROP PRIMARY KEY;
主鍵的自增 與 修改自增初始值
主鍵如果讓自己新增很有可能重複,通常希望在每次插入新記錄時,資料庫自動生成主鍵欄位的值.但主鍵的欄位型別必須是整數型別
-- 建立表時新增主鍵自增
-- 格式:欄位名稱 欄位型別 PRIMARY KEY AUTO_INCREMENT;
CREATE TABLE test1(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);
-- 修改自增的起始值(預設是1)
-- 重新建立自增主鍵的表,自定義自增的起始位置
-- 格式:在建表SQL後加上AUTO_INCREMENT = 開始位置;
CREATE TABLE test1(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
)AUTO_INCREMENT = 100;
delete(DELETE)和truncate(TRUNCATE)對自增長的影響
方法 | 執行流程 |
---|---|
delete | 刪除表中資料,將表中的資料逐條刪除 |
truncate | 將整個表刪除後,重新建立一個結構相同的新表 |
結論:
方法 | 結果 |
---|---|
delete | 對自增是沒有影響,刪除資料後自增不會恢復初始則會一直自增下去 |
truncate | 對自增有影響,刪除資料後自增會恢復初始,從初始值開始自增 |
非空約束
特點:不可為空
作用:用來約束資料不能為空
-- 建立表時新增非空約束
-- 格式:欄位名稱 欄位型別 NOT NULL;
CREATE TABLE test(
id INT NOT NULL,
name VARCHAR(20)
);
唯一約束
特點:不可重複
補充:對null值不做唯一判斷
作用:用來約束資料不能重複
-- 建立表時新增唯一約束
-- 格式:欄位名稱 欄位型別 UNIQUE;
CREATE TABLE test(
id INT UNIQUE,
name VARCHAR(20)
);
主鍵約束和唯一約束的區別
約束 | 區別 |
---|---|
主鍵約束 | 唯一,且不能為空(null) |
唯一約束 | 唯一,但可以為空(null) |
一個表中只能有一個主鍵約束,但可以有多個唯一約束 |
外來鍵約束
等到學習多表後附上鍊接
預設值
作用:如果資料為null時,預設給予的值
-- 格式:欄位名 欄位型別 DEFAULT 預設值
CREATE TABLE test(
id INT PRIMARY KEY,
name VARCHAR(20),
sex CHAR(1) DEFAULT '男'
);
-- 使用預設值
INSERT INTO test(id,name) VALUE (1,"張三");
INSERT INTO test(id,name) VALUE (2,"李四");
-- 不使用預設值時,直接自定義值既可
INSERT INTO test VALUE (3,"小紅",'女');