《MySQL資料庫》約束條件和自增長序列

2021-10-07 17:35:19 字數 4079 閱讀 2574

約束就是在表上強制執行的一種校驗規則,當執行dml操作時,資料必須符合這些規則,如果不符合,將無法執行。

約束的全稱:約束條件,也稱之為完整性約束條件。可以保證表中資料的完整性,保證資料之間的商業邏輯。

約束條件包括:

1)非空約束 (not null),簡稱nn

2)唯一性約束(unique),簡稱uk

3)主鍵約束(primary),簡稱pk

4)外來鍵約束(foreign key),簡稱fk

5)檢查約束(check),簡稱ck

非空約束用於確保字段值不為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;
用於保證字段或者欄位的組合不出現重複值,但是允許為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;
主鍵約束在功能上講,相當於非空約束和唯一性約束的組合。主鍵字段可以是單字段也可以是字段組合,即在主鍵約束下的字段不允許有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;
外來鍵約束條件定義在兩張表的字段或一張表的兩個欄位上,用於保證相關兩個欄位的關係。即欄位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
檢查約束條件用來強制在字段上的每個值都要滿足檢查約束的條件。

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有效

序列(sequence)是一種用來生成唯一數字值的資料庫物件。序列的值通常是按遞增或遞減順序自動生成,用於自動產生表中主鍵的值,是一種高效的獲取唯一鍵值的途徑。通常為主鍵服務,是一組有序的整數值,如1,2,3,4,5,.......................

mysql不支援序列機制,但是mysql的auto_increment可以達到與序列機制一樣的效果。我們稱之為自增長序列。

1)auto_increment 關鍵字,用來對有主鍵約束的字段做自增操作。

2)自增長序列預設從1開始

3)自增長序列的步數為1

4)可以設定起始數字

用法如下:

建表時設定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;

作用:獲取序列最後一次的值。

select last_insert_id();

01 2資料庫約束條件

約束的分類 1 主鍵 pk primary key 2 唯一約束 uk unique key 3 外來鍵約束 fk foreign key 4 非空約束 nn not null 5 檢查約束 ck check 6 預設值約束 default ps 1 pk uk nn 唯一且非空 2 實現方法 co...

資料庫之約束條件

約束條件 python primary key pk 標識該字段為該錶的主鍵,可以唯一的標識記錄 foreign key fk 標識該字段為該錶的外來鍵 not null 標識該欄位不能為空 unique key uk 標識該字段的值是唯一的 auto increment 標識該字段的值自動增長 整...

資料庫表的約束條件

主鍵約束可以用兩種方式定義 列級主鍵約束和表級主鍵約束 列級主鍵約束演示 create table dept htlwk deptno varchar 20 primary key,列級約束條件 dname varchar 20 location varchar 40 表級主鍵約束演示 create...