在mysql中null,not null,default,auto_increment幾個(gè)是我們常用的內(nèi)容,下面我來(lái)詳細(xì)但要msyql中null,not null,default,auto_increment的用法.
NULL 和 NOT NULL 修飾符:
可以在每個(gè)字段后面都加上這NULL 或 NOT NULL 修飾符來(lái)指定該字段是否可以為空(NULL),還是說(shuō)必須填上數(shù)據(jù)(NOT NULL),MySQL默認(rèn)情況下指定字段為NULL修飾符,如果一個(gè)字段指定為NOT NULL,MySQL則不允許向該字段插入空值(這里面說(shuō)的空值都為NULL),因?yàn)檫@是"龜定",代碼如下:
- /*
- 創(chuàng)建好友表,其中id ,name ,pass都不能為空
- */
- create table friends (
- id int(3) not null,
- name varchar(8) not null,
- pass varchar(20) not null
- );
- /*
錯(cuò)誤提示,id列不能為空,代碼如下:
- #1048 - Column 'id' cannot be null
- */
- INSERT INTO friends
- VALUES (
- NULL , 'simaopig', 'simaopig'
- );
但是在自增列和TIMESTAMP字段中,這個(gè)規(guī)則并不適用,向這些字段中插入NULL值將會(huì)導(dǎo)致插入下一個(gè)自動(dòng)增加的值或者當(dāng)前的時(shí)間戳.
DEFAULT 修飾符:
可以使用DEFAULT修飾符為字段設(shè)定一個(gè)默認(rèn)值,當(dāng)插入記錄時(shí),您老人家忘記傳該字段的值時(shí),MySQL會(huì)自動(dòng)為您設(shè)置上該字段的默認(rèn)值,代碼如下:
- /*
- 創(chuàng)建im表,將name字段設(shè)置為默認(rèn)值'QQ'
- */
- create table im (
- id int(3) not null,
- name varchar(25) not null default 'QQ'
- );
- /*
插入數(shù)據(jù),不傳name字段的值,MySQL會(huì)為其設(shè)置默認(rèn)值的,您運(yùn)行的 SQL 語(yǔ)句已經(jīng)成功運(yùn)行了,代碼如下:
- */
- 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
- */
如果一個(gè)字段中沒(méi)有指定DEFAULT修飾符,MySQL會(huì)依據(jù)這個(gè)字段是NULL還是NOT NULL自動(dòng)設(shè)置默認(rèn)值。,如果指定字段可以為NULL,則MySQL為其設(shè)置默認(rèn)值為NULL,如果是NOT NULL字段,MySQL對(duì)于數(shù)值類型插入0,字符串類型插入空字符串,時(shí)間戳類型插入當(dāng)前日期和時(shí)間,ENUM類型插入枚舉組的第一條.
AUTO_INCREMENT 修飾符:
AUTO_INCREMENT修飾符只適用于INT字段,表明MySQL應(yīng)該自動(dòng)為該字段生成一個(gè)數(shù)(每次在上一次生成的數(shù)值上面加1),對(duì)于主鍵(稍候介紹),這是非常有用的,因?yàn)槠湓试S開發(fā)者使用MySQL為每條記錄創(chuàng)建唯一的標(biāo)識(shí)符,代碼如下:
- /*
- 您運(yùn)行的 SQL 語(yǔ)句已經(jīng)成功運(yùn)行了。 ( 查詢花費(fèi) 0.0170 秒 )
- */
- CREATE TABLE items(
- id int( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
- label varchar( 255 ) NOT NULL
- );
- /*
- 插入三條數(shù)據(jù),不指定id,采用默認(rèn)值,加上AUTO_INCREMENT
- 您運(yùn)行的 SQL 語(yǔ)句已經(jīng)成功運(yùn)行了。
- */
- insert into items(label) values ('xxx');
- insert into items(label) values ('yyy');
- insert into items(label) values ('zzz');
- /*
- 全顯示出來(lái),看一下數(shù)據(jù),注意看id的變化Vevb.com
- */
- select * from items;
- /*
- id label
- 1 xxx
- 2 yyy
- 3 zzz
- */
MySQL表中只能有一個(gè)AUTO_INCREMENT字段,而且這個(gè)字段必須被定義為鍵,除了字段的約束,MySQL也允許表級(jí)的約束,比如主鍵和外鍵、索引和惟一約束.
命令:create table <表名> ( <字段名1> <類型1> [,..<字段名n> <類型n>]);
例如,建立一個(gè)名為MyClass的表,字段名 數(shù)字類型 數(shù)據(jù)寬度 是否為空 是否主鍵 自動(dòng)增加 默認(rèn)值,代碼如下:
- id int 4 否 primary key auto_increment
- name char 20 否
- sex int 4 否 0
- degree double 16 是
- mysql> create table MyClass(
- > id int(4) not null primary key auto_increment,
- > name char(20) not null,
- > sex int(4) not null default '0',
- > degree double(16,2));
新聞熱點(diǎn)
疑難解答
圖片精選