標籤:
MySQL 欄位約束 null,not null,default,auto_increment【來源於】沒有規矩,不成方圓,任何事物都是如此。在MySQL中,每個欄位定義都包含附加約束或者修飾符,這些可以用來增加對所輸入資料的約束。今天我們就來看一下MySQL的欄位約束:NULL和NOT NULL修飾符、DEFAULT修飾符,AUTO_INCREMENT修飾符。
NULL 和 NOT NULL 修飾符:
可以在每個欄位後面都加上這NULL 或 NOT NULL 修飾符來指定該欄位是否可以為空白(NULL),還是說必須填上資料(NOT NULL)。MySQL預設情況下指定欄位為NULL修飾符,如果一個欄位指定為NOT NULL,MySQL則不允許向該欄位插入空值(這裡面說的空值都為NULL),因為這是“龜定”。
| 1234567891011121314151617 |
/*建立好友表,其中id ,name ,pass都不可為空*/create table friends (id int(3) not null,name varchar(8) not null,pass varchar(20) not null); /*錯誤提示,id列不可為空#1048 - Column ‘id‘ cannot be null*/INSERT INTO friendsVALUES (NULL , ‘simaopig‘, ‘simaopig‘); |
但是在自增列和TIMESTAMP欄位中,這個規則並不適用。向這些欄位中插入NULL值將會導致插入下一個自動增加的值或者當前的時間戳記。
DEFAULT 修飾符:
可以使用DEFAULT修飾符為欄位設定一個預設值。當插入記錄時,您老人家忘記傳該欄位的值時,MySQL會自動為您設定上該欄位的預設值。
| 1234567891011121314151617181920212223 |
/*建立im表,將name欄位設定為預設值‘QQ‘*/create table im (id int(3) not null,name varchar(25) not null default ‘QQ‘); /*插入資料,不傳name欄位的值,MySQL會為其設定預設值的您啟動並執行 SQL 陳述式已經成功運行了。*/INSERT INTO im( id, name ) VALUES ( 2, ‘MSN‘ ) ; INSERT INTO im( id ) VALUES ( 3 ) ; SELECT * FROM im LIMIT 0 , 30; /* id name 2 MSN 3 QQ*/ |
如果一個欄位中沒有指定DEFAULT修飾符,MySQL會依據這個欄位是NULL還是NOT NULL自動化佈建預設值。如果指定欄位可以為NULL,則MySQL為其設定預設值為NULL。如果是NOT NULL欄位,MySQL對於數實值型別插入0,字串類型插入Null 字元串,時間戳記類型插入當前日期和時間,ENUM類型插入枚舉組的第一條。
AUTO_INCREMENT 修飾符:
AUTO_INCREMENT修飾符只適用於INT欄位,表明MySQL應該自動為該欄位產生一個數(每次在上一次產生的數值上面加1)。對於主鍵(稍候介紹),這是非常有用的。因為其允許開發人員使用MySQL為每條記錄建立唯一的標識符。
| 123456789101112131415161718192021222324252627282930 |
/*您啟動並執行 SQL 陳述式已經成功運行了。 ( 查詢花費 0.0170 秒 )*/CREATE TABLE items(id int( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,label varchar( 255 ) NOT NULL); /*插入三條資料,不指定id,採用預設值,加上AUTO_INCREMENT您啟動並執行 SQL 陳述式已經成功運行了。*/insert into items(label) values (‘xxx‘); insert into items(label) values (‘yyy‘); insert into items(label) values (‘zzz‘); /*全顯示出來,看一下資料,注意看id的變化*/ select * from items; /* id label 1 xxx 2 yyy 3 zzz*/ |
MySQL表中只能有一個AUTO_INCREMENT欄位,而且這個欄位必須被定義為鍵。除了欄位的約束,MySQL也允許表級的約束,比如主鍵和外鍵、索引和惟一約束。這些約束置於CREATE TABLE命令的欄位定義的後面。稍候為您介紹。敬請期待。
mysql簡單建表