MySQL数据库的约束

约束

一、列级约束
常见约束
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)#检查约束
);

二、表级约束
语法:
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);

三、修改表时添加约束

案例:

drop table if exists stuinfo;
create table stuinfo(
	id int ,
	stuname varchar(20),
	gender char,
	age int unsigned,
	gradeid int
);
desc stuinfo;

①添加非空

ALTER TABLE stuinfo MODIFY COLUMN gender CHAR NOT NULL; 

②添加默认

ALTER TABLE stuinfo MODIFY COLUMN age INT UNSIGNED DEFAULT 18;

③添加主键
方式一:列级约束的做法

ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

方式二:表级约束的做法

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);

四、修改表时删除约束
①删除非空

ALTER TABLE stuinfo MODIFY COLUMN gender CHAR ;

②删除默认

ALTER TABLE stuinfo MODIFY COLUMN age INT UNSIGNED;

③删除主键

ALTER TABLE stuinfo MODIFY COLUMN id INT ;
ALTER TABLE stuinfo DROP PRIMARY KEY;

④删除唯一

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20);
ALTER TABLE stuinfo DROP INDEX uq_stuinfo;

查看指定表的所有索引

SHOW INDEX FROM stuinfo;

⑤删除外键

ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_grade;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值