字段的約束
- (一)常用約束介紹
- (二)創建帶約束字段的語法格式
- (三)主鍵與自增長
- (四)非空
- (五)唯一
- (六)默認值
(一)常用約束介紹
- 主鍵(primary key):值不能重復,auto_increment 代表值自動增長;
- 非空(not null):此字段不允許填寫空值;
- 唯一(unique):此字段不允許重復;
- 默認值(default):當不填寫此值時會使用默認值,如果填寫時以填寫為準。
(二)創建帶約束字段的語法格式
create table 表名(字段名 數據類型 約束,字段名 數據類型 約束...
);
(三)主鍵與自增長
- 帶有 primary key(主鍵)的字段,值不能重復;
- auto_increment 為自增長;
create table 表名(字段名 數據類型 primary key auto_increment,字段名 數據類型 約束...
);
例1:創建表 d,字段要求如下:
id:數據類型為 int unsigned(無符號整數),primary key(主鍵),auto_increment(自增長);
name:數據類型為varchar(字符串),長度為10;
age:數據類型為 int(整數)。
create table d(id int unsigned primary key,name varchar(10),age int
);
(這個要先把第七行“運行已選擇的”,再把第八行“運行已選擇的”)
主鍵:不能重復。這里是 id 不能重復。
如果插入一條相同 id 的記錄(id 為1),會是什么結果呢?
報錯啦。
我們來查詢一下表 d :
name還是’貂蟬’,name值為’妲己’的記錄并沒有插入。
▲我們來看“auto_increment”的作用:
首先,我們drop刪除一下表:
drop table d;
然后,新建表d:
CREATE TABLE d(id INT UNSIGNED PRIMARY key aotu_increment,name VARCHAR(10),age int
);
我們只插入了指定字段,沒有插入 id,它會自動把 id 寫成 1。
插入第二條沒有指定 id 的記錄的時候,id自動寫成2。
如果插入一條指定 id 的記錄,查詢結果的 id 是指定的 id 值。
▲ 如果插入數據時,插入所有字段,但又沒寫自增長字段的值,insert 語句會出錯。
insert into d values ('甄姬',20);
解決方案:
使用占位符,通常使用0 或者null 來占位。
insert into d (id,name,age) values (0,'甄姬',20);
insert into d (id,name,age) values (null,'甄姬',20);
▲ truncate 和 delete:
delete:刪除后再次新建,id 會接著原來的最后一條記錄的 id 值繼續自增,不會回到1。
truncate:刪除后再次新建,id 從1開始。
(四)非空
帶有 not null (非空)的字段,值不能為空。
create table 表名(字段名 數據類型 not null,...
);
例1:創建表 e,字段要求如下:
id:數據類型為 int unsigned(無符號整數);
name:數據類型為 varchar,長度為10,not null;
age:數據類型為 int。
create table e(id int unsigned,name varchar(10) not null,age int
);
▲ 非空字段表,insert 插入數據一定要指定字段值,不然會插入失敗。
(五)唯一
此字段的值不允許重復。
create table 表名(字段名 數據類型 unique,...
);
例1:
創建表 f,字段要求如下:
id:數據類型為 int;
name:數據類型為 varchar,長度為10,unique;
age:數據類型為 int。
create table f(id int,name varchar(10) unique,age int
);
▲ 唯一字段的表,insert 語句插入數據。
例2:表 f 插入一條記錄
insert into f values (1,'瑤',18);
例3:如果插入的記錄中 name 值重復,會插入失敗。
insert into f values (2,'瑤',20);
(六)默認值
當不填寫此值時會使用默認值,如果填寫時以填寫為準。
create table 表名(字段名 數據類型 default 值,...
);
例1:
創建表 g,字段要求如下:
id:數據類型為 int;
name:數據類型為 varchar,長度為10;
age:數據類型為 int,default,30。
create table g(id int,name varchar(10),age int default 30
);