好程式設計師大資料培訓分享MySQL資料庫約束條件和自增長序列
好程式設計師大資料培訓分享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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料培訓分享mysql資料型別程式設計師大資料MySql資料型別
- 好程式設計師大資料培訓分享之MySQL資料庫SQL簡介程式設計師大資料MySql資料庫
- 好程式設計師大資料培訓分享之《MySQL資料庫》常用函式整理程式設計師大資料MySql資料庫函式
- 好程式設計師大資料培訓分享MySQL資料庫儲存引擎簡介程式設計師大資料MySql資料庫儲存引擎
- 好程式設計師大資料培訓分享MapReduce理解程式設計師大資料
- 好程式設計師大資料培訓分享大資料還學嗎?程式設計師大資料
- 好程式設計師大資料培訓分享大資料的應用程式設計師大資料
- 好程式設計師大資料培訓分享MySQL8.0新特性程式設計師大資料MySql
- 好程式設計師大資料培訓分享大資料面試寶典一程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典二程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典三程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典四程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典六程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料的影響一程式設計師大資料
- 好程式設計師大資料培訓分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料培訓分享大資料兩大核心技術程式設計師大資料
- 好程式設計師大資料培訓分享大資料就業方向有哪些?程式設計師大資料就業
- 好程式設計師大資料培訓分享之Ambari和ClouderaManager對比程式設計師大資料Cloud
- 好程式設計師大資料培訓分享Hadoop怎樣處理資料?程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享:Hadoop叢集同步程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享Spark技術總結程式設計師大資料Spark
- 好程式設計師大資料培訓分享演算法系列資料庫使用者管理程式設計師大資料演算法資料庫
- 好程式設計師大資料培訓分享之hive儲存過程程式設計師大資料Hive儲存過程
- 好程式設計師大資料培訓分享HBase Filter過濾器概述程式設計師大資料Filter過濾器
- 好程式設計師大資料培訓分享Hadoop入門進階程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享Hadoop的shuffle過程程式設計師大資料Hadoop
- 好程式設計師大資料培訓分享如何區分Hive與HBase程式設計師大資料Hive
- 好程式設計師大資料培訓分享Hadoop分散式叢集程式設計師大資料Hadoop分散式
- 好程式設計師大資料培訓分享Spark需要什麼基礎?程式設計師大資料Spark
- 好程式設計師大資料培訓分享怎樣進行大資料入門學習程式設計師大資料
- 好程式設計師大資料培訓分享常見的Hadoop和Spark專案程式設計師大資料HadoopSpark
- 好程式設計師大資料培訓分享settings和mapping的意義程式設計師大資料APP
- 好程式設計師大資料培訓分享Hive基礎知識講解程式設計師大資料Hive
- 好程式設計師大資料培訓分享之hive常用內部函式程式設計師大資料Hive函式
- 好程式設計師大資料培訓分享Hadoop技術優缺點程式設計師大資料Hadoop
- 好程式設計師大資料培訓教你快速學習MapReduce程式設計師大資料
- 好程式設計師大資料培訓分享之hive常見自定義函式程式設計師大資料Hive函式