MySQL学习笔记(三)

1、insert插入多条数据

语法:insert into t_user(字段名1,字段名2...) values(值1,值2...),(值1,值2...),(值1,值2...)...;

2、快速创建表

原理:将一个查询结果当做一张表创建,可以完成表的快速复制。表创建出来,同时表中的数据也存在

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

4、快速删除表中的数据

 delete语句删除数据的原理:表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放。缺点是删除效率比较低,优点是支持回滚,可以恢复数据

truncate语句删除数据的原理:删除效率比较高,表被一次截断,物理删除。缺点是不支持回滚,优点是快速。

如果大表非常大,使用delete也许需要执行1个小时才能删除完,效率比较低,可以选择truncate删除表中的数据,只需要不到1秒钟的时间 

5、对表结构的增删改

在实际开发中,需求一旦确定后,表一旦设计好后,很少进行表结构的修改。开发进行中,修改表的结构,成本比较高。不需要掌握,可以使用工具。

6、约束

(1)在创建表的时候,可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性

(2)约束包括:

  • 非空约束:not null
  • 唯一性约束:unique
  • 主键约束:primary key 简称PK
  • 外键约束:foreign key 简称FK
  • 检查约束:check(mysql不支持,oracle支持)

(3)非空约束

约束的字段不能为null

not null只有列级约束

(4)唯一性约束

约束的字段不能重复,但是可以为NULL

新需求:name和email两个字段联合起来具有唯一性

create table t_vip(id int,name varchar(255) unique,email varchar(255) unique);  // 列级约束

这样创建不符合以上的新需求,这样创建表示name具有唯一性,email具有唯一性,各自唯一

 unique和null联合:在mysql中,如果一个字段同时被not null和unique约束的话,该字段自动变成主键字段

(5)主键约束

主键约束的相关术语:

  • 主键约束
  • 主键字段
  • 主键值:是每一行记录的唯一标识,是每一行记录的身份证号

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

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

可以使用表级约束:一个字段做主键叫单一主键,多个字段联合起来叫复合主键。在实际开发中不建议使用复合主键,因为主键值存在的意义就是这行记录的身份证号,只要意义达到即可,单一主键就可以做到,复合主键比较复杂,不建议使用。

 一个表中的主键约束只能添加一个(主键只能有1个),主键值建议使用int、bigint、char等类型,不建议使用varchar来做主键。主键值一般都是数字,一般都是定长的。

主键除了单一主键和复合主键之外,还可以分类为:

  • 自然主键:主键值是一个自然数,和业务没关系
  • 业务主键:主键值和业务紧密关联,例如拿银行卡号做主键值

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

在mysql中,有一种机制,可以帮助我们自动维护一个主键值:

(6)外键约束

外键约束的相关术语:

  • 外键约束
  • 外键字段
  • 外键值 

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

第一种方案:班级和学生存储在一张表中,缺点数据冗余,空间浪费

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

t_class:classno(PK)、classname

t_student:no(PK)、name、cno

cno字段没有任何约束时,可能会导致数据无效。给cno字段添加外键约束,cno字段就是外键字段

注意:t_class是父表,t_student是子表。删除表的顺序,先删子再删父;创建表的顺序,先创建父再创建子;删除数据的顺序,先删子再删父,插入数据的顺序,先创建父再创建子。

 子表中的外键引用父表中的某个字段,被引用的这个字段不一定是主键,但至少有唯一性unique

外键值可以为NULL

7、存储引擎(了解)

(1)存储引擎是mysql中特有的术语,存储引擎是一个表存储/组织数据的方式,不同的存储引擎,表存储数据的方式不同

(2)如何给表添加/指定“存储引擎”:可以在建表时给表指定存储引擎

mysql默认的存储引擎是:InooDB

mysql默认的字符编码方式是:utf8

(3)查看mysql支持的存储引擎:九大存储引擎

(4)mysql常用的存储引擎:

  • MyISAM存储引擎:它管理的表具有的特征是使用三个文件表示每个表,可被转换为压缩、只读来节省空间,不支持事务机制,安全性低
    • 格式文件:存储表结构的定义(mytable.frm)
    • 数据文件:存储表行的内容(mytable.MYD)
    • 索引文件:存储表上索引(mytable.MYI)

索引可以缩小扫描范围,提高查询效率的一种机制。对于一张表来说,只要是主键,或者加有unique约束的字段会自动创建索引

  • InnoDB存储引擎:InnoDB支持事物,支持数据库崩溃后的自动恢复机制。最主要的特点是安全。效率不是很高,并且也不能压缩,不能转换为只读,不能很好的节省存储空间。它管理的表具有下列主要特征:
    • 每个InnoDB表在数据库目录中以.frm格式文件表示
    • InnoDB表空间tablespace被用于存储表的内容(表空间是一个逻辑名称)
    • 提供一组用来记录事物性活动的日志文件
    • 用COMMIT(提交)、SAVEPOINT及ROLLBACK(回滚)支持事务处理
    • 提供全ACID兼容
    • 在MySQL服务器崩溃后提供自动恢复
    • 多版本(MVCC)和行级锁定
    • 支持外键及引用的完整性,包括级联删除和更新
  • MEMORY 存储引擎:使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使MEMORY存储引擎非常快。优点是查询效率是最高的,缺点是不安全,关机之后数据消失(因为数据和索引都是在内存当中)。MEMORY存储引擎管理的表具有下列特征:
    • 在数据库目录内,每个表均以.frm格式的文件表示
    • 表数据及索引被存储在内存中(目的是查询快)
    • 表级锁机制
    • 不能包含TEXT或BLOB字段

8、事务

(1)一个事务就是一个完整的业务逻辑。例如转账,从A账户像B账户中转账10000。将A账户的钱减去10000(update语句),将B账户的钱加上10000(update语句),这就是一个完整的业务逻辑。以上的操作是一个最小的工作单元,要么同时成功或者同时失败。本质上事务就是多条DML语句同时成功或者同时失败。

(2)只有DML语句(insert、delete、update)才会有事务这一说,其他语句和事务无关。因为只有DML语句是数据库表中数据进行增删改的,只要操作涉及到数据的增删改,就一定要考虑安全问题。

(3)事务如何做到多条DML语句同时成功和同时失败:

InnoDB存储引擎:提供一组用来记录事务性活动的日志文件

事务开启了:

insert

insert

delete

update

update

事务结束了

在事务的执行过程中,每一条DML的操作都会记录到“事务性活动的日志文件”当中

在事务的执行过程中,可以提交事务,也可以回滚事务

  • 提交事务:清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中。提交事务标志着事务的结束,并且是一种全部成功的结束。
  • 回滚事务:将之前所有的DML操作全部撤销,并且清空事务性活动的日志文件。回滚事务标志着事务的结束,并且是一种全部失败的结束。

(4)如何提交事务和回滚事务:

  • 提交事务:commit;语句
  • 回滚事务:rollback;语句

测试一下,在mysql当中默认的事务行为是怎样的:

mysql默认情况下是支持自动提交事务的(自动提交事务:每执行一条DML语句,则提交一次)

将mysql的自动提交机制关闭:start transaction; 

(5)事务包括4个特性:

  • A原子性:事务是最小的工作单元,不可再分
  • C一致性:在同一个事务中,所有操作必须同时成功,或者同时失败,以保证数据的一致性
  • I隔离性:A事务和B事务之间具有一定的隔离
  • D持久性 :事务最终结束的一个保障。事务提交,就相当于将没有保存到硬盘上的数据保存到硬盘上

(6)事务的隔离性:

事务和事务之间的隔离级别:

  • 读未提交:read uncommitted(最低的隔离级别)
    • 事务A可以读取到事务B未提交的数据
    • 这种隔离级别存在的问题就是脏读现象(Dirty Read)
    • 这种隔离级别一般是理论上的
  • 读已提交:read committed
    • 事务A可以读取到事务B提交之后的数据
    • 这种隔离级别解决了脏读现象
    • 存在的问题:不可重复读取数据,在事务开启之后,第一次读到的数据是3条,当前事务还没有结束,可能第二次再读取的时候,读取到的数据是4条,3≠4,即不可重复读取
    • 这种隔离级别是比较真实的数据,每一次读到的数据是绝对的真实。oracle数据库默认的隔离级别是read committed
  • 可重复读:repeatable read
    • 事务A开启之后,不管是多久,每一次事务A读取到的数据都是一致的,即使事务B将数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变,这就是可重复读。
    • 解决了不可重复读取数据
    • 存在的问题:可能会出现幻影读
    • mysql默认的事务隔离级别是repeatable read
  • 序列化/串行化:serializable(最高的隔离级别)
    • 每一次读取到的数据都是最真实的,并且效率最低,解决了所有问题
    • 表示事务排队,不能并发

(7)验证各种隔离级别

①read uncommitted

② read committed

 ③repeatable read

 ④serializable

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

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

相关文章

计算机的发展趋势

本文 我们来说计算机的发展趋势 目前来讲 计算机是朝着 巨型化 微型化 网络化 智能化发展 巨型化 指功能巨型化 是指其高速运算、大存储容量和强功能的巨型计算机。其运算能力一般在每秒百亿次以上、内存容量在几百兆字节以上。 主要用于航空航天、军事、气象、人工智能、生…

[Kubernetes[K8S]集群:master主节点初始化]:通过Calico和Coredns网络插件方式安装

文章目录 操作流程:前置:Docker和K8S安装版本匹配查看0.1:安装指定docker版本 **[1 — 7] ** [ 配置K8S主从集群前置准备操作 ]一:主节点操作 查看主机域名->编辑域名->域名配置二:安装自动填充,虚拟…

LeetCode 909 208

题目 909. 蛇梯棋 思路 完全不会!呜呜呜,看了别人的题解。二维数组之字形遍历放在一维数组里面,然后借助队列对数组进行bfs。 代码 class Solution {int n;int[] nums;public int snakesAndLadders(int[][] board) {// 暴力遍历n board.le…

深入理解图形处理器(GPU):加速人工智能和大数据计算的引擎

文章目录 1. 什么是GPU?2. GPU的工作原理3. GPU的应用领域4. GPU与CPU的比较参考与推荐 前言: 图形处理器(GPU)不再仅仅是用于图形渲染的硬件设备。如今,GPU已经成为加速人工智能、大数据计算和科学研究的关键引擎。本…

MINI2440 开发板 给他干出来了

环境是ubuntu14.04。不要问我为什么是这个版本,因为之前的ubuntu12.04 环境干不出来,你去试试就知道了!各种资源包下载不下来。 输入启动参数: 进入MINI2440:别说心里一万个开心,启动完成,输入p…

Linux开发--进程

经典五问: 1.什么是程序?什么是进程? 从是否运行进行判断: gcc xxx -o pro,磁盘中生成的pro文件,就是程序 进程是程序一次运行活动 程序是静态的概念,进程是动态的概念。 2.如何查看系统中的进程: 在l…

LeetCode-热题100:64. 最小路径和

题目描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 **说明:**每次只能向下或者向右移动一步。 示例 1: 输入: grid [[1,3,1],[1,5,1],[4,2,1]]…

09 - 镜像管理之:部署单点harbor

本次准备了3台机器:harbor-01、harbor-02、harbor-db,用于测试 单点模式、高可用模式 部署 harbor。 ip主机名规格操作系统说明192.168.217.136harbor-012c4gCentos7.9harbor 服务器,测试单点harbor192.168.217.135harbor-022c4gCentos7.9ha…

初始C++之缺省参数 函数重载 引用

初始C之缺省参数 函数重载 引用& 文章目录 初始C之缺省参数 函数重载 引用&一、缺省参数1.1 缺省参数的定义1.2 缺省参数的分类1.3 注意事项 二、 函数重载2.1 函数重载的定义2.2 参数个数不同2.3 参数类型不同2.4 类型顺序不同2.5 为什么C语言不支持函数重载 三、引用…

Python中的错误处理 - 使用try、except、else和finally进行解释,并附带代码示例

最近,我的经理委派我创建一个自动报告。我设计的报告非常简单。它包括一些来自数据库的数字和一些基本的数学运算。我很兴奋最终可以向公司展示我的惊人的Python技能。 我完成并交付了产品。一切都很顺利。至少,直到大约两周后。我的报告由于除以零错误…

编程新手必看,python中条件控制语句学习(13)

介绍: Python3中的条件控制主要通过if、elif和else关键字来实现,它们用于根据条件执行特定的代码块。 if语句:这是最基本的条件控制结构。如果满足某个条件(条件为True),则执行相应的代码块。在Python中&am…

蓝牙app设计(方案二) E4A (时钟 优缺点)

例程改的! 主界面 虽然上面有搜索功能,但是本人建议先自行配对在使用,这样更好用,把要使用的设备收藏一下更好找哦(这样就是橙色的了,只需要点对应蓝牙左边) 代码修改部分 原版是不停向下滚动显示,这样个人觉得不太好看,所以加了个时钟,到对应时钟周期清空(达到刷…

Java-Web过滤器

文章目录 1.基本介绍1.为什么需要过滤器?2.基本介绍3.过滤器的基本原理 2.快速入门1.文件目录2.环境配置创建maven项目,导入依赖 3.代码实现1.login.jsp2.LoginCheck.java3.ManagerFilter.java编写过滤规则4.配置web.xml告诉tomcat5.admin.jsp 3.Filter的…

【nodejs基础学习三-浏览器偏好设置】

系列文章目录 第一章 nodejs基础学习–注释、变量、运算符、字符串、函数(一) 第二章 nodejs基础学习–循环、对象字符、模块导入出(二) 第三章 nodejs基础学习三-浏览器设置 系列文章目录一、开发者模式二、web偏好设置 一、开发…

【病毒分析】DevicData勒索病毒分析

1.背景 1.1来源 近期,Solar团队收到某医疗单位的援助请求,该公司的计算机受到了某勒索病毒的侵害,所有的文件被加密并且添加了.DevicData-P-470b1abd后缀,我司人员现场取证进行排查并提取加密器,本文是对于加密器的分析。 2.恶…

MySQL高级详解

文章目录 约束概述分类主键约束概述特点定义及删除主键自增 唯一约束作用语法 非空约束作用语法 面试题:非空唯一约束与主键约束有什么区别默认值约束作用语法 总结 表关系及外键约束表关系概述分类一对多关系表设计外键字段设计原则 多对多关系表设定设计原则 一对…

Linux下网络编程基础知识--协议

网络基础 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 协议 一组规则, 数据传输和数据的解释的规则。 比如说依次发送文件的文件名, 文件的大小, 以及实际的文件, 这样规定发送一个文件的顺序以及发送的每一个部分的格式等可以算是一种协议 型协议 …

探索ChatGPT-Plus:AI 助手全套开源解决方案

探索ChatGPT-Plus:AI 助手全套开源解决方案 ChatGPT-plus是一种新型的对话生成模型,它是在OpenAI的ChatGPT基础上进行了改进和优化的版本。ChatGPT-plus的出现引起了广泛关注,因为它在对话生成方面展现出了更加出色的表现和能力。在本文中&am…

【C++第三阶段】stackqueue容器

以下内容仅为当前认识,可能有不足之处,欢迎讨论! 文章目录 stack容器queue容器 stack容器 是什么?功能是什么?常用接口是什么?局限性有哪些?优势又有哪些? 栈容器,先进…

智能驾驶“血拼”端到端,元戎启行准备好了吗?

智能驾驶从规则驱动转向数据驱动,正在引导行业进入新的竞争区间。 在之前的中国电动汽车百人会论坛(2024) 上,比亚迪董事长兼总裁王传福认为,新能源汽车渗透率在未来3个月将超过50%。自动驾驶公司元戎启行CEO周光指出,在上半场的…