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

未完待续。。。

相关推荐
高兴就好(石1 小时前
DB-GPT部署和试用
数据库·gpt
这孩子叫逆2 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql
Karoku0662 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
码农郁郁久居人下2 小时前
Redis的配置与优化
数据库·redis·缓存
MuseLss3 小时前
Mycat搭建分库分表
数据库·mycat
Hsu_kk4 小时前
Redis 主从复制配置教程
数据库·redis·缓存
DieSnowK4 小时前
[Redis][环境配置]详细讲解
数据库·redis·分布式·缓存·环境配置·新手向·详细讲解
程序猿小D4 小时前
第二百三十五节 JPA教程 - JPA Lob列示例
java·数据库·windows·oracle·jdk·jpa
Flerken1014 小时前
数据库语言、SQL语言、数据库系统提供的两种语言
数据库·sql·oracle
掘根4 小时前
【网络】高级IO——poll版本TCP服务器
网络·数据库·sql·网络协议·tcp/ip·mysql·网络安全