
MySQL
文章平均质量分 63
MySQL
程序员·小李
不知道要干什么的时候,停一停,想一想;知道想要什么的时候,努努力,拼一拼。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
脏读、不可重复读、幻读、丢失更新
事务1首先读取到初始值1000,而期间事务2完成了 读取+更新(1100),然后事务1继续执行扣减,预期事务1应该在事务2提交的1100的基础上扣减,现在变成了基于1000扣减,相当于事务2的提交被覆盖掉了,这就是提交覆盖。事务1首先读取到初始值1000,而期间事务2完成了 读取+更新(1100),然后事务1发生回滚,预期事务2提交的1100会是最终的结果,现在回滚成了1000,相当于事务2的提交被回滚了,这就是回滚覆盖。模式下,读到其他事务尚未提交的数据,当其他事务发生回滚时,读取到的数据就不准确了。原创 2022-11-01 23:19:57 · 1944 阅读 · 0 评论 -
【Mysql 错误定位】错误的查询结果
此时发现查询语句实际返回行数也是0,确认了删除语句并没有实际删除数据,我们使用EXPLAIN EXTENDED进一步查看实际执行情况。我们发现,实际上这个查询把两个表join了一下,取出并集,而t2表中是没有数据的,因此结果为空。我们发现,实际的子查询中的id并没有在关联表中获取,因此问题得以定位。我们尝试将DELETE语句转换成SELECT语句,查看待删除的数据有哪些。我们发现id字段并不存在,因此问题得到定位。此时,我们想删除t1和t2中所有的数据。我们创建一个表,插入了一些数据。结果返回10条数据。原创 2022-09-12 23:53:18 · 448 阅读 · 0 评论 -
【Mysql 错误定位】语法错误
这里在5.0版本是有效的,但是5.1版本就无法执行,因为accessible是保留字,所以,需要使用``包裹起来。在代码中的查询,很难知道实际的执行语句,所以我们需要获取最终到达mysql服务器的执行语句。关键字输入不完整,from缺少字母。通过打印执行语句,我们可以定位到实际的执行语句。然后在命令行中实际执行,验证是否存在语法问题。tips:首先检查语句是否存在语法错误。查看执行日志就如同查询数据一样,-- 日志打印至table。原创 2022-09-12 23:12:08 · 1405 阅读 · 0 评论 -
【mysql专项】读锁和写锁
mysql中存在四个队列,分别存储当前获取读锁的信息、当前获取写锁的信息、等待读锁的信息、等待写锁的信息: 1. 当前资源没有被写锁被占用。2. 当前没有 等待写锁队列 中没有高优先级的写锁等待。如果满足上述条件,可直接获取到读锁,若有一个无法满足,则进入PRQ 1. 当前资源没有被写锁占用。2. PWQ没有等待写锁3. RQ没有读锁锁,就是一台电脑。众所周知,写锁排斥一切,为了数据安全,和数据读取的准确性,写锁排斥其他一切形式的锁。写锁就如同你正在玩【写】电脑游戏,别人肯定不能同时玩【写】这台电脑,想玩【原创 2022-07-02 18:23:53 · 3614 阅读 · 0 评论 -
【mysql官方文档】死锁
死锁是这样产生的:不同的事务都持有对方所需要的锁,并同时等待对方释放锁。创建一个表,并插入数据:InnoDB使用自动行级锁定。即使在只insert或delete一行的事务中,也可能出现死锁。这是因为这些操作不是真正的“原子”;它们会自动对插入或删除的行的(可能有多个)索引记录设置锁。 1. 事务比LOCK TABLE会好一些2. 事务尽可能小,避免读写大量数据3. 不同事务尽可能按照相同的顺序获取锁(select for update)4. 在select for update 和 update wh原创 2022-07-02 12:43:55 · 305 阅读 · 0 评论 -
mysql小技巧
1. 查询数据竖向展示\Gselect * from table where x = 1 \G;2. one-liner (-e参数)mysql -e "select * from table where x = 1;" databaseName3. sql文件的导入想要导入含有数据的sql脚本:mysql databaseName < script.sql或者在对话中,直接使用sourcesource script.sql;...原创 2022-03-19 20:13:02 · 671 阅读 · 0 评论 -
mysql的自定义连接配置文件
在安装目录下创建.my.cnf文件(隐藏文件)# general client program connection options[client]host = localhostuser = cbuserpassword = cbpass# options specific to the mysql program[mysql]skip-auto-rehashpager="/usr/bin/less -E" # specify pager for interactive mode原创 2022-03-19 19:36:59 · 709 阅读 · 0 评论 -
Explain分析结果参考
explain用于sql语句的分析,例如mysql> explain select * from user_info where id = 2\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: user_info partitions: NULL type: constpossible原创 2021-06-28 07:46:13 · 278 阅读 · 0 评论 -
Mysql单列索引是否生效?
为表建立单列索引:Key `index_userid` (`userid`)Key `index_mobile` (`mobile`)Key `index_billMonth` (`billMonth`)那么以下查询是否命中索引呢?1. 使用三个条件进行查询SELECT * FROM `table` WHERE userId='1' AND mobile='123456' AND billMonth='2020-01';此时命中了索引 `index_userid`.原创 2021-06-27 22:48:24 · 417 阅读 · 0 评论 -
Mysql联合索引是否生效?
我们对某个表建立联合索引:KEY `union_key` (`userId`,`mobile`,`billMonth`)那么,下面的查询(绿色代表索引生效,红色代表索引不生效):1. 使用联合索引首列查询SELECT * FROM `table` WHERE userId='1';2. 使用联合索引非首列查询SELECT * FROM `table` WHERE mobile='123456';SELECT * FROM `table` WHERE billM原创 2021-06-27 22:27:32 · 1035 阅读 · 0 评论 -
Mysql查询优化
1. 尽可能使用覆盖索引使用覆盖索引可以避免回表操作,查询索引数据即可得到结果,可以避免回表查询。2.原创 2021-05-28 19:32:08 · 116 阅读 · 0 评论 -
慢SQL的优化
1. 分页查询的优化将大数据表的limit分页,使用子查询代替搜索,例如:select * from table limit 10000, 10;优化为,原创 2021-05-28 17:56:48 · 267 阅读 · 0 评论 -
慢SQL及问题定位
1. 没有索引,或者没有命中索引在查询语句中,索引可以帮助查询,迅速定位,没有索引的查询会导致扫表。有索引,但是没有命中索引也会导致扫表。原创 2021-05-28 17:40:12 · 319 阅读 · 0 评论 -
一文了解Mysql事务和锁
事务事务就是将多条数据库指令合并为一个小组,要么全部执行,要么全不执行。保存点保存点提供了一个回滚的历史记录,可以实现部分提交,部分回滚。当然,也可以全部回滚。锁粒度服务器级别:flush tables with read lock;加了服务器级别的锁后,加锁的会话不能执行任何写操作,否则会报错。其他会话执行写操作会被阻塞。表级锁:锁整个表。行级锁:锁行,指定记录。小结:服务器级锁的粒度最大,表级锁的粒度次之,行级锁的粒度最小。锁粒度越小,并发访问性能就越高,越适合做并发更新原创 2021-01-11 16:05:53 · 772 阅读 · 0 评论 -
Mysql并发控制、锁
并发控制我们知道,mysql服务端是支持多个客户端通过多线程的方式访问数据库引擎的。那么,当多个客户端同时写数据的时候,就会出现问题。如果我们每个时刻只能有一个线程操作的时候,是不存在并发问题的。我们假设有两个线程在操作,把操作分为读和写两种的话,则存在以下几种情况:线程1 线程2 结果 读 读 无风险 读 写 可能存在 写 读 可能存在 写 写 一定存在 锁对数据库的读写操作控制,可分为两种类型锁控..原创 2020-12-24 10:57:16 · 146 阅读 · 0 评论 -
Mysql设置最大并发连接数、一小时操作数
在 GRANT授权时,可以使用下列4个参数设置: MAX_QUERIES_PER_HOUR // 一小时最大查询次数 MAX_UPDATES_PER_HOUR //一小时最大更新次数 MAX_CONNECTIONS_PER_HOUR //一小时最大连接数 MAX_USER_CONNECTIONS //最大并发连接数 分别表示 每小时查询次数,每小时更新次数,每小时连接数,给定的用户可以同时连接的最大数。 所以可以这么设置...原创 2020-11-23 11:34:25 · 2396 阅读 · 0 评论 -
Mysql标准化数据库
标准化原则1. 降低空间占用。减少冗余数据。2. 数据完整性。同类型的数据尽可能地存储在统一的位置。3. 可维护性。不同的类型的数据分割到不同的位置,不至于混杂不堪。1NF“every field should hold onlyonevalue.”——每列只能包含一个数据违反第一范式的例子:film_title单个字段包含了很多值,这是不允许的。改造完成:2NF“every non-key field can be accessed ...原创 2020-11-19 15:10:19 · 499 阅读 · 0 评论 -
Mysql账户与安全
创建新的用户# jump是账户名称,localhost是指定的登录主机, secret是密码CREATE USER 'jump'@'localhost' IDENTIFIED BY 'secret';可用匹配模式指定可用主机# 不推荐,因为不安全CREATE USER 'jump'@'%' IDENTIFIED BY 'secret';授权GRANT CREATE, DROP, ALTER, INSERT, UPDATE, SELECT, DELETE, INDE.原创 2020-11-18 11:40:01 · 411 阅读 · 0 评论 -
数据存在性查询优化
我们确定数据是否存在的需求很是常见,常常通过以下方式进行判断:SELECT count(*) FROM table WHERE a = 1 AND b = 2这会导致全表扫描。当然,当数据不存在时,全表扫描是必须的,但如果数据存在多条,这种查询方式查询到数据后继续扫描全表,因此可以进行优化。SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1当我们只需要判断存在性时候,只需要在最后加上limit 1因此,数据查到后直接返回,优化了存在多条原创 2020-09-17 11:07:08 · 284 阅读 · 0 评论 -
MySQL 数据表的基本操作
创建数据表的基本格式例:创建如下数据表查看数据表show tablesMySql的完整性约束类型主键的添加(一般只用单主键,混合主键不常用)1.在主键字段后面添加primary key约束2.在定义完字段后面再加约束外键外键用户表示两个表之间的链接关系。外键是存在...原创 2019-01-07 14:25:42 · 441 阅读 · 0 评论 -
MySql的安装与使用
Win系统安装过程下载安装包按照提示安装即可。机器类型选择:数据库引擎选择:并发量配置:配置字符集支持:Win系统启动关闭服务启动:net start mysql关闭:net stop mysqlWin系统登录到Mysql例如:mysql -h localhost -u root -p修改配置文件...原创 2019-04-30 10:58:51 · 276 阅读 · 0 评论 -
Mysql数据类型及基本运算
整数类型小数类型高精度要求的时候建议使用decimal,浮点数不建议减法和比较,容易出现问题,日期与时间获取当前日期:获取当前时间:获取当前年份:获取当前时间:字符串二进制算术运算加减乘除取余除以0返回NULL关系运算相等:(不能比较null)...原创 2019-04-30 16:19:11 · 734 阅读 · 0 评论 -
Mysql自动备份配置
准备工具Mysqlmysqldumpcrontab创建备份目录#创建目录mkdir /mysql#备份目录mkdir /mysql/backup#备份脚本目录mkdir /mysql/backup/scripts#备份文件目录mkdir /mysql/backup/files#备份日志目录mkdir /mysql/backup/logs...原创 2019-05-13 18:04:40 · 1570 阅读 · 0 评论 -
MySql 在CentOS上的安装部署
首先,你可以使用以下命令检测是否已经安装了mysql相关的软件: rpm -qa|grep -i mysql然后,可以使用yum -y remove命令移除,例如:yum -y remove mysql-community-client-5.6.38-2.el7.x86_64新建一个目录用于存放安装文件:mkdir downloads获取安装包:wget ht...原创 2019-06-05 17:09:11 · 291 阅读 · 0 评论 -
MySql存储引擎
查看支持的存储引擎:show engines \G查看当前使用的存储引擎show variables like 'storage_engine%';修改默认的存储引擎找到配置文件my.ini修改:default-storage-engine=INNODB各种引擎的异同点:MyISAM:访问速度较快,对事务完整性没有...原创 2019-07-16 16:19:53 · 217 阅读 · 0 评论 -
MySql索引
Mysql支持的索引的类型普通索引(没有做一些具体的限制)唯一索引(访问速度更快)全文索引(对于字符串列更有效)单列索引(只针对一列)多列索引(针对多列,注意,只有用到多列索引中第一个索引的时候,多列索引才被使用)空间索引哪些字段适合建立索引?经常被查询的,where条件中经常出现的。分组字段中出现的。主键或外键。具有唯一约束的字段。...原创 2019-07-16 17:23:21 · 188 阅读 · 0 评论 -
MySQL视图
视图是一种为了安全考虑的策略,对于部分字段不想被看到,就在视图中去掉这个字段。视图的特点:视图的列可以来自不同的表视图是基本表的抽象视图的建立和删除不影响原表视图内容更新影响原表当视图来自多个表的时候,不允许添加、删除数据。创建视图create view viewname as 查询语句;操作视图和操作表一样...原创 2019-07-16 17:44:48 · 332 阅读 · 0 评论 -
MySQL触发器
对于某种语句执行之后,我们需要顺带着做其他的操作,这个时候需要用到触发器。触发器支持:Delete、Insert、Update语句的触发。创建触发器create trigger triggernameBEFORE|AFTER EVENTON tablename FOR EACH ROW sql语句EVENT包括:DELETE | INSERT | UPDATE...原创 2019-07-16 21:49:02 · 230 阅读 · 0 评论 -
MySQL增删改
插入完整数据指定字段不指定字段插入部分数据只添加插入的字段即可插入多条完整数据指定字段不指定字段插入多条部分数据插入查询结果更新特定记录更新所有记录删除特定记录删除所有记录...原创 2019-07-16 22:18:26 · 247 阅读 · 0 评论 -
MySQL单表查询
指定字段查询查询所有字段查询去重简单四则使用别名条件查询关系运算符逻辑运算符单条件查询多条件查询使用Between andNot Between AndNul...原创 2019-07-16 22:47:28 · 254 阅读 · 0 评论 -
Mysql多表联查
内连接查询自连接查询INNER JOIN ONANSI等值连接ANSI三表不等值连接ANSI外连接查询左外查询右外连接合并查询Union合并自动去重Union Al...原创 2019-07-16 23:14:22 · 255 阅读 · 0 评论 -
MySql事务
事务的四个特性1. 原子性一个事务就是最小的数据执行单元,对于一个事务只能是全部提交或者全部回滚。2. 一致性事务在完成的时候必须从一种状态转换到另外一种状态,以确保数据的一致性。3. 隔离性不同事务之间的进行是独立的,一个事务看到的数据要么是其他事务修改前的数据,要么是其他事务修改后的数据。4. 持久性修改数据对数据的影响是持久的,支持故障恢复。事...原创 2019-07-17 09:51:45 · 150 阅读 · 0 评论 -
MySql存储过程
存储过程可以实现数据共享。存储过程执行速度快,减少网络流量。可以被认为是一种安全机制。创建存储过程create procedure procedurename(params)[characteristic]BEGIN[body]END参数类型分为三种:INOUTINOUT[IN|OUT|INOUT] paramname typecha...原创 2019-07-17 10:37:48 · 255 阅读 · 0 评论 -
MySQL数据库管理
备份单数据库mysqldump -u username -p dbnametable1 table2 ···> backupname.sql备份多数据库mysqldump -u username -p --databasesdbname1 dbname2 ···> backupname.sql备份所有数据库mys...原创 2019-07-17 11:00:52 · 168 阅读 · 0 评论 -
MySql 数据库的创建
cmd登录mysqlMYSQL -H hostname -U username -P创建数据库CREATE DATABASE database_name查看数据库创建时的语句SHOW CREATE DATABASE database_name查看已有的数据库SHOW DATABASES;删除数据库DROP DATABASE da...原创 2019-01-07 09:50:21 · 451 阅读 · 0 评论