目錄
1.簡介
1.概念
2.作用
3.分類
2.主鍵約束?
1.概念
2.操作
1.添加單列主鍵
2.添加多列聯(lián)合主鍵
3.?通過修改表結(jié)構(gòu)添加主鍵
4.刪除主鍵
3.自增長約束(auto_increment)
1.概念
2.特點
3.指定自增字段初始值
4.delete和truncate在刪除后自增列的變化
4.非空約束(not null)
1.概念
2.語法
3.添加非空約束
4.刪除非空約束
1.簡介
1.概念
約束英文: constraint
約束實際上就是表中數(shù)據(jù)的限制條件
2.作用
表在設(shè)計的時候加入約束的目的就是為了保證表中的記錄完整性和有效性,比如用戶表有些列的值
(手機號)不能為空,有些列的值(身份證號)不能重復(fù)。
3.分類
- 主鍵約束(primary key) PK
- 自增長約束(auto_increment)
- 非空約束(not null)
- 唯一性約束(unique)
- 默認約束(default)
- 零填充約束(zerofill)
- 外鍵約束(foreign key) FK
2.主鍵約束?
1.概念
- MySQL主鍵約束是一個列或者多個列的組合,其值能唯一地標識表中的每一行,方便在RDBMS中盡快的找到某一行
- 主鍵約束相當于 唯一約束+非空約束 的組合,主鍵約束列不允許重復(fù),也不允許出現(xiàn)空值。
- 每個表最多只允許一個主鍵
- 主鍵約束的關(guān)鍵字是: primary key
- 當創(chuàng)建主鍵的約束時,系統(tǒng)默認會在所在的列和列組合上建立對應(yīng)的唯一索引
2.操作
1.添加單列主鍵
創(chuàng)建單列主鍵有兩種方式,一種是在定義字段的同時指定主鍵,一種是定義完字段之后指定主鍵
方式1-語法:
-- 在 create table 語句中,通過 PRIMARY KEY關(guān)鍵字來指定主鍵。
-- 在定義字段的同時指定主鍵,語法格式如下:
create table表名(
...
<字段名><數(shù)據(jù)類型>primary key
...
)
方式1-實現(xiàn):
use abc;
create table emp1(
eid int primary key,
name varchar(20),
deptId int,
salary double
);
方式2-語法:
--在定義字段之后再指定主鍵,語法格式如下:
create table表名(
...
[constraint <約束名>] primary key [字段名]
) ;
方式2-實現(xiàn):
use abc;
create table emp2(
eid int,
name varchar(20),
deptId int,
salary double,
constraint pk1 primary key(eid)
);
也可以省略“constra pk1”?
use abc;
create table emp2(
eid int,
name varchar(20),
deptId int,
salary double,
primary key(eid)
);
2.添加多列聯(lián)合主鍵
所謂的聯(lián)合主鍵,就是這個主鍵是由一張表中多個字段組成的。
注意:
- 當主鍵是由多個字段組成時,不能直接在字段名后面聲明主鍵約束。
- 一張表只能有一個主鍵,聯(lián)合主鍵也是一個主鍵
語法:
create table 表名(
...
primary key(字段1,字段2,...,字段n)
);
實現(xiàn):
create table emp3(
eid int,
name varchar(20),
deptId int,
salary double,
primary key(eid,name)
);
3.?通過修改表結(jié)構(gòu)添加主鍵
主鍵約束不僅可以在創(chuàng)建表的同時創(chuàng)建,也可以在修改表時添加。
語法:
create table 表名(
...
);
alter table <表名> add primary key(字段列表);
實現(xiàn):
*添加單列主鍵
create table emp4(
eid int,
name varchar(20),
deptId int,
salary double
);
alter table emp4 add primary key (eid);
*添加多列主鍵?
create table emp4(
eid int,
name varchar(20),
deptId int,
salary double
);
alter table emp4 add primary key (eid,deptId);
4.刪除主鍵
一個表中不需要主鍵約束時,就需要從表中將其刪除。刪除主鍵約束的方法要比創(chuàng)建主鍵約束容易
的多。
格式:
alter table <數(shù)據(jù)表名> drop primary key;
實現(xiàn):
-- 刪除單列主鍵
alter table emp1 drop primary key;
-- 刪除聯(lián)合主鍵
alter table emp5 drop primary key;
?所以不管是單列還是聯(lián)合,都是同樣的格式
3.自增長約束(auto_increment)
1.概念
在MysQL中,當主鍵定義為自增長后,這個主鍵的值就不再需要用戶輸入數(shù)據(jù)了,而由數(shù)據(jù)庫系
統(tǒng)根據(jù)定義自動賦值。每增加一條記錄,主鍵會自動以相同的步長進行增長。
通過給字段添加 auto_increment 屬性來實現(xiàn)主鍵自增長
語法:
字段名 數(shù)據(jù)類型 auto_increment
實現(xiàn):
create table t_user1(
id int primary key auto_increment,
name varchar(20)
);
insert into t_user1 values(NULL,'張三');
insert into t_user1(name) values('李四');
2.特點
- 默認情況下,auto_increment的初始值是1,每新增一條記錄,字段值自動加1。
- 一個表中只能有一個字段使用auto_increment約束,且該字段必須有唯一索引,以避免序號重復(fù)(即為主鍵或主鍵的一部分)。
- auto increment約束的字段必須具備NOT NULL屬性。
- auto_increment約束的字段只能是整數(shù)類型(TINYINT、SMALLINT、INT、BIGINT等)。
- auto_increment約束字段的最大值受該字段的數(shù)據(jù)類型約束,如果達到上限,auto_increment就會失效。
3.指定自增字段初始值
如果第一條記錄設(shè)置了該字段的初始值,那么新增加的記錄就從這個初始值開始自增。例如,如果
表中插入的第一條記錄的id值設(shè)置為5,那么再插入記錄時,id值就會從5開始往上增加?
- 方式1:創(chuàng)建表時指定
create table t_user2(
id int primary key auto_increment,
name varchar(20)
)auto_increment=100;
insert into t_user2 values(NULL,'張三');
auto_increment=100,id值就會從100開始往上增加
- 方式2:創(chuàng)建表之后指定
create table t_user3(
id int primary key auto_increment,
name varchar(20)
);
alter table t_user3 auto_increment=200;
insert into t_user3 values(NULL,'張三');
?
4.delete和truncate在刪除后自增列的變化
- delete? ? ? ?刪除數(shù)據(jù)之后自動增長從斷點開始(自增長還是在最后一個值基礎(chǔ)上加1)
delete from t_user1;
- truncate? ? 刪除數(shù)據(jù)之后自動增長從默認起始值開始(相當于將表刪了,重新建一個新表)
truncate t_user1;
4.非空約束(not null)
1.概念
MySQL非空約束(not null)指字段的值不能為空。
對于使用了非空約束的字段,如果用戶在添加數(shù)據(jù)時沒有指定值,數(shù)據(jù)庫系統(tǒng)就會報錯。
2.語法
方式1:<字段名> <數(shù)據(jù)類型> not null;
方式2:alter table 表名 modify 字段 類型 not null;
3.添加非空約束
-
方式1:創(chuàng)建表時指定
create table t_user6(
id int,
name varchar(20) not null,
address varchar(20) not null
);
insert into t_user6(id) values(1001); -- 不可以
insert into t_user6(id,name,address) values(1001,null,null); -- 不可以
insert into t_user6(id,name,address) values(1001,'null','null'); -- 可以(字符串)
insert into t_user6(id,name,address) values(1001,'',''); -- 可以(空串)
-
方式2:創(chuàng)建表之后指定
create table t_user7(
id int,
name varchar(20),
address varchar(20)
);
alter table t_user7 modify name varchar(20) not null;
alter table t_user7 modify address varchar(20) not null;
desc t_user7;
desc查看表結(jié)構(gòu)的詳細信息
此處desc是describe的縮寫,用法: desc 表名/查詢語句
4.刪除非空約束
alter table t_user7 modify name varchar(20);
alter table t_user7 modify address varchar(20);
刪除not null即可文章來源:http://www.zghlxwxcb.cn/news/detail-408504.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-408504.html
到了這里,關(guān)于數(shù)據(jù)庫----------約束、主鍵約束的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!