MySQL 中的約束及相關操作

wddwr7307914發表於2021-04-02
1 約束型別

約束主要完成對資料的檢驗,保證資料庫資料的完整性;如果有相互依賴資料,保證該資料不被刪除。

常用五類約束:

1. not null:非空約束,指定某列不為空

2. unique: 唯一約束,指定某列或幾列組合的資料不能重複

3. primary key:主鍵約束,指定某列或幾列組合的資料非空且唯一

4. foreign key:外來鍵,指定該列記錄屬於主表中的一條記錄,參照另一條資料

5. check:檢查,指定一個表示式,用於檢驗指定資料


根據約束資料列限制,約束可分為:

單列約束:每個約束只約束一列

多列約束:每個約束約束多列資料

NOT NULL和DEFAULT只存在列級約束

create table temp(
id int auto_increment,
name varchar(20),
age int,
primary key(id),
/*check 約束*/
check(age > 20)
);

上面 check 約束要求 age 必須大於 20,在 mysql 8.0 之前但沒有任何作用。但是建立 table 的時候沒有任何錯誤或警告,

在 MySQL8.0.16 中,check 約束已經起作用了

2 相關操作

2.1 新增單列

ALTER TABLE student ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10;   // 新增到最後面    		 
ALTER TABLE student ADD password VARCHAR(20) NOT NULL AFTER name;     //新增到name後
ALTER TABLE student ADD truename VARCHAR(20) NOT NULL FIRST;    //新增到最前面     
SHOW COLUMNS FROM student;

2.2 新增多列

ALTER TABLE tbl_name ADD [COLUMN](col_name, col_definition,...)
不能指定位置,直接新增到所有欄位最後

2.3 刪除列

語法:ALTER TABLE tbl_name DROP [COLUMN] col_name;
ALTER TABLE users1 DROP truename;
ALTER TABLE users1 DROP password, DROP age, ADD ...; // 操作用逗號分開

2.4 新增唯一約束及刪除

ALTER TABLE users2 ADD UNIQUE (username);
SHOW INDEXES FROM users2\G;   //檢視唯一約束名字
ALTER TABLE users2 DROP INDEX username;

2.5 新增主鍵及刪除

ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY(id); 
//新增約束並制定約束名為PK_users2_id
ALTER TABLE users2 DROP PRIMARY KEY;
// 執行後id的主鍵約束沒有,username的唯一約束變為主鍵約束



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947868/viewspace-2766254/,如需轉載,請註明出處,否則將追究法律責任。

相關文章