MySQL之表的修改和约束条件的添加

news2024/9/23 15:30:16

修改表中的数据:update[DML]

语法格式:

update 表名 set 字段名1=1,字段名2=2,字段名3=3......where 条件;

注意:没有条件限制会导致所有数据全部更新

举例:

- 将id号为10的学生的姓名改变为"jason",年龄改变为10岁,生日改变为2000-10-10
update student set name='jason',age=10,birth='2000-10-10' where id=10;

注意:日期的格式在输入时,必须按照MySQL默认的格式来写

删除数据:delete[DML]

语法格式:

delete from 表名 where 条件;

注意:如果没有条件限制,整张表的数据会全部被删除

举例:

-- 删除student表中id为2的这条记录
delete from student from id=2;
-- 删除student表中的所有数据
delete from student;

上述这种删除数据的方式:执行效率比较慢,表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放,因此它支持回滚,可以通过rollback;命令恢复删除的数据;

truncate语句:[DDL]

删除数据的效率比较高,表被一次截断,数据在硬盘上的真实存储空间也会得到释放,但是它并不支持回滚,数据一旦被删除就无法恢复

语法:

truncate table 表名;

上述所说的delete和truncate,都是删除表中的数据,而表结构并没有被删除

drop table 表名;	//删除表,将表中的数据连同表结构一起删除

插入数据:insert[DML]

语法格式:

插入单条数据:

insert  into 表名(字段1,字段2,字段3....values(1,值2,值3......);

插入多条数据:

语法格式:

insert into 表名(字段1,字段2,字段3....) values (1,值2,值3......),(1,值2,值3......),(1,值2,值3......).....;

快速创建表:

语法格式:

-- 将as后的查询结果当做要创建的新表
create table 表名 as select.....;

这可以完成表的快速复制,表在创建的瞬间,表中的数据也存在了

将查询结果插入到一张表当中:

-- 将select语句的查询结果插入到student表中
insert into student select......;

约束:

在创建表的时候,,我们可以给表中的字段增加一些约束,来保证这个表中数据完整性,有效性

非空约束:not null

举例:

当我们在创建表的时候,对于名字字段增加了约束条件不能为空,因此,当给该表插入数据时,名字部分的数据不能是空的

注:该约束只有列级约束,并没有表级约束

create table teacher(
id int,
name varchar(255) not null);

小tip:xxxx.sql这种文件被称为sql脚本文件

sql脚本文件中编写了大量的sql语句,当我们执行sql脚本文件时,该文件中所有的sql语句都会被执行,如果想要批量的执行sql脚本文件,那么在MySQL中可通过source D:\course\03-Mysql\document\xxx.sql命令

唯一性约束:unique

唯一性约束的字段不能重复,但是可以为null

举例:

当我们在创建表的时候,对于id字段增加了约束条件不能为空,因此,当给该表插入数据时,id字段的数据不能重复

create table person(
id int unique,
age int,
);

两个字段联合起来具有唯一性:

假设我们要求表中的name和email联合起来具有唯一性:

错误写法:

create table t_vip(
id int,
name varchar(255) unique,	//约束添加到某个字段后面的约束属于列级约束
name varchar(255) unique,
);

上述这种创建表是不符合我们的需求的,因为这样创建出来的表的含义是:email具有唯一性,name具有唯一性。

那么对于下面将要插入表中的两组数据来说,并不能成功插入,原因是名字字段重复了。

但是我们的需求是email+name联合具有唯一性即可,也就是说下面的两组数据,虽然名字字段重复,但是email字段并不重复,所以它们联合起来也是不重复的,理论上应该是可以插入数据的,因此上述这种创建表的方式 是错误的。

insert into t_vip(id,name,email) values(1,'张三','zhangsan@123.com');
insert into t_vip(id,name,email) values(1,'张三','zhangsan@sina.com');

正确写法:

create table t_vip(
id int,
name varchar(255),
name varchar(255),
unique(name,email),	//这种没有添加到某个列级后面的约束属于表级约束
);

此时才表示email+name唯一

当多个字段联合起来需要添加约束时,适用表级约束,单个字段需要添加约束,适用列级约束

not null和unique联合使用:

举例:

create table t_vip(
id int,
name varchar(255) not null unique	//表示name字段既不能为空,也不能重复
);

我们查看t_vip表结构,发现name字段变成了主键。

在这里插入图片描述

在MySQL中,如果一个字段同时被not null和unique约束的话,该字段自动变成主键字段(注:在Oracle中并非如此)

主键约束:primary key(简称PK)

主键值是每一行记录的唯一标识,相当于人类的“身份证号”

在这里插入图片描述

任何一张表都应该有主键,没有主键的表是无效的

主键的特征:not null+unique[主键值不能是null,同时也不能重复]

单一主键

给表添加主键约束:

使用列级添加主键约束:

在这里插入图片描述

使用表级添加主键约束:

在这里插入图片描述

复合主键

在这里插入图片描述

在实际开发中,不建议使用复合主键,因为本身主键存在的意义就是作为某条记录的唯一标识,单一主键能够达到该效果

列级主键约束只能添加一个:

在这里插入图片描述

主键值的类型建议使用:int,bigint,char等类型,不建议使用:varchar来做主键,主键值一般都是数字,是定长的。

对于主键的类型,除了我们上文提到的单一主键和复合主键之外,我们还可以将主键分为自然主键和业务主键。

自然主键:主键值是一个自然数,和业务没有关系

业务主键:主键值和业务密切相关,例如:拿银行卡账号做主键

在实际开发中,自然主键使用的会比较多一些,因为主键只要做到不重复就行,不需要有意义,业务主键不太好,因为主键一旦和业务挂钩,那么当业务发生变动时,可能会影响主键的值,所以业务主键不是我们所推荐的

主键自增机制:

在这里插入图片描述

外键约束:foreign key(简称FK)

业务背景:请设计数据库表,来描述"班级和学生"的信息

第一种方案:班级和学生存储在一张表中

在这里插入图片描述

这种存储数据的缺点是:数据冗余,空间浪费

第二种方案:班级一张表,学生一张表

在这里插入图片描述

当t_student表中的cno字段没有任何约束的时候,可能会导致数据无效,会出现除了t_class表中,当前存在的100/101以外的其他数字,所以为了保证cno字段中的值都是100和101,需要给cno字段添加外键约束,那么cno字段就是外键字段,cno字段中的每一个值都是外键值。

t_class是父表,t_student是子表:

删除表的顺序:先删子表,再删父表

若先删除父表,那么子表将会受到影响,因为它参照了父表中的很多数据

创建表的顺序:先创建父表,再创建子表

父表中的某些数据是子表建立的基础,因此,需要先建立父表

删除数据的顺序:先删除子表,再删除父表

如果先删除父表,那么子表将会不完整,因为它还在使用父表的数据

插入数据的顺序:先插入父表,再插入子表

子表需要使用父表的数据,因此没有父表,子表中的数据就是不完整的

举例:

在这里插入图片描述
子表中的外键引用的父表中的某个字段,被引用的这个字段不要求必须是主键,但是必须具有唯一性

子表中的外键是可以为空的

检查约束:check(MySQL不支持,Oracle支持)

存储引擎的使用:

存储引擎是MySQL中特有的一个术语,其他数据库中没有(Oracle中有,但是并不叫存储引擎),它实际上是一个表存储/组织数据的方式,不同的存储引擎,表存储数据的方式不同

数据库中的各表均被[在创建表时]指定的存储引擎来处理,服务器可用的引擎依赖于以下因素:

MySQL的版本

服务器在开发时如何被配置

启动选项

为了解当前服务器中有哪些存储引擎可用,可使用show engines命令

在这里插入图片描述

在建表时,指定引擎:

使用show create table 表名命令,可查看该表的结构数据:

在这里插入图片描述

MySQL默认的存储引擎是:InnoDB
MySQL默认的字符编码方式是:utf8

在建表时,设置存储引擎和字符编码方式:

在这里插入图片描述

查看当前MySQL支持的引擎有哪些:

在这里插入图片描述在这里插入图片描述

查看当前的MySQL版本:

在这里插入图片描述

MyISAM存储引擎是MySQL最常用的引擎:

它管理的表具有以下特征:

使用三个文件表示每个表:
	格式文件-存储表结构的定义(mytable.fm)
	数据文件-存储表行的内容(mytable.MYD)
	索引文件-存储表上索引(mytable.MYI):相当于目录---缩小扫描范围,提升查询效率
灵活的AUTO_INCREMENT字段处理
MyISAM存储引擎的存储优势:可被转换为压缩,只读表来节省空间
MyISAM存储引擎的存储劣势:不支持事务,安全性较低

InnoDB存储引擎:

这是MySQL默认的存储引擎, InnoDB支持事务,支持数据库崩溃后自动恢复机制非常安全是它最大的一个特点。

它管理的表具有下列主要特征:

 每个 InnoDB表在数据库目录中以.frm格式文件表示
 
 InnoDB表空间tablespace被用于存储表的内容(表空间是一个逻辑名称,表空间存储数据+索引)
 
 提供一组用来记录事务性活动的日志文件
 
 用commit(提交)savepointrollback(回滚)支持事务处理
 
 提供全acid兼容
 
 在MySQL服务器崩溃后提供自动恢复
 
 多版本(MVCC)和行级锁定
 
 支持外键及引用的完整性,包括联级删除和更新

InnoDB最大的特点就是支持事务:以保证数据的安全,效率不是很高,并且也不能压缩,不能转换为只读,不能很好地节省存储空间

MEMORY存储引擎:

使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎非常快

MEMORY存储引擎管理的表具有以下特征:

在数据库目录内,每个表均以.frm格式的文件表示
表数据及索引被存储在内存中
表级锁机制
不能包含TEXTBLOB字段

MEMORY存储引擎之前被称为HEAP引擎

MEMORY存储引擎优点查询效率是最高的

MEMORY存储引擎缺点不安全,关机之后数据消失,因为数据和索引都是在内存当中

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【自学Python】解释型程序与编译型程序

解释型程序与编译型程序 解释型程序与编译型程序教程 高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:解释型程序与编译型程序。 解释型程序 执行方式类似于我们日常生活中的 “同声翻译”…

Vue--》实现todo-list组件的封装与使用

目录 项目结构 创建todolist组件 创建todoinput组件 创建todobutton组件 项目结构 今天用 vite 脚手架搭建一个 vue3 的小案例,vite的搭建过程参考:vite的搭建 。其项目结构组件构成如下:注意:因为使用的是 vite 框架&#x…

51单片机GMS短信自动存取快递柜

实践制作DIY- GC0103-直流电机PID速度控制 一、功能说明: 基于51单片机设计-GMS短信自动存取快递柜 功能介绍: STC89C52RC最小系统板0.96寸OLED显示器DY-SV17F串口语音播报模块4*4矩阵键盘GSM短信模块4路舵机(模拟4个柜子) ***…

再学C语言21:循环控制语句——do while循环

一、其他赋值运算符 除了最基本的赋值运算符&#xff0c;C还有多个赋值运算符 a b等于a a ba - b等于a a - ba * b等于a a * ba / b等于a a / ba % b等于a a % b 这些赋值运算符的优先级与赋值运算符同样低 运算符优先级&#xff1a;赋值运算符 < 关系运算符 <…

《C++程序设计原理与实践》笔记 第9章 类相关的技术细节

在本章中&#xff0c;我们继续关注主要的程序设计工具——C语言。本章主要介绍与用户自定义类型&#xff08;即类和枚举&#xff09;相关的语言技术细节。这些语言特性大部分是以逐步改进一个Date类型的方式来介绍的。采用这种方式&#xff0c;我们还可以顺便介绍一些有用的类设…

数据结构与算法_五大算法之分治算法

这篇笔记记录分治算法的思想和两道leetcode题。 分治算法思想&#xff1a; 规模为n的原问题的解无法直接求出&#xff0c;进行问题规模缩减&#xff0c;划分子问题&#xff0c;子问题相互独立而且和原问题解的性质是相同的&#xff0c;只是问题规模缩小了。递归地缩小问题规模…

用Python记录一场2023的烟花

弹指间&#xff0c;2023已经到来&#xff0c;新的一年&#xff0c;祝大家新年快乐&#xff0c;阖家幸福呀~~~ 好吧&#xff0c;进入正题&#xff0c;2023的到来&#xff0c;肯定少不了烟花吧&#xff08;外面不让放炮&#xff0c;那咱们就用python放炮【DOGE】&#xff09; 首…

JSON Web Tokens(JWT)简单使用

文章目录什么是JWT&#xff1f;JWD对字符串进行Base64加密JWT加密字符串解释JWT使用场景jwt 特点JWT token在线解密什么是JWT&#xff1f; JWT&#xff08;json web token&#xff09;&#xff0c;它并不是一个具体的技术实现&#xff0c;而更像是一种标准。 JWT规定了数据传输…

Flink系列Table API和SQL之:动态表、持续查询、将流转换成动态表、更新查询、追加查询、将动态表转换为流、更新插入流(Upsert)

Flink系列Table API和SQL之&#xff1a;动态表、持续查询、将流转换成动态表、更新查询、追加查询、将动态表转换为流、更新插入流一、表和流的转换二、动态表三、持续查询四、将流转换成动态表五、更新查询六、追加查询七、将动态表转换为流八、更新插入流(Upsert)一、表和流的…

综合能源系统电压稳定研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【锟斤拷�⊠是怎样炼成的】——两分钟帮你彻底弄懂计算机的编码原理

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; &#x1f33b;&#x1f33b;&#x1f33b;Hello&#xff0c;大家好&#xff0c;我是天寒雨落&#xff0c;一名有趣的博主&#xff0c;小白一枚&#xff0c;多多关照&#x1f61c;&#x1f61c…

解决vue-cli项目打包出现空白页和路径错误的问题

今天为大家分享一篇解决vue-cli(&#xff08;vue-cli2.x版本&#xff09;项目打包出现空白页和路径错误的问题。具有很好的参考价值。希望对大家有所帮助。 vue-cli项目打包&#xff1a; 1. 命令行输入&#xff1a;npm run build 打包出来后项目中就会多了一个文件夹dist&am…

k8s1.23.15版本二进制部署/扩容及高可用架构详解

前言 众所周知&#xff0c;kubernetes在2020年的1.20版本时就提出要移除docker。这次官方消息表明在1.24版本中彻底移除了dockershim&#xff0c;即移除docker。但是在1.24之前的版本中还是可以正常使用docker的。考虑到可能并不是所有项目环境都紧跟新版换掉了docker&#xff…

五、树和二叉树

一、定义及基本术语 详见书本P111~113 二叉树不是树的特殊情况&#xff0c;它们是两个概念&#xff0c;但有关树的基本术语对二叉树都适用。 二叉树的子树一定要区分左子树还是右子树&#xff0c;即使只有一棵子树也一定要说明是左子树还是右子树&#xff0c;树只有一个孩子的…

事务隔离:为什么你改了我还看不见?

提到事务&#xff0c;你肯定不陌生&#xff0c;和数据库打交道的时候&#xff0c;我们总是会用到事务。最经典的例子就是转账&#xff0c;你要给朋友小王转 100 块钱&#xff0c;而此时你的银行卡只有 100 块钱。 转账过程具体到程序里会有一系列的操作&#xff0c;比如查询余…

迎接2023,用JAVA演奏“新年”

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;2023年快要到来啦&#xff0c;再此祝大家诸事顺遂&#xff0c;所见所盼皆如愿。 &#x1f514;本文讲解如何使用Java演奏一首歌曲&#xff0c;一起卷起来叭&#xff01; 众所周…

【复习】计算机网络学习笔记

前言 本篇笔记方便本人用于复习回顾知识点&#xff0c;内容庞杂&#xff0c;见谅。含有目录方便大家跳转复习&#xff01; 此复习笔记总结于 湖科大教书匠出品&#xff1a;深入浅出计算机网络 微课视频 此笔记尚未完结&#xff0c;持续更新中… 文章目录前言第一章 概述1.1 …

高并发系统设计 -- 服务限流算法

常见的限流算法 漏桶算法 漏桶法的关键点在于漏桶始终按照固定的速率运行&#xff0c;但是它并不能很好的处理有大量突发请求的场景&#xff0c;毕竟在某些场景下我们可能需要提高系统的处理效率&#xff0c;而不是一味的按照固定速率处理请求。 关于漏桶的实现&#xff0c;u…

快速入门 .NET nanoFramework 开发 ESP32-Pico 应用

本文是一篇适合初学者的 .NET nanoFramework 保姆级入门教程&#xff0c;并提供了基本的入门程序并介绍了微雪的 ESP32-S2-Pico 使用 .NET nanoFramework 开发过程的基础知识。 目录 1. 背景 1.1 .NET IOT 与 .NET nanoFramework 1.2 微控制器 1.3 实验板介绍 2. 搭建 .NET…

移动Web【空间转换[空间位移、透视、空间旋转、立体呈现、3D导航、空间缩放]、动画、综合案例】

文章目录一、空间转换1.1 空间位移1.2 透视1.3 空间旋转1.4 立体呈现1.5 3D导航1.6 空间缩放二、动画2.1 动画的实现步骤2.2 动画属性三、综合案例2.1 走马灯一、空间转换 空间&#xff1a;是从坐标轴角度定义的。 x 、y 和z三条坐标轴构成了一个立体空间&#xff0c;z轴位置与…