mysql数据库(下)

目录

约束

约束的概念和分类

1、约束的概念:

2、约束的分类

1、主键约束

2、默认约束

3、非空约束

4、唯一约束

5、外键约束


约束

约束的概念和分类

1、约束的概念:

  • 约束时作用于表中列上的规则,用于限制加入表的数据
  • 约束的存在保证了数据库中数据的正确性、有效性和完整性

2、约束的分类

练习:

CREATE TABLE emp(

id INT PRIMARY KEY,

ename VARCHAR(50) NOT NULL UNIQUE,

joindate DATE NOT NULL,

salary DOUBLE(7,2) NOT NULL,

bonus DOUBLE(7,2) DEFAULT 0

);

insert into emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','1999-11-11',8800,5000);


1、测试主键约束 非空且唯一(将id的1改为了null)

又运行了一遍已有的,显示[Err] 1062 - Duplicate entry '1' for key 'PRIMARY'


2、测试非空约束 不能为null

测试主键的时候已经测试了不能为空,这里就不演示啦


3、测试唯一约束 表中所有数据各不相同

这里也是,主键的时候测试了以下,也就不演示啦


4、测试默认约束 未指定值则采用默认值

这里我把bonus和5000 去掉了,我们看看结果是什么

取值为默认值0

只有不添加任何值的时候默认约束才能生效,输入null的话,显示的就是null。我们来看一下

显示的就是null,而不是0;


5、测试自动增长:auto_increment当列是数字类型并且唯一约束

这里我们得重新建表

drop table if EXISTS emp;

CREATE TABLE emp(

id INT PRIMARY KEY auto_increment,

ename VARCHAR(50) NOT NULL UNIQUE,

joindate DATE NOT NULL,

salary DOUBLE(7,2) NOT NULL,

bonus DOUBLE(7,2) DEFAULT 0

);

没加数据的就把前面的id删了

我们看一下结果如何

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·

在建完表后如果要添加约束的话,我们该如何取写代码

1、主键约束

alter table 表名 add primary key(字段名);

删除约束:

alter table 表名 drop index 字段名;

2、默认约束

alter table 表名 alter 列名 set default 默认值;

删除约束

alter table 表名 alter 列名 drop default;

3、非空约束

alter table 表名 modify 字段名 数据类型 not null;

删除约束:

alter table 表名 modify 字段名 数据类型;

4、唯一约束

alter table 表名 modify 字段名 数据类型 unique;

删除约束

alter table 表名 drop index 字段名;

5、外键约束

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

添加约束

创建时添加外键约束

create table 表名(

列名 数据类型,

.....

[constraint][外键名称] foreign key (外键字段名) references 主表名称(主表列名称)

);

建完表后添加外键约束

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表名称(主表列名称)

删除约束:

alter table 表名 drop foreign key 外键名称;

添加外键dep_id,关联dept表的主键

代码在这哦

CREATE table dept(

id int PRIMARY key auto_increment,

dep_name varchar(20),

addr varchar(20)

);

create table emp(

id int PRIMARY key auto_increment,

name varchar(20),

age int,

dep_id int,

CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id)

);

insert into dept(dep_name,addr) VALUES('研发部','广州'),('销售部','深圳');

insert into emp(name,age,dep_id) VALUES('张三',20,1),('李四',20,1),('王五',20,1),('赵六',20,2),('孙七',22,2),('周八',18,2);

这样就不能删除dept表中的数据了

会显示有外键的约束

但如果我想要删除研发部,那就得先删除张三李四王五三条数据

这样就可以删除研发部了


在对象中按住ctrl选中这两张表

再点击逆向表到模型

就能看到这俩张是有个外键约束着的

删除外键:

alter table emp drop FOREIGN key fk_emp_dept;

这样两张表中的线就没了

创建过表之后添加外键:

alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);

未完待续。。。

相关推荐
企鹅侠客4 分钟前
ETCD调优
数据库·etcd
Json_1817901448010 分钟前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
煎饼小狗21 分钟前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
永乐春秋38 分钟前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
打鱼又晒网1 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!1 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
tatasix2 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。2 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了2 小时前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度2 小时前
Golang 调用 mongodb 的函数
数据库·mongodb·golang