MySQL約束constraint用法詳解
目錄
- 前言
- 一:主鍵約束 primary key
- 1.添加單列主鍵
- 2.添加多列主鍵(聯(lián)合主鍵)
- 3.通過(guò)修改表結(jié)構(gòu)添加主鍵
- 4.刪除主鍵約束
- 二:自增長(zhǎng)約束 auto_increment
- 1.添加自增長(zhǎng)約束
- 2. 指定自增字段初始值
- 三:非空約束 not null
- 1.添加非空約束
- 2.刪除非空約束
- 四: 唯一性約束
- 總結(jié)
前言
約束canstraint,約束實(shí)際上就是表中數(shù)據(jù)的限制條件。表在設(shè)置的時(shí)候加入約束的目的是為了保證表中的記錄完整性和有效性,比如用戶的某些數(shù)據(jù)不能為空。
常用約束:
添加約束的兩種方法:
- 在創(chuàng)建表的時(shí)候添加 create
- 在修改標(biāo)的時(shí)候添加 alter
一:主鍵約束 primary key
注意:
1.主鍵約束的列非空且唯一,不能是null,不能重復(fù)
2.聯(lián)合主鍵的每一列都不能為null
1.添加單列主鍵
創(chuàng)建單列主鍵有兩種方式,一種是在定義字段的同時(shí)指定主鍵,一種是定義完字段之后指定主鍵。
use name;create table emp1( eid int primary key, name varchar(20), edptId int, salary double);
constraint <約束名> 可以省略(相當(dāng)于給約束起一個(gè)名字)
create table emp2( eid int, name varchar(20), deptId int, salary double, constraint pk1 primary key(eid) -- constraint pk1 可以省略);
2.添加多列主鍵(聯(lián)合主鍵)
-- 聯(lián)合主鍵,就是由多個(gè)字段組成一個(gè)主鍵約束create table emp3( name varchar(20), deptId int, salary double, constraint pk2 primary key(name,deptId));-- 空字符串不等于nullinsert into emp3 values("",20,30);-- 主鍵不能為空,insert into emp3 values(null,29,32);
3.通過(guò)修改表結(jié)構(gòu)添加主鍵
use name;-- 添加單列主鍵create table emp4( eid int, name varchar(20), deptId int, salary double);alter table emp4 add primary key(eid);-- 添加多列主鍵create table emp5( eid int, name varchar(20), deptId int, salary double);alter table emp5 add primary key(name,deptId);
4.刪除主鍵約束
-- 刪除主鍵-- 1.刪除單列主鍵alter table emp1 drop primary key;-- 2.刪除多列主鍵alter table emp5 drop primary key;
二:自增長(zhǎng)約束 auto_increment
在 MySQL 中,當(dāng)主鍵定義為自增長(zhǎng)后,這個(gè)主鍵的值就不再需要用戶輸入數(shù)據(jù)了,而由數(shù)據(jù)庫(kù)系統(tǒng)根據(jù)定義自動(dòng)賦值。每增加一條記錄,主鍵會(huì)自動(dòng)以相同的步長(zhǎng)進(jìn)行增長(zhǎng)。通過(guò)給字段添加 auto_increment 屬性來(lái)實(shí)現(xiàn)主鍵自增長(zhǎng)
Ø 默認(rèn)情況下,auto_increment的初始值是 1,每新增一條記錄,字段值自動(dòng)加 1。
Ø 一個(gè)表中只能有一個(gè)字段使用 auto_increment約束,且該字段必須有唯一索引,以避免序號(hào)重復(fù)(即為主鍵或主鍵的一部分)。
Ø auto_increment約束的字段必須具備 NOT NULL 屬性。
Ø auto_increment約束的字段只能是整數(shù)類型(TINYINT、SMALLINT、INT、BIGINT 等。
Ø auto_increment約束字段的最大值受該字段的數(shù)據(jù)類型約束,如果達(dá)到上限,auto_increment就會(huì)失效。
1.添加自增長(zhǎng)約束
create table t_user1( id int primary key auto_increment, name varchar(20));
2. 指定自增字段初始值
如果第一條記錄設(shè)置了該字段的初始值,那么新增加的記錄就從這個(gè)初始值開(kāi)始自增。例如,如果表中插入的第一條記錄的 id 值設(shè)置為 5,那么再插入記錄時(shí),id 值就會(huì)從 5 開(kāi)始往上增加
-- 方式一:創(chuàng)建表的時(shí)候指定create table t_user2( id int primary key auto_increment, name varchar(20))auto_increment = 100;insert into t_user2 values (null,"張三");
-- 方式二:創(chuàng)建表之后指定create table t_user3( id int primary key auto_increment, name varchar(20));alter table t_user3 auto_increment = 200;
三:非空約束 not null
MySQL 非空約束(not null)指字段的值不能為空。對(duì)于使用了非空約束的字段,如果用戶在添加數(shù)據(jù)時(shí)沒(méi)有指定值,數(shù)據(jù)庫(kù)系統(tǒng)就會(huì)報(bào)錯(cuò)。
注意:
1.添加非空約束
-- 1.創(chuàng)建表時(shí)指定非空約束create table t_user6( id int, name varchar(20) not null, address varchar(20) not null);insert into t_user6(id) values (1007); -- 不可以insert into t_user6(id,name,address) values(1001,null,null); --不可以insert into t_user6(id,name,address) values(1001,"NULL","NULL"); --可以(字符串null)insert into t_user6(id,name,address) values(1001,"",""); -- 可以(空串)
-- 2.創(chuàng)建非空約束,創(chuàng)建表之后指定create table t_user7( id int, name varchar(20), -- 指定非空約束 address varchar(20));alter table t_user7 modify name varchar(20) not null;
2.刪除非空約束
-- 刪除非空約束alter table t_user7 modify name varchar(20);alter table t_user7 modify address varchar(20);
四: 唯一性約束
默認(rèn)約束 default
零填充約束 zerosfill
外鍵約束 foreign key
總結(jié)
到此這篇關(guān)于MySQL約束constraint用法詳解的文章就介紹到這了,更多相關(guān)MySQL約束constraint內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
