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

 

未完待续。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/522472.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超级简单的Docker安装(centos7)

文章目录 先安装所需要的工具包设置远程仓库安装启动docker查看版本 先安装所需要的工具包 yum install -y yum-utils #安装工具包,缺少这些依赖将无法完成;设置远程仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/doc…

灵魂指针,教给(二)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组…

下载一些ROS的包的方式

ROS Index 我们可以去ROS Index网站下载一些我们需要的包。打开浏览器在网址框输入index.ros.org。或者点击此处链接ROS Index 在这个网站中我们可以浏览并找到我们需要的包,也可以下载它的源代码或者仅安装到我们的系统中来使用。(安装过程在终端中进行…

jenkins+selenium+python实现web自动化测试

jenkinsselenium可以做到对web自动化的持续集成。 Jenkins的基本操作: 一、新建视图及job 新建视图: 新建job: 可以选择构建一个自由风格的软件项目或者复制已有的item 二、准备工作: 安装Jenkins插件,SSH plugin …

3月求职黄金期!如何打造自己的岗位优势?这6大分析维度很重要!

三月份,又到了一年的求职黄金期。在今年这场求职大队中,想要找到一份满意的工作,你不仅要学会打造一份高质量简历,还要懂得完美应对HR的各项提问。 一、岗位能力的6大分析维度 虽说是求职黄金期,但找工作也不是随便找…

驱动OLED SSD1306的笔记

这里用的OLED模块是SSD1306的 硬件 SSD1306只支持3.3V供电SSD1306支持4中接口:6800、 8080,SPI,IIC通过引脚BS1和BS2接口的模式。如果是IIC模式,SCL对应D0,SDA对应D1,D2(需要把D1和D2连在一起然后接入MCU的SDA) OLED…

Go的安装

一. 下载地址 Go官方下载地址:https://golang.org/dl/ Go中文网:https://go.p2hp.com/go.dev/dl/ 根据不同系统下载不同的包。 二. 配置GOPATH GOPATH是一个环境变量,用来表明你写的go项目的存放路径。 GOPATH路径最好只设置一个&#xff0…

黑马点评-附近商户实现

GEO数据结构 Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,根据经纬度来检索数据。 GEO本质上是基于sortedSet实现的,在Sorted Set中,每个成员都是与一个分数(score)相关联的,这个分数用于对成员进行排序…

LeetCode 2482.行和列中一和零的差值

给你一个下标从 0 开始的 m x n 二进制矩阵 grid 。 我们按照如下过程,定义一个下标从 0 开始的 m x n 差值矩阵 diff : 令第 i 行一的数目为 onesRowi 。 令第 j 列一的数目为 onesColj 。 令第 i 行零的数目为 zerosRowi 。 令第 j 列零的数目为 zer…

数睿通2.0数据接入升级——支持增量字段同步,表单独映射

引言 上次数睿通 2.0 更新是在 23 年12 月 底,已经过去了接近三个月的时间,中间由于过年加上年前年后实在是工作繁忙,所以一直没有腾出空来更新代码,希望大家可以理解,平台的发展离不开你们的支持,在此表示…

【Linux】第四十站:线程概念

文章目录 一、线程二、Linux中线程应该如何理解三、重新定义线程四、四谈进程地址空间(页表相关)五、Linux线程周边的概念1. 线程与进程切换2.线程优点3.线程缺点4.线程异常5.线程用途 一、线程 线程:是进程内的一个执行分支。线程的执行粒度…

RFID-科技的“隐秘耳语者”

RFID-科技的“隐秘耳语者” 想象一下,你身处一个光线昏暗的环境中,周围的一切都被厚厚的阴影笼罩。这时,你需要识别并获取一个物体的信息,你会选择怎么做?是点亮灯光,用肉眼仔细观察,还是打开扫…