mysql表添加完整性约束_SQL语句——完整性约束
1.MySQL支持的完整性約束
a.主鍵約束
特點:唯一且非空
主鍵可以由一個字段組成,也可以由多個字段組成
如果主鍵由一個字段組成,既可以添加到列級,也可以添加到表級。
如果主鍵由多個字段組成,則只能添加到表級。
(1)在字段的列級添加約束
create table 表名(
字段名 字段類型 primary key
)
create table student_1(
id varchar(10) primary key,
name varchar(15),
age int(2),
sex varchar(1)
)
desc student_1
(2)表級上添加主鍵約束
creat tabel 表名 (
字段名1,字段類型1,
字段名2,字段類型2,
……
字段名n, 字段類型n,
[constraint 主鍵約束名] primary key(字段名)
)
create table student_2(
id int(8),
name varchar(20),
age int(2),
sex varchar(1),
constraint pk_student_2 primary key(id)
)
-- 查看表結構
desc student_2
(3)多個字段作為組件,只能添加到表級
creat table 表名(
字段名1,字段類型1,
字段名2,字段類型2,
……
字段名n,字段類型n,
[constraint 主鍵約束名] primary key(字段名1,字段名2…)
)
create table student_3(
id int(8),
name varchar(20),
school varchar(10),
age int(2),
sex varchar(1),
constraint pk_student_3 primary key(school,id)
)
-- 查看表結構
desc student_3
(4)給已有表添加主鍵
語法:alter table 表名 add[constraint 主鍵約束名] primary key(字段名)
create table student_4(
id int(8),
name varchar(20),
school varchar(10),
age int(2),
sex varchar(1)
)
alter table student_4 add constraint pk_student_4 primary key(id)
-- 查看表結構
desc student_4
(5)刪除主鍵約束
語法:alter table 表名 drop primary key;
alter table student_4 drop primary key
b.唯一約束 unique
指:表中字段的值不能重復
(1)列級添加唯一約束,語法:
creat tabel 表名 (
字段名1,字段類型1 unique,
字段名2,字段類型2,
……
字段名n, 字段類型n
)
create table student_5(
id int(8),
name varchar(20) unique,
school varchar(10),
age int(2),
sex varchar(1)
)
-- 查看表結構
desc student_5
(2)表級添加唯一約束:
creat table 表名(
字段名1,字段類型1,
字段名2,字段類型2,
……
字段名n,字段類型n,
[constraint 唯一約束名] unique (字段名1,字段名2…)
)
create table student_6(
id int(8),
name varchar(20),
age int(2),
sex varchar(1),
constraint uk_student_6_id_name unique(id,name)
)
(3)給已有表添加唯一約束
alter table 表名 add [constraint 唯一約束名] unique (字段名1,字段名2…)
create table student_7(
id int(8),
name varchar(20),
age int(2),
sex varchar(1)
)
alter table student_7 add constraint uk_student_7_name unique(name)
-- 查看表結構
desc student_7
(4)刪除唯一約束
語法:
alter table 表名 drop index 唯一約束名
注意:如果單個字段沒有指定唯一約束名,則默認的唯一約束名為字段名
create table student_7(
id int(8),
name varchar(20),
age int(2),
sex varchar(1)
)
alter table student_7 add unique(name)
alter table student_7 drop index name
-- 查看表結構
desc student_7
如果是多個字段組合為唯一約束時候,默認的唯一約束名為第一個字段的名稱
如果指定了約束名,則刪除的時候寫約束名
create table student_7(
id int(8),
name varchar(20),
age int(2),
sex varchar(1)
)
alter table student_7 add constraint uk_student_7_name unique(name)
alter table student_7 drop index uk_student_7_name
c.非空約束
某張表中某字段的值不能為空
注意:1.只能使用列級添加
2.空字符串“ ” 或者0都不是null
(1)列級添加非空約束
creat table 表名(
字段名 字段類型 not null
)
create table student_8(
id int(8) not null,
name varchar(20),
age int(2),
sex varchar(1)
)
-- 查看表結構
desc student_8
(2)給已有表添加非空約束
alter table 表名 modify 字段名 字段類型 not null
create table student_9(
id int(8),
name varchar(20),
age int(2),
sex varchar(1)
)
alter table student_9 modify name varchar(20) not null
-- 查看表結構
desc student_9
(3)刪除非空約束
alter table 表名 modify 字段名 字段類型 [null]
alter table student_9 modify name varchar(20)
[ ]內的內容可寫可不寫
d.默認值約束(default)
指在沒有對某字段插入具體值的時候,會默認的值
注意:1.只能使用列級約束
2.對于使用默認值約束,如果插入的數據為“null”,則不會使用默認值,只有沒有插入數據時候,才會使用默認值。
(1)列級添加默認追約束
語法:creat table 表名 (
字段名 字段類型 default value
)
create table student_10(
id int(8),
name varchar(20),
age int(2),
sex varchar(1) default '男'
)
-- 查看表結構
desc student_10
(2)給已有表添加默認值約束
alter table 表名 modify 字段名 字段類型 default value
create table student_11(
id int(8),
name varchar(20),
age int(2),
sex varchar(1)
)
alter table student_11 modify sex varchar(1) default '男'
-- 查看表結構
desc student_11
(3)刪除默認值約束
alter table 表名 modify 字段名 字段類型
alter table student_11 modify sex varchar(1)
e.自動增長約束(auto_increment)
指:表中某字段的值會自動增加
注意:1.一張表中只能有一個自動增長的字段
2.配合主鍵一起使用,并且只適用于整數類型
3.自動增長默認的初始值1,每增加一條記錄,該字段的值會增加1.
(1)創建表的時候創建自動增長約束
create table 表名(
字段名 字段類型 auto_increment
)
create table student_12(
id int(8) PRIMARY KEY auto_increment,
name varchar(20) ,
age int(2),
sex varchar(1)
)
(2)給已有表添加自動增長約束
alter table 表名 modify 字段名 字段類型 auto_increment
create table student_13(
id int(8)PRIMARY KEY,
name varchar(20) ,
age int(2),
sex varchar(1)
)
alter table student_13 modify id int(8) auto_increment
-- 查看表結構
desc student_13
(3)刪除自動增長約束
語法:alter table 表名 modify 字段名 字段類型
alter table student_13 modify
f.外鍵約束(foreign key)
外鍵:某一表中某字段的值依賴于另一張表中某字段的值
如果一個字段X在一張表(表一)中是主關鍵字,而在另外一張表(表二)中不是主關鍵字,則字段X稱為表二的外鍵;換句話說如果關系模式R1中的某屬性集不是自己的主鍵,而是關系模式R2的主鍵,則該屬性集稱為是關系模式R1的外鍵。
作用:主要實現了數據庫中的參照完整性
將兩張表緊密結合,對某張表修改或者刪除時候,要保證數據的完整
例如:班級(t_class)學生(t_student)關系:1-n (一對多)
(1)創建外鍵約束
注意:雖然MySQL提供了列級添加外鍵約束,但添加完后不會生效,所以使用表級添加外鍵約束。
語法:create table 表名(
字段名,字段類型
[constraint 外鍵約束名] foreign key(字段名) references 表(字段名)
)
create TABLE t_class(
cno INT(8) PRIMARY KEY auto_increment,
cname VARCHAR(20)
)
create TABLE t_student(
son INT(8) PRIMARY KEY auto_increment,
sname VARCHAR(20),
age INT(2),
sex VARCHAR(2),
stu_con INT(8),
CONSTRAINT fk_t_student_stu_con FOREIGN KEY(stu_con) REFERENCES t_class(cno)
)
(2)在已有表中添加外鍵約束
語法:alter table 表名 add [constraint 外鍵約束名] foreign key(字段名) references 表(字段名)
例如:班級(tt_class)學生(tt_student)
--創建班級表(tt_class)
create TABLE tt_class(
cno INT(8) PRIMARY KEY auto_increment,
cname VARCHAR(20)
)
--創建學生表(tt_student)
create TABLE tt_student(
son INT(8) PRIMARY KEY auto_increment,
sname VARCHAR(20),
stu_cno INT(8)
)
--給tt_student表添加外鍵約束
alter table tt_student add CONSTRAINT fk_tt_student_stu_cno FOREIGN KEY (stu_cno) REFERENCES tt_class(cno)
desc tt_class
desc tt_student
(3)刪除外鍵約束
alter table 表名 drop foreign key 外鍵約束名
--刪除外鍵約束名
alter table tt_student drop foreign key fk_tt_student_stu_cno
(4)有關系的表進行刪除
(1)以公共關鍵字作主鍵的表為主鍵表(父表,主表)
(2)以公共關鍵字作外鍵的表為外鍵表(從表,外表)
a.先刪除有外鍵約束的表(從表),再刪除主表
會報錯:
t_student t_class
drop table t_class;
[SQL] drop table t_class;
[Err] 3730 - Cannot drop table 't_class' referenced by a foreign key constraint 'fk_t_student_stu_con' on table 't_student'.
應該:
drop table t_student;
drop table t_class;
b.先刪除外鍵約束,再刪除表
alter table t_student drop FOREIGN KEY fk_t_student_stu_con
drop table t_class
drop table t_student
總結
以上是生活随笔為你收集整理的mysql表添加完整性约束_SQL语句——完整性约束的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php有哪些高级扩展,php扩展有哪些
- 下一篇: java客户端_Java常用的Http