共計 3300 個字符,預計需要花費 9 分鐘才能閱讀完成。
這篇文章主要介紹“MySQL 數據庫約束條件和自增長序列是什么”,在日常操作中,相信很多人在 MySQL 數據庫約束條件和自增長序列是什么問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL 數據庫約束條件和自增長序列是什么”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
一、約束(constraint)
約束就是在表上強制執行的一種校驗規則,當執行 DML 操作時,數據必須符合這些規則,如果不符合,將無法執行。
約束的全稱:約束條件,也稱之為完整性約束條件。可以保證表中數據的完整性,保證數據之間的商業邏輯。
約束條件包括:
1)非空約束(not null), 簡稱 NN
2)唯一性約束(unique), 簡稱 UK
3)主鍵約束(primary), 簡稱 PK
4)外鍵約束(foreign key), 簡稱 FK
5)檢查約束(check), 簡稱 CK
1、非空約束(not null)
非空約束用于確保字段值不為 null。默認情況下任何列都允許 null 值,但是業務邏輯可以會要求某些列不能去 null 值,因此使用非空約束。
建表時設置:
create table tName(colName1 Type not null,….);
建表后設置非空約束(ps: 前提表中相應字段不能有 null 值)
alter table tableName modify colName type not null;
取消非空約束
alter table tableName modify colName type null;
2、唯一性約束(unique)
用于保證字段或者字段的組合不出現重復值,但是允許為 null 值
建表時設置
create table tableName(colName1 Type1 unique,…….. );
建表后設置
alter table tableName modify colName Type unique;alter table tableName add constraint constraintName unique(colName);
查看表中的唯一性約束名稱
show keys from tableName;
刪除唯一性約束
drop index uniqueName on tableName;
3、主鍵約束(primary)
主鍵約束在功能上講,相當于非空約束和唯一性約束的組合。主鍵字段可以是單字段也可以是字段組合,即在主鍵約束下的字段不允許有 null 值,也不允許出現重復值。主鍵可以用來在表中唯一的確定一行記錄。一個表中只允許建立一個主鍵,其他約束條件沒有個數限制。
主鍵選取的原則
1)主鍵應是對系統無意義的數據,如序號
2)永遠也不要更新主鍵,讓主鍵除了用于唯一標識一行記錄之外,再無其他用途
3)主鍵不應包含動態變化的數據,如時間戳
4)主鍵應自動生成,不要人為干預,以免使它帶有除了唯一標識一行以外的意義
5)主鍵盡量建立在單列上
建表時創建
create table tableName(colName1 Type1 primary key,……..);
建表后創建
alter table tableName modify colName Type primary key;
alter table tableName add constraint constraintName primary key(colName);
刪除主鍵
alter table tableName drop primary key;
4、外鍵約束(foreign key)
外鍵約束條件定義在兩張表的字段或一張表的兩個字段上,用于保證相關兩個字段的關系。即字段 A 如果設置外鍵約束,那么字段 A 的值
必須要依賴于字段 B 里已經存在的值,但是可以為 null。而字段 B 要求是表中的主鍵約束。
字段 A 所在的表我們稱之為從表,字段 B 所在的表稱之為主表。如果主表中的一個值被從表依賴時,此時主表的該記錄不允許被刪除。
外鍵約束會降低數據庫的性能:
如果在設置外鍵約束的表上頻繁的進行 DML 操作,那么每次 DML 操作都會檢查主表,產生額外的開銷。再一個就是,外鍵約束會確定主從表的先后生成順序,有時會影響業務邏輯。因此,外鍵約束要看需求而定,要慎用。
建表時設置
create table tableName(empno int primary key,ename varchar(20) not null,mgr int,constraint fk_name foreign key(mgr) references tableName(empno));——————-mgr 是字段 A,empno 是字段 B, 字段 B 必須有主鍵約束
建表后設置
alter table tableName1 add constraint FK_name foreign key(字段 A) references tableName2(字段 B);
刪除外鍵約束
alter table tableName drop foreign key fk_name
5、檢查約束(check)
檢查約束條件用來強制在字段上的每個值都要滿足檢查約束的條件。
mysql 的檢查約束注意事項:
1)寫法:check(條件)。mysql 在語法上通過,但是在約束條件上沒有效果。其他數據庫如 oracle 有效
2)如果是集合性質的條件,如 gender 必須 (f , m) 中的某一個值,可以使用枚舉來替代檢查約束
寫法:enum(f , m)
建表時設置:
create table tableName(name varchar(20) not null,age int check(age 0 and age 20),— 語法通過,但是約束條件無效 gender enum(f , m)——— 集合性質的寫法,此法有效);
建表后設置:
alter table tableName add CONSTRAINT enum_age check(age 18);— 其他數據庫約束條件有效,mysql 無效 alter table tableName modify gender enum(f , m , n –mysql 有效
二、mysql 的自增長 序列 1、序列的概念
序列(sequence)是一種用來生成唯一數字值的數據庫對象。序列的值通常是按遞增或遞減順序自動生成,用于自動產生表中主鍵的值,是一種高效的獲取唯一鍵值的途徑。通常為主鍵服務,是一組有序的整數值,如 1,2,3,4,5,…………………..
2.mysql 特點
mysql 不支持序列機制,但是 mysql 的 auto_increment 可以達到與序列機制一樣的效果。我們稱之為自增長序列。
1)auto_increment 關鍵字,用來對有主鍵約束的字段做自增操作。2)自增長序列默認從 1 開始 3)自增長序列的步數為 14)可以設置起始數字
用法如下:
建表時設置 1:create table tname(tid int primary key auto_increment,
……
); 建表時設置 1: create table tname(
tid int primary key auto_increment) auto_increment=100; 建表后設置:alter table tableName auto_increment=100; 取消自增長:alter table tablenName change colName colName Type unsigned not null;
3、函數:last_insert_id();
作用:獲取序列最后一次的值。select last_insert_id();
到此,關于“MySQL 數據庫約束條件和自增長序列是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!