mysql索引,事务,约束

news2024/11/25 10:13:03

MySQL事务

1.什么事务

用于保证数据的一致性,它是由一组相关的dml语句组成,该租的dml语句要么全部成功要么全部失败.

2.事务和锁

当执行事务操作时(dml),MySQL会在表上加锁,防止其它用户改表的数据,这对用户来说很重要

mysql 数据库控制台事务的几个重要操作(基本操作 transaction.sql):

  1. 1.start transaction -- 开始一个事务

  2. 2.savepoint 保存点名 -- 设置保存点

  3. 3.rollback to 保存点名 -- 回退事务到指定保存点

  4. 4.rollback -- 回退全部事务

  5. 5.commit -- 提交事务,所有的操作生效,不能回退

细节:

  • 1.没有设置保存点

  • 2.多个保存点

  • 3.存储引擎

  • 4.开始事务方式

操作步骤

1.开始事务

 START TRANSACTION(事务,交易);

2.设置保存点

 SAVEPOINT A;

执行dml操作

 INSERT INTO t27 VALUES(100,'TOM');
 在t27表中插入一条数据
 SELECT * FROM t27
 查询插入的数据

3.回退操作

 ROLLBACK TO

4.提交事务

 COMMIT 
 事务提交后,不能回退修改

事务细节讨论 transaction_detail.sql:

  • 1.如果不开始事务,默认情况下,DML操作是自动提交的,不能回滚。

  • 2.如果开始一个事务,你没有创建保存点。你可以执行rollback,默认就是回退到你事务开始的状态。

  • 3.你也可以在这个事务中(还没有提交时),创建多个保存点。比如:savepoint aaa;执行 DML,savepoint bbb;

  • 4.你可以在事务没有提交前,选择回退到哪个保存点。

  • 5.MySQL的事务机制需要InnoDB的存储引擎还可以使用,MyISAM不好使。

  • 6.开始一个事务:start transaction,set autocommit=off;

  • 1.自动提交模式:默认情况下,MySQL的DML(数据操纵语言)操作(如INSERT、UPDATE、DELETE)是自动提交的。这意味着每次执行一个DML语句后,更改都会立即生效,并且无法回滚。

  • 2.手动事务控制:如果你开始了一个事务(使用start transactionbegin命令),并且没有创建保存点,执行rollback将会回退到事务开始的状态。

  • 3.保存点的使用:在事务中,你可以创建多个保存点(使用savepoint 保存点名命令),这样你可以在事务未提交前回退到特定的保存点,而不是整个事务的开始状态。

  • 4.选择性回退:在事务中,你可以选择回退到任何一个已创建的保存点(使用rollback to 保存点名命令)。

  • 5.存储引擎要求:MySQL的事务机制需要使用InnoDB存储引擎,因为InnoDB支持事务处理。MyISAM存储引擎不支持事务,因此在使用事务时,必须确保表使用的是InnoDB存储引擎。

  • 6.禁用自动提交:要开始一个事务,并手动控制提交和回滚,你可以使用start transaction命令,并且可以使用set autocommit=off来关闭自动提交模式,这样DML操作就不会立即生效,直到你执行commit命令。

MySQL事务隔离

事务隔离级别介绍:

  • 1.多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性。(通俗解释)

  • 2.如果不考虑隔离级别,可能会引发如下问题:脏读不可重复读幻读

    • 脏读 (dirty read): 当一个事务读取另一个事务尚未提交的修改时,产生脏读。

    • 不可重复读 (nonrepeatable read): 同一查询在同一事务中多次进行,由于其他提交事务所做的修改被删除,每次返回不同的结果集,此时发生不可重复读。

    • 幻读 (phantom read): 同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读。

隔离级别读未提交 (Read uncommitted)读已提交 (Read committed)可重复读 (Repeatable read)可串行化 (Serializable)
读未提交 (Read uncommitted)VVV不加锁
读已提交 (Read committed)xVV不加锁
可重复读 (Repeatable read)xxx不加锁
可串行化 (Serializable)xxx加锁

说明:V 可能出现,x 不会出现。

请注意,表格中的 "V" 和 "x" 代表某种行为或现象是否可能出现。具体到每个隔离级别下,"V" 表示该现象可能出现,而 "x" 表示该现象不会出现。例如,在 "读未提交" 隔离级别下,所有现象都可能出现(V),而在 "可串行化" 隔离级别下,所有现象都不会出现(x),并且会加锁以防止并发问题。

演示

1.登录MySQL

 MySQL -uroot -p******

登录多个用户

查看MySQL用户隔离级别

 SELECT @@tx_isolation(隔离)
 默认隔离级别REPEATEABLE(重复)-READ

把其中一个用户隔离级别为 Read uncommitted

 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

主要事务隔离必须要开启事务

创建表

 CREATE TABLE 'ACCOUT'(
         id INT,
         'name' VARCHAR(32),
         money INT;
 )

标题: MySQL事务隔离级别

步骤列表:

  1. 查看当前会话隔离级别

     select @@tx_isolation;
  2. 查看系统当前隔离级别

     select @@global.tx_isolation;
  3. 设置当前会话隔离级别

     set session transaction isolation level repeatable read;
  4. 设置系统当前隔离级别

     set global transaction isolation level 
     repeatable read;
  5. 默认的事务隔离级别是 repeatable read。一般情况下,没有特殊要求,没有必要修改(因为该级别可以满足绝大部分项目需求)。

全局修改,修改my.ini配置文件,在最后加上

可选参数:

  • READ-UNCOMMITTED

  • READ-COMMITTED

  • REPEATABLE-READ

  • READ-SERIALIZABLE

输入框内容:

  • [mysql]

  • transaction-isolation = REPEATABLE-READ

事务的特性

  1. 1.原子性 (Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都不发生,要么都发生。

  2. 2.一致性 (Consistency) 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

  3. 3.隔离性 (Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

  4. 4.持久性 (Durability) 持久性是指一个事务一旦提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

MYSQL约束

  • 约束用于确保数据库的数据满足特定的商业约束条件。

  • 在MySQL中,约束包括:NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, 和 CHECK 五种。

  • primary key:主键

  • foregin key : 外键

自增长:

auto_increment

MySQL索引

索引类型

  1. 1.

    普通索引(INDEX):

    • 最基本的索引类型,用于加速对表中单个列或多个列组合的查询。

  2. 2.

    唯一索引(UNIQUE INDEX):

    • 确保索引列中的所有值都是唯一的,不允许重复值。

  3. 3.

    主键索引(PRIMARY KEY):

    • 一种特殊的唯一索引,用于唯一标识表中的每一行。每个表只能有一个主键。

  4. 4.

    全文索引(FULLTEXT INDEX):

    • 用于文本字段,支持全文搜索功能。

  5. 5.

    空间索引(SPATIAL INDEX):

    • 用于地理空间数据类型,如空间数据。

索引的创建和使用

  • 创建索引:

     CREATE INDEX index_name ON table_name (column_name);
  • 创建唯一索引:

     CREATE UNIQUE INDEX index_name ON table_name (column_name);
  • 创建主键索引:

     ALTER TABLE table_name ADD PRIMARY KEY (column_name);
  • 创建全文索引

     CREATE FULLTEXT INDEX index_name ON table_name (column_name);
  • 删除索引:

     DROP INDEX index_name ON table_name;

索引的注意事项

  • 性能影响:

    • 索引可以加快查询速度,但也会减慢数据插入、更新和删除的速度,因为索引本身也需要维护。

  • 选择合适的列:

    • 通常,应该为经常用于查询条件的列创建索引,如WHERE子句、JOIN条件和ORDER BY子句中的列。

  • 避免过度索引:

    • 不是每个列都需要索引。过多的索引会占用额外的存储空间,并且会降低数据修改操作的性能。

  • 索引维护:

    • 随着数据的增删改,索引可能变得碎片化,需要定期维护(如使用 OPTIMIZE TABLE 命令)。

  • 使用EXPLAIN:

    • 使用 EXPLAIN 关键字可以查看查询的执行计划,帮助你理解MySQL是如何使用索引的。

 查看索引
 SHOW TNDEXES FRPM TABLE_NAME;
 添加索引
 添加唯一索引
 CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(列)
 CREATE INDEX INDEX_NAME ON TABLE_NAME(列)

MySQL的表类型和存储引擎

基本介绍

  • 1.MySQL的表类型由存储引擎(Storage Engines)决定,主要包括MyISAM、InnoDB、Memory等。

  • 2.MySQL数据表主要支持六种类型,分别是:CSV、Memory、ARCHIVE、MRG MYISAM、MyISAM、InnoDB。

  • 3.这六种又分为两类,一类是“事务安全型”(transaction-safe),比如:InnoDB;其余都属于第二类,称为“非事务安全型”(non-transaction-safe)[MyISAM 和 Memory]。

操作步骤

查看存储引擎

 SHOW ENGINES;

主要的存储引擎/表类型特点

特点MyISAMInnoDBmemoryarchive
批量插入的速率非常高
事务安全-支持--
全文索引支持---
锁机制表锁行锁表锁行锁
存储限制没有64TB没有
B树索引支持支持支持-
哈希索引-支持支持-
集群索引-支持--
数据缓存-支持支持-
索引缓存支持支持支持-
数据可压缩支持--支持
空间使用N/A非常低
内存使用中等
支持外键-支持--
  • 1.MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。

  • 2.InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

  • 3.MEMORY存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件。MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引。但是一旦服务关闭,表中的数据就会丢失掉,表的结构还在。

引擎选择

  1. .如果你的应用不需要事务,处理的只是基本的CRUD操作,那么MyISAM是不二选择,速度快。

  2. 如果需要支持事务,选择InnoDB。

  3. Memory 存储引擎就是将数据存储在内存中,由于没有磁盘I/O的等待,速度极快。但由于是内存存储引擎,所做的任何修改在服务器重启后都将消失。(经典用法 用户的在线状态().)

修改存储引擎

 ALTER TABLE 'BIAOMING' ENGINE = 存储引擎

MySQL视图

  • 1.视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含列,其数据来自对应的真实表(基表)。

  • 2.视图和基表关系的示意图

  • 视图的基本使用

    1.create view 视图名 as select语句 - 创建一个视图。

    2.alter view 视图名 as select语句 - 修改一个已存在的视图。

    3.SHOW CREATE VIEW 视图名 - 显示创建视图的详细SQL语句。

    4.drop view 视图名1, 视图名2 - 删除一个或多个视图。

  • 完成前面提出的需求 view.sql 创建一个视图 emp_view01,只能查询 emp 表的 (empno, ename, job, deptno) 信息。

 CREATE VIEW emp_view01 AS
 SELECT empno, ename, job, deptno
 FROM emp;

修改数据

 UPDATE EMP_VIEW01
         SET job = 'MANAGER'
         WHERE EMPNO = 7369

视图最佳实践

  1. 1.安全。一些数据表有着重要的信息。有些字段是保密的,不能让用户直接看到。这时就可以创建一个视图,在这张视图中只保留一部分字段。这样,用户就可以查询自己需要的字段,不查看保密字段。

  2. 2.性能。关系数据库的数据常常会分表存储,使用外键建立这些表之间的关系。这时,数据库查询通常会用到连接(JOIN)。这样做不但麻烦,效率相对也较低。如果建立一个视图,将相关的表和字段组合在一起,就可以避免使用JOIN查询数据。

  3. 3.灵活。如果系统中有一张旧的数据表,这张表由于设计的问题,即将被废弃。然而,很多应用都是基于这张表,不易修改。这时就可以建立一张视图,视图中的数据直接映射到新建的表。这样,就可以少做很多改动,也达到了升级数据表的目的。

mysql查询

分页查询

 SELECT * from emp
         oreder by empno(默认升序 asc)
         limit 0, 3;

降序desc

分组函数(增强)

 //分组显示每种岗位的雇员总数,平均工资
 SELECT COUNT(8), avg(sal), job
         FROM EMP
         GROUP BY JOB;
 //显示雇员总数,以及获得补助的雇员数
 SELECT COUNT(*), count(comm)
         FROM emp;
 //统计没有获得补助的人数
 SELECT COUNT(*),COUNT(IF(COMM IS NULL, 1, NULL))
 //显示管理员的总数
 SELECT COUNT(DISTINCT MGR)
         FROM emp;
 //显示雇员工资的最大差额
 ​
 SELECT MAX(sal) - MIN(SAL) FROM emp;
 统计各个部门的平均工资,并且是大于一千的,并且按照平均工资从高到底 取出前两行数据
 ​
 SELECT deptno,AVG(SAL) AS AVG
        FROM emp
        GROUP BY DEPTNO
        HAVING AVG > 1000
        ORDER BY AVGDESC
        LIMIT 0,2;

多表查询

  • 多表查询是指基于两个表和两个以上的表查询。在实际应用中,查询单个表可能不能满足你的需求,需要使用到(dept表和emp表)。

  • 多表查询练习 many tab.sql 显示雇员名,雇员工资及所在部门的名字【笛卡尔集】

 SELECT * FROM EMP, DEPT
 WHERE EMP.DEPTNO=DEPT.DEPTNO;

  • 小技巧:多表查询的条件不能少于表的个数-1,否则会出现笛卡尔集。如何显示部门号为10的部门名,员工名和工资?显示各个员工的姓名,工资,及其工资的级别。

自连接:将同一张表看成两张

mysql用户管理

MySQL中的用户管理和权限管理是数据库安全和维护的关键部分。通过这些管理功能,你可以控制哪些用户可以连接到数据库服务器,以及他们可以执行哪些操作。以下是MySQL用户管理和权限管理的一些基本概念和命令:

用户管理

  1. 创建用户:

     CREATE USER 'username'@'host' IDENTIFIED BY 'password';

    这里,'username' 是你想要创建的用户名,'host' 是用户可以从哪个主机连接(例如 % 表示任何主机),'password' 是用户的密码。

  2. 删除用户:

     DROP USER 'username'@'host';
  3. 修改用户密码:

     SET PASSWORD FOR 'username'@'host' = PASSWORD('new_password');

    或者

     ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
  4. 查看用户:

     SELECT User, Host FROM mysql.user;

权限管理

  1. 授予权限:

     GRANT privileges ON database.table TO 'username'@'host';

    其中 privileges 是你想要授予的权限列表,database.table 是权限适用的数据库和表。例如,SELECT, INSERT, UPDATE 等。

  2. 撤销权限

     REVOKE privileges ON database.table FROM 'username'@'host';
  3. 查看权限:

     SHOW GRANTS FOR 'username'@'host';
  4. 权限类型:

    • SELECT:允许从表中选择数据。

    • INSERT:允许向表中插入数据。

    • UPDATE:允许更新表中的数据。

    • DELETE:允许删除表中的数据。

    • ALTER:允许使用ALTER TABLE命令。

    • CREATE:允许创建新的数据库和表。

    • DROP:允许删除数据库和表。

    • INDEX:允许创建或删除索引。

    • GRANT OPTION:允许用户将自己拥有的权限授予其他用户。

注意事项

  • 权限的授予应该遵循最小权限原则,即只授予完成工作所必需的权限。

  • 在生产环境中,建议使用SSL连接来加强安全性。

  • 定期审查和更新用户权限,以确保数据库的安全性。

  • 使用FLUSH PRIVILEGES;命令或重启MySQL服务来使权限更改生效。

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

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

相关文章

鸿蒙开发—黑马云音乐之播放页面(下)

目录 1.用户随意控制播放进度 2.歌曲暂停和播放控制和歌曲上一首、下一首播放控制 3.歌曲列表 4.歌曲列表数据动态化和背景雾化 5.唱针效果 6.结语 1.用户随意控制播放进度 src/main/ets/services/AvPlayerManager.ets: // 让播放对象从某个时间点开始播放 …

本地大语言模型部署及应用

01 模型 2024-07-24,Meta 正式发布新一代开源大模型 Llama 3.1 系列,该模型共有三个版本: 8B70B405B meta评估了超过 150 个语言覆盖范围广的基准数据集。比较了 Llama 3.1 与竞争性模型在真实世界场景下的表现。实验评估表明,L…

动态住宅IP代理的搭建指南:实现高效网络访问

在互联网的复杂环境中,动态住宅IP代理逐渐成为提升网络隐私和绕过IP限制的热门选择。相比于数据中心代理IP,动态住宅IP代理具有更高的隐蔽性和真实性,能够有效模拟真实用户的网络行为。本文将详细介绍动态住宅IP代理的搭建方法,帮…

iPhone、微信二选一?苹果、腾讯官方回应

KlipC报道:9月2日,有消息称,腾讯和苹果正在就APPStore的抽成问题在不断交涉,如若谈崩有可能导致微信下架,iPhone一旦升级到 iOS 18.2 系统可能将无法使用微信。 对此,苹果中国区技术顾问表示,“…

Vue 2 与 Vue 3 中 keep-alive 组件的深入解析

更多内容前往个人网站:孔乙己大叔 在 Vue.js 的开发中,keep-alive 是一个非常重要的内置组件,它允许我们将组件状态或实例保持在内存中,避免重新渲染和重新创建组件,这对于需要频繁切换但内容较为复杂的组件场景非常有…

如何在银河麒麟中快速查询网卡固件及驱动信息

如何在银河麒麟中快速查询网卡固件及驱动信息 1、第一步:找到网卡名称2、第二步:查询固件和驱动信息3、总结 💖The Begin💖点点关注,收藏不迷路💖 在银河麒麟服务器操作系统中,如何查询网卡固件…

统一NLP和目标检测的DETR(一)——self attention、encoder、decoder

主流目标检测算法劣势 YOLO系列,它基于anchor来做,少不了要用MNS,导致速度相对较慢。 但今天介绍一款DETR,基于VIT的目标检测算法。 那么我们需要先深入过一遍VIT。 Vision transform 1、传统RNN网络的问题 单向:只…

vue3集成sql语句编辑器

使用的是codemirror 安装 pnpm add codemirror vue-codemirror --savepnpm add codemirror/lang-sqlpnpm add codemirror/theme-one-dark使用 <template><codemirror v-model"configSql" placeholder"Code goes here..." ref"codemirrorR…

热力图科普:数据可视化的利器

hello大家好&#xff0c;俺是没事爱瞎捣鼓又分享欲爆棚的叶同学&#xff01;&#xff01;&#xff01; 日常闲扯 哎呀&#xff0c;第一天上完课&#xff0c;给俺的感觉是&#xff08;热和惊喜&#xff09;&#xff0c;热是真热&#xff0c;从出租屋走到教学楼给我整的汗流浃背…

十七、网络编程

文章目录 一、网络相关的概念二、InetAddresss类三、Socket3.1 基本介绍 四、TCP网络通信编程4.1 应用案例1(使用字节流)4.2 应用案例2(使用字节流)4.3 应用案例3(使用字符流)4.4 应用案例4&#xff08;TCPFileCopy&#xff09;4.5 netstat 指令4.6 TCP网络通讯不为人知的秘密 …

为啥一定要考HCIE安全?这4个理由你不得不看

大家都知道&#xff0c;网络安全越来越成为企业和个人关注的焦点。 随着网络攻击的日益复杂和频繁&#xff0c;对于具备高级网络安全技能的专业人才的需求也在不断增长。HCIE-Security认证&#xff0c;作为华为推出的顶级信息安全认证&#xff0c;正是满足这一需求的黄金标准。…

inflight 守恒化简

设 x 为 E bw / delay 效能&#xff0c;y 为 flow 在瓶颈处的实际分配带宽&#xff0c;r 为时延&#xff0c;inflt 守恒模型的方程组如下&#xff1a; I ( t ) ∑ i 0 n w i ( t ) I(t)\displaystyle\sum_{i0}^n w_i(t) I(t)i0∑n​wi​(t) d x d t y r − x \dfrac{dx}{dt…

论文速读|自然语言的最优控制合成:机遇与挑战

项目地址&#xff1a;Optimal Control Synthesis from Natural Language: Opportunities and Challenges 介绍了一种从自然语言自动生成最优控制器的框架&#xff0c;该框架主要包括以下几个步骤&#xff1a;首先&#xff0c;通过人类用户提供的初始文本和系统描述&#xff0c;…

苹果系统中如何安装Python和PyCharm

1、Python官网下载安装包 Python官网下载苹果版本的安装包。 2、PyCharm官网下载安装包 3、下载完毕后安装Python 我采用的是在Windows下下载安装包&#xff0c;然后移动硬盘挂接到MacOS的方式进行安装。 双击开始安装Python Python安装完毕 4、Python安装完毕后的测定 注意直…

【开源免费】基于SpringBoot+Vue.JS高校校园招聘服务系统(JAVA毕业设计)

本文项目编号 T 010 &#xff0c;文末自助获取源码 \color{red}{T010&#xff0c;文末自助获取源码} T010&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Qt QPushButton 按钮添加数字气泡

使用场景 项目中&#xff0c;在某个按钮的右上角添加数字气泡是一个很常见的功能&#xff0c;可以用新建一个组合类来实现。不过这样比较麻烦&#xff0c;如果加气泡是后面的需求&#xff0c;可能改动的地方较多。 下面介绍2种比较简单&#xff0c;不需要改动按钮响应的方式。…

Web3社交新经济,与 SOEX 实现无缝交易的高级安全性

出于充分的理由&#xff0c;安全性是交易中至关重要的考虑因素。每个人都应该确保自己的资金在交易时是安全的。由于 &#xff33;&#xff2f;&#xff25;&#xff38; 充当您与交易所的最佳连接&#xff0c;因此必须强调的是&#xff0c;该系统不会引发任何安全问题。 &a…

央视曝光“硫超标”枸杞,记者直击加工现场:被熏到泪流不止

枸杞&#xff0c;这一自古以来便被誉为“药食同源”的珍贵食材&#xff0c;不仅承载着中华民族深厚的养生智慧&#xff0c;也广泛融入现代人的日常饮食与保健之中。 从食品、饮料到保健品&#xff0c;枸杞的身影无处不在&#xff0c;其独特的营养价值与药用价值深受消费者青睐。…

心电调试笔记

原理图设计 注意事项 引脚连接检查&#xff1a;确保每个元器件与芯片引脚连接正确是基础&#xff0c;错误的连接可能导致系统无法正常工作。未连接引脚标识&#xff1a;对于未使用的引脚&#xff0c;虽然不连接但应标识为非使用状态&#xff0c;以免混淆或引起误操作。测试点设…

【 html+css 绚丽Loading 】 000034 三元聚散盘

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…