mysql数据库(下)

news/2024/4/13 11:41:18/文章来源:https://blog.csdn.net/m0_46702681/article/details/136569233

目录

约束

约束的概念和分类

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.luyixian.cn/news_show_999091.aspx

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

相关文章

【网站项目】105校园车辆管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

SHARE 100M PRO:航测领域的多面手

在无人机航测领域,SHARE 100M PRO单镜头航测相机以其1.02亿像素的中画幅传感器和创新技术,正在重塑倾斜摄影的精度和效率。这款相机不仅在城市规划和土地管理中发挥着重要作用,还在环境监测、基础设施建设、农业管理等多个航测领域展现出其卓…

自编C++题目——几点了.easy ver

题目难度 入门 题目描述 一个老外用一口不流利的中文问你:“Xian zai ji dian le?”你看了一眼表,知道了现在是,你准备用这样的形式写在纸上: Now is m past/to h. 如果你看不懂,举个例子: 当h10&#…

treeview控件的应用

1.分类 treeview控件的基本应用,可以用于商品分类、文件分类等等。 2.辅助决策 treeview可以组成决策树,用来帮助人们做选择。比如说今天中午吃什么菜? 如果我来选择的话,那就是:不吃辣-鲁菜-糖醋鲤鱼。 3.求解算…

C# OpenCvSharp DNN Yolov8-OBB 旋转目标检测

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN Yolov8-OBB 旋转目标检测 效果 模型信息 Model Properties ------------------------- date:2024-02-26T08:38:44.171849 description:Ultralytics YOLOv8s-obb model trained on runs/DOT…

【MySQL系列 05】Schema 与数据类型优化

良好的数据库 schema 设计和合理的数据类型选择是 SQL 获得高性能的基石。 一、选择优化的数据类型 MySQL 支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。不管存储哪种类型的数据,下面几个简单的原则都有助于做出更好的选择。 1. …

MySQL学习笔记(一)数据库事务隔离级别与多版本并发控制(MVCC)

一、数据库事务隔离级别 数据库事务的隔离级别有4种,由低到高分别为Read uncommitted (读未提交)、Read committed(读提交) 、Repeatable read(可重复读) 、Serializable (串行化&a…

项目解决方案:多地5G蓄能电站的视频监控联网系统设计方案

目 录 一、前言 二、系统架构设计 1、系统架构设计说明 2、系统拓扑图 三、关键技术 1. 5G支持技术 2. 视频图像处理技术 3. 数据融合与分析技术 四、功能特点 1. 高效可靠 2. 实时监测 3. 远程控制 4. 故障预测 五、应用前景 一、前言 随着能源…

关于手机是否支持h264的问题的解决方案

目录 现象 原理 修改内容 现象 开始以为是手机不支持h264的编码 。机器人chatgpt一通乱扯。 后来检查了下手机,明显是有h264嘛。 终于搞定,不枉凌晨三点起来思考 原理 WebRTC 默认使用的视频编码器是VP8和VP9,WebRTC内置了这两种编码器…

继深圳后,重庆与鸿蒙展开原生应用开发合作

截至2023年底,开源鸿蒙开源社区已有250多家生态伙伴加入,开源鸿蒙项目捐赠人达35家,通过开源鸿蒙兼容性测评的伙伴达173个,累计落地230余款商用设备,涵盖金融、教育、智能家居、交通、数字政府、工业、医疗等各领域。 …

每日一题 — 和为t的两个数

LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 代码&#xff1a; public int[] twoSum(int[] price, int target) {int left 0;int right price.length - 1;while(left < right){//每一次都重新计算和int sum price[…

Python和Google Colab进行卫星图像二维小波变化和机器学习

2D 小波分解是图像处理中的一种流行技术,使用不同的滤波器将图像分解为不同的频率分量(“近似”和“细节”系数)。该技术对于各种图像处理任务特别有用,例如压缩、去噪、特征提取和边缘检测。 在本文中,我们将演示如何在 Google Colab 中使用 Python 下载高分辨率样本卫星…

[Electron]中的Notification通知

Electron中的Notification Notification 用来创建OS(操作系统)桌面通知 静态方法 Notification.isSupported() 返回 boolean - 当前系统是否支持桌面通知 const notification new Notification([options]) 实例方法 notification.show() 显示通知 notification.close…

基于Pytorch搭建分布式训练环境

Pytorch系列 文章目录 Pytorch系列前言一、DDP是什么二、DPP原理terms、nodes 和 ranks等相关术语解读DDP 的局限性为什么要选择 DDP 而不是 DP代码演示1. 在一个单 GPU 的 Node 上进行训练&#xff08;baseline&#xff09;2. 在一个多 GPU 的 Node 上进行训练临门一脚&#x…

微信开发者工具 vim 键位绑定

问题&#xff1a;如标题 解决&#xff1a; 最上边点击设置&#xff0c;找到编辑器设置 点击更多编辑器设置&#xff0c;然后会弹出设置这个页面 搜索 vim &#xff0c;并点击 一直往下边滑动&#xff0c;找到 setting.json 然后加入这段代码&#xff1a; "vim.insertM…

Java安全 CC链3分析

Java安全 CC链3分析 cc链3介绍前置知识类加载类加载的方法例1.forName例2.getSystemClassLoader总结 javassist模块 cc链3分析TemplatesImpl类demo2TrAXFilter类InstantiateTransformer类 最终exp基于LazyMap链基于TransformedMap链 cc链3介绍 cc链3的后半部分与cc链1相同&…

PDF控件Spire.PDF for .NET【安全】演示:使用时间戳服务器对 PDF 进行数字签名

Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库&#xff0c;开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理&#xff0c;且无需安装 Adobe Acrobat。 E-iceblue 功能类库Spire 系列文档处…

向量的正交变换

目录 几种线性变换 正交变换 方阵的合同 几种线性变换 正交变换 方阵的合同

Java面试(8)

三次握手与四次挥手 三次握手: 客户端与服务端建立TCP连接时总共需要发送三个包 三次握手过程中容易引发SYN(DDOS)攻击,所谓SYN攻击是指: 攻击客户端,在短时间内伪造大量不存在的IP地址,向服务端不断发送syn包,服务端收到包后向客户端发送确认包,但由于客户端IP不存在,导致服务…

Mint_21.3 drawing-area和goocanvas的FB笔记(五)

FreeBASIC SDL图形功能 SDL - Simple DirectMedia Layer 是完整的跨平台系统&#xff0c;有自己的窗口、直接捕获键盘、鼠标和游戏操纵杆的事件&#xff0c;直接操作音频和CDROM&#xff0c;在其surface上可使用gfx, openGL和direct3D绘图。Window3.0时代&#xff0c;各种应用…