mysql--约束

约束用于限制加入表的数据类型

新增表时创建约束

eg:

DROP TABLE if EXISTS person;
CREATE TABLE person 
(
 id INT  AUTO_INCREMENT COMMENT 'id',
 lastname VARCHAR(20) COMMENT '姓名',
 sex VARCHAR(255)  not NULL  COMMENT '性别',
 city VARCHAR(255) DEFAULT '中国' COMMENT '地区',
 age INT COMMENT '年龄',
 UNIQUE (lastname),
 PRIMARY KEY (id)
)

效果:
表结构及数据
在这里插入图片描述

涉及语句:

语句关键字作用
CREATE TABLE person建表,person为表名称
DROP TABLE if EXISTS person;如果表存在就删除
INSERT INTO person (id,lastname,sex,city,age) VALUES (1,'liming','男','石家庄',18)给表中插入一条数据
COMMENT字段描述说明
not NULL非空约束,见sex那个字段。当插入字段内容为NULL时报错
DEFAULT默认值约束,当没有给当前字段传值时,取默认值。字段city
PRIMARY KEY (id)主键约束,,就使得该字段不重复且不为空;见字段id
AUTO_INCREMENT自动增长,一般和主键约束一起使用。插入数据时,字段自动比上一条数据加1
UNIQUE唯一约束,重复的值不能插入,见字段lastname
FOREIGN key一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY

验证约束:

-- 正常的插入一条数据
INSERT INTO person (id,lastname,sex,city,age) VALUES (1,'liming','男','石家庄',18)

-- 验证主键约束(PRIMARY KEY)不可重复 报错:1062 - Duplicate entry '1' for key 'PRIMARY'
 INSERT INTO person (id,lastname,sex,city,age) VALUES (1,'张三','男','石家庄',18)

-- 验证唯一约束(UNIQUE)  报错:1062 - Duplicate entry 'liming' for key 'lastname'
 INSERT INTO person (id,lastname,sex,city,age) VALUES (2,'liming','男','石家庄',18)

-- 验证非空约束(not NUL) --没有值不是NULL
 INSERT INTO person (id,lastname,city,age) VALUES (2,'Jenny','石家庄',18)

-- 验证非空约束(not NUL)  报错: 1048 - Column 'sex' cannot be null
 INSERT INTO person (id,lastname,sex,city,age) VALUES (3,'zhangsan',NULL,'石家庄',18)

-- 验证默认约束(DEFAULT) 将该字段赋值为默认值
 INSERT INTO person (id,lastname,sex,age) VALUES (3,'zhangsan','男',18)


-- 插入数据,验证自动增长(AUTO_INCREMENT)
INSERT INTO person (lastname,sex,city,age) VALUES ('liming','男','石家庄',18)
INSERT INTO person (lastname,sex,city,age) VALUES ('zhangsan','男','石家庄',18)
INSERT INTO person (id,lastname,sex,city,age) VALUES (5,'lisi','男','石家庄',18)
INSERT INTO person (lastname,sex,city,age) VALUES ('jenny','男','石家庄',18)

#创建FOREIGN KEY约束
DROP TABLE if EXISTS person_info;
CREATE TABLE person_info
(
id INT COMMENT 'ID',
company VARCHAR(255) COMMENT '公司',
phone CHAR(11) COMMENT '电话',
id_person int,
FOREIGN key (id_person) REFERENCES person(id)
)

-- 正常插入
INSERT INTO person_info (id,company,phone,id_person) VALUES (1,'华润','170903232493',1)

-- 插入一条person表中id不存在的值
-- 报错: 1452 - Cannot add or update a child row: a foreign key constraint fails (`zaj-menu-dcms`.`person_info`, CONSTRAINT `person_info_ibfk_1` FOREIGN KEY (`id_person`) REFERENCES `person` (`id`))
INSERT INTO person_info (id,company,phone,id_person) VALUES (1,'华润','170903232493',18)


#验证定长字段--char.意思是在内存中占有固定长度的空间,当字符长度小于固定长度时,补0到固定长度;当字符长度大于固定长度时,多出的部分将被截断
INSERT INTO person_info (id,company,phone,id_person) VALUES (3,'华润','1234567890123',2)
INSERT INTO person_info (id,company,phone,id_person) VALUES (1,'华润','11',1)

#VARCHAR-存储变长数据,VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度

在这里插入图片描述

修改及删除约束

涉及命令

语句关键字作用语法
alter更新表结果
change可以更改列名 和 列类型 (每次都要把新列名和旧列名写上, 即使两个列名没有更改,只是改了类型)alter table 表名 change 旧列名 新列名 类型
modify可以更改列的属性alter table 表名 MODIFY 列名 类型

not null 约束

-- 更新表时添加约束(not null)【change和modify是两种方法,desc是用来验证修改结果的】
ALTER TABLE person_info CHANGE company company VARCHAR(20) not null;
ALTER TABLE person_info MODIFY  company VARCHAR(20) not null ;
DESC person_info;

-- 删除约束(not null)
ALTER TABLE person_info CHANGE company company VARCHAR(20) ;
ALTER TABLE person_info MODIFY  company VARCHAR(20) ;
DESC person_info;

在这里插入图片描述

UNIQUE约束

更新表时添加约束(UNIQUE,PRIMARY KEY,FOREIGN KEY)

-- 更新表时添加约束(UNIQUE),没有设定名字时约束名为列名称
ALTER TABLE person_info ADD UNIQUE(phone);
-- 给约束起名字,删除时用该名字删除
ALTER TABLE person_info ADD CONSTRAINT phone_name UNIQUE(phone);
desc person_info;

-- 更新表时添加约束(PRIMARY KEY)
ALTER TABLE person_info ADD PRIMARY KEY(id);
ALTER TABLE person_info ADD CONSTRAINT id_name PRIMARY KEY(id);
desc person_info;


-- 更新表时添加约束(FOREIGN KEY),没有设置名字时自动生成一个名字
ALTER TABLE person_info ADD FOREIGN KEY (id_person) REFERENCES person(id) ;
-- 给约束起名字,删除时用该名字删除
ALTER TABLE person_info ADD CONSTRAINT id_name FOREIGN KEY (id_person) REFERENCES person(id);
-- 查看建表脚本
show CREATE TABLE person_info;

添加唯一约束
添加主键

删除约束(UNIQUE,PRIMARY KEY,FOREIGN KEY)

-- 删除约束(UNIQUE),使用约束名称删除
ALTER TABLE person_info DROP INDEX phone;
ALTER TABLE person_info DROP INDEX phone_name;
desc person_info;

-- 删除约束(PRIMARY KEY)
ALTER TABLE person_info DROP PRIMARY KEY;
desc person_info;

-- 删除约束(FOREIGN KEY),使用约束名称删除
ALTER TABLE person_info DROP FOREIGN KEY person_info_ibfk_1;
show CREATE TABLE person_info;

删除唯一约束
删除主键

default 约束

更新表时添加约束(default)

-- 更新表时添加约束(defalut)
ALTER TABLE person_info  ALTER company SET  DEFAULT '永辉';
DESC person_info;

在这里插入图片描述

删除约束(default)

-- 删除约束(defalut)
ALTER TABLE person_info  ALTER company DROP  DEFAULT ;
DESC person_info;

在这里插入图片描述

参考链接:
https://www.jianshu.com/p/e9338da60a61
https://www.jianshu.com/p/e6a2825c1154

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值