约束

#常见约束

NOT NULL:非空

该字段的值是必填的,如果不设置该约束,该字段默认是可以为空

DEFAULT:默认

该字段有默认值

CHECK:检查,mysql语法支持,但效果不支持

该字段值可以加以限制,比如年龄可以控制在0-120之间

PRIMARY KEY:主键

该字段值不可以重复

1、不可以为空

2、一个表中只能有一个主键,但是可以多个字段做组合主键

UNIQUE:唯一约束

该字段值不可以重复

1、可以为空

2、一个表中可以有多个唯一键,可以有组合唯一键

FOREIGN KEY:外键

用于限制多表的关系

1、从表的该字段值必须来自于主表的关联列的值

2、从表和主表的关联列的类型必须一样

3、主表的关联列必须是主键

4、在从表中设置外键

5、一个表中可以添加多个外键

6、插入数据时,先插入主表

   删除数据时,先删除从表

分类:

     位置 支持

列级约束 列的后面 除了外键

表级约束 表的后面 除了非空和默认

#一、★★★★★★★★★★★创建表时添加约束 ★★★★★★★★★★★  √

#CREATE TABLE表名(

# 字段名 字段类型 列级约束,

# 字段名 字段类型 列级约束,

# 表级约束

#1.添加列级约束  shift + f3

use test;

drop table if exists stuinfo;

create table stuinfo(

id int not null unique,#非空约束+唯一约束

stuname varchar(20) unique,#唯一约束

gender char default '男',#默认约束

age int unsigned check (age between 0 and 120)#检查约束

);

desc stuinfo;

select * from stuinfo;

#插入默认值

insert into stuinfo(id,stuname,age) values(3,'lily',12);

insert into stuinfo values(5,'jack',default,900);

#唯一和主键

#1.关于插入null

insert into stuinfo values(7,null,default,900);

#2.关于插入多个唯一或主键

drop table if exists stuinfo;

create table stuinfo(

id int not null unique,#非空约束+主键约束

stuname varchar(20) unique,#唯一约束

gender char default '男',#默认约束

age int unsigned check (age between 0 and 120)#检查约束

);

2、表级约束

#添加表级约束

#语法

create table stuinfo(

id int ,

stuname varchar(20),

gender char,

age int unsigned,

【constraint 约束名】约束类型(字段)

);

#案例

create table grade(

id int primary key,

gradename varchar(20)

)

drop table if exists stuinfo;

create table stuinfo(

id int not null,

stuname varchar(20),

gender char default '男',

age int unsigned,

gradeid int,

primary key(id,stuname),#组合主键:id+stuname

constraint uq unique(age),#唯一键

constraint fk_stuinfo foreign key(gradeid) references grade(id)#外键约束

);

DESC stuinfo;

SELECT * FROM grade;

#①组合主键

INSERT INTO grade VALUES(1,'一年级'),(2,'二年级'),(3,'三年级');

INSERT INTO stuinfo VALUES(2,'lucy','男',233,1);

#②外键

INSERT INTO stuinfo VALUES(3,'lucy','男',13,10);

3、修改表时添加约束

#★★★★★★★★★★★修改表时添加约束 ★★★★★★★★★★★

#案例:

drop table if exists stuinfo;

create table stuinfo(

id int ,

stuname varchar(20),

gender char,

age int unsigned,

gradeid int

);

desc stuinfo;

#1.添加非空

ALTER TABLE stuinfo MODIFY COLUMN gender CHAR NOT NULL

#2.添加默认

ALTER TABLE stuinfo MODIFY COLUMN age INT UNSIGNED DEFAULT 18;

#3.添加主键

#①方式一:列级约束的做法

ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

#②方式二:表级约束的做法

#语法:

#ALTER TABLE表名 ADD [CONSTRAINT 约束名]  约束类型 (字段);

#案例:

ALTER TABLE stuinfo ADD PRIMARY KEY(id);

#4.添加唯一

#①方式一:列级约束的做法

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) UNIQUE;

#②方式二:表级约束的做法

ALTER TABLE stuinfo ADD CONSTRAINT uq_stuinfo UNIQUE(stuname);

#5.添加外键

ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_grade FOREIGN KEY(gradeid) REFERENCES grade(id);

4、修改表时除约束

##三、★★★★★★★★★★★修改表时删除约束 ★★★★★★★★★★★

#1.删除非空

ALTER TABLE stuinfo MODIFY COLUMN gender CHAR ;

#2.删除默认

ALTER TABLE stuinfo MODIFY COLUMN age INT UNSIGNED;

#3.删除主键

ALTER TABLE stuinfo MODIFY COLUMN id INT ;

ALTER TABLE stuinfo DROP PRIMARY KEY;

#4.删除唯一

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20);

ALTER TABLE stuinfo DROP INDEX uq_stuinfo;

#查看指定表的所有索引

SHOW INDEX FROM stuinfo;

#5.删除外键

ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_grade;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。