日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql表添加完整性约束_SQL语句——完整性约束

發布時間:2024/9/27 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语句——完整性约束的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。