好程式設計師大資料培訓分享MySQL資料庫約束條件和自增長序列

好程式設計師發表於2020-05-26

  好程式設計師大資料培訓分享MySQL 資料庫約束條件和自增長序列, 一、約束(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 ();


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

相關文章