![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 58
spring_model
总结开发中遇到的问题!
展开
-
MySQL修改数据表中的字段名
MySQL修改数据表中的字段名在一张数据表中只能设置一个唯一名称的字段名。在同一张数据表中,不能出现两个名称完全相同的字段名。因此,数据库系统可以通过字段名来区分数据表中的不同字段。在MySQL中,ALTER TABLE语句也可以修改数据表的字段名。基本语法格式如下:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;其中,“旧字段名”指原创 2015-12-30 16:52:41 · 107051 阅读 · 0 评论 -
MySQL错误——无法读表(MySQL 1018 error)
一、错误重现可以进入MySQL数据库,但是无法读取数据库表,报错如下:访问数据库,莫名其妙的报1018错误:ERROR 1018 (HY000): Can't read dir of './cnapscips/' (errno: 13)。二、解决方案查看MySQL的数据目录,一般无法读取表都是复制过来的数据库,即使root用户也无法读取表,需要修改目录权限。原创 2017-01-20 10:21:07 · 2281 阅读 · 0 评论 -
MySQL——常用SQL优化(五)
一、分页优化查询。一般分页查询时,通过创建覆盖索引能够比较好地提高性能。一个常见又非常头疼的问题:“limit 10000,10”,此时MySQL排序出10020条记录后仅仅返回第10001到10020条记录,前10000条记录都会被抛弃,查询和排序的代价非常高。1、第一种优化思路。在索引上完成排序分页操作,最后根据主键关联回原表查询所需要的其他列内容。例如:对电影表film根据标题t原创 2017-01-05 16:58:24 · 420 阅读 · 0 评论 -
MySQL——常用SQL优化(四)
一、MySQL如何优化OR条件。对于OR的查询子句,如果要使用索引,则OR之间的每个条件列都必须使用索引;如果没有使用索引,则应该考虑增加索引。然后在两个独立索引上做OR操作。从上图中,查询使用到了索引,并且从执行计划中,发现MySQL在处理含有OR字段的查询时,实际上是对OR的各个字段分别查询后的结果进行了UNION操作。但是,当在建有复合索引的列company_原创 2017-01-05 16:25:32 · 298 阅读 · 0 评论 -
MySQL——常用SQL优化(三)
一、优化group by语句。MySQL在默认情况,会对group by col1,col2,... 的这些字段进行排序,这与在查询中使用order by col1,col2,...排序类似。因此,如果显示包括一个包含相同列的order by 子句,则对MySQL时间性能没有什么影响。如果在查询时使用group by ,但是有避免排序带来的消耗,则可以指定order by null禁止排原创 2017-01-05 15:43:35 · 328 阅读 · 0 评论 -
MySQL——常用SQL优化(二)
一、优化insert语句。当进行数据插入,insert语句的优化,可以考虑以下方式。(1)、如果同时从同一客户插入很多行数据,应尽量使用多个值表的insert语句,这种方式将大大缩减客户端和数据库服务器之间的连接,关闭等消耗。使得效率比使用单个insert语句要快好几倍,下面是例子。insert into table values(1,1'),(2,'2'),(3,'3'),....原创 2017-01-05 15:21:41 · 356 阅读 · 0 评论 -
MySQL——常用SQL优化(一)
一、大批量数据的插入。当使用load命令导入数据时,适当的设置可以有效提高速度。(一)、对于MyISAM存储引擎的表,可以通过一下方式快速地批量导入数据。DISABLES KEYS和ENABLE KEYS用来打开或者关闭MyISAM表非唯一索引的更新。在导入大量数据到一个非空的MyISAM表时,通过设置这两个命令,可以提高导入速率。对于导入速率到一个空的MyISAM表,默认表示先导原创 2017-01-05 14:17:52 · 374 阅读 · 0 评论 -
MySQL——load语句导入数据
一、使用load语句导入数据。最近在看有关SQL常用优化的方案,涉及到使用load语句导入大量数据到数据库,按照官方的说法:使用load语句要比使用insert语句将近快20倍的速度,平时开发中很少涉及导入大量数据,所以,平时都是使用insert语句导入。这里对load命令进行简单的总结。进入MySQL后,使用命令:load data local infile 'S:/tab_user.t原创 2017-01-05 11:48:16 · 13725 阅读 · 0 评论 -
MySQL——配置文件(my.ini)
1、配置文件说明信息。# CLIENT SECTION# ----------------------------------------------------------------------[client]#password =1234 # pipe# socket=mysql# 设置mysql客户端连接服务端时默认使用的端口port=3306d原创 2017-01-05 09:57:21 · 38571 阅读 · 2 评论 -
MySQL——InnoDB锁问题(六)
一、在InnoDB情况下什么时候使用表锁。对于InnoDB表,大多数情况都应该使用行锁,因为事务和行锁往往是我们选择InnoDB表的重要原因。但在特殊的情况下,也可以使用表级锁。(1)、事务需要更新大部分数据或者全部数据,表又比较大,如果使用默认的行级锁,不仅使得事务执行比较慢效率低,而且可能造成其他事务长时间锁等待和锁冲突,这样的情况可以考虑使用表级锁来提高执行效率。(2)、事务涉及原创 2017-01-04 17:51:54 · 1450 阅读 · 0 评论 -
MySQL——InnoDB锁问题(五)
一、Next-key锁。当我们使用范围条件而不是相等条件去检索数据,并请求共享锁和排他锁时,InnoDB会给符合条件的已有的数据添加上锁;对于键值在条件范围内,但不存在的记录,叫间隙。InnoDB此时会给这个部分添加上锁,这种锁机制就是Next-key锁。假如:员工表emp中只有101条数据,其empid为1,2,3,.... ,101,下面SQLSELECT * FROM emp W原创 2017-01-04 16:34:44 · 343 阅读 · 0 评论 -
MySQL——InnoDB锁问题(四)
一、InnoDB行锁实现方式。 InnoDB行锁是通过给索引上的索引项来加锁实现的,如果没有索引,InnoDB将通过隐藏的聚簇索引来对记录加锁。InnoDB行锁分三种情形。(1)Record lock :对索引项加锁。(2)Grap lock:对索引项之间的”间隙”、第一条记录前的“间隙”,或者最后一条记录后的“间隙”加锁。(3)Next-key lock:前两种的组合,对原创 2017-01-04 16:06:11 · 1071 阅读 · 0 评论 -
MySQL——InnoDB锁问题(三)
一、InnoDB行锁模式和加锁方法。InnoDB表实现了以下两种形式的行锁。(1)共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。(2)排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。另外,为了允许行锁和表锁的共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁,这两种意向锁都是表锁。(a)、意向共享锁原创 2017-01-04 14:48:07 · 629 阅读 · 0 评论 -
MySQL——InnoDB锁问题(二)
可以通过show status like 'innodb_row_lock%';查看系统上的行锁争用情况;原创 2017-01-04 12:27:45 · 515 阅读 · 0 评论 -
MySQL——InnoDB锁问题(一)
InnoDB和MyISAM最大的不同有两点,(1)、支持事务处理;(2)、采用行级锁;行级锁与表级锁本省有很大的不同,同时,引入事务处理后,也带来了新的问题。下面详细讲解InnoDB行级锁。(一)、背景知识;(1)、事务及其特性。事务是由一组SQL语句组成的逻辑单元,事务具有以下四个特性。a、原子性:事务是一个原子操作单元,要么都执行成功,要么都执行失败。b、一致性:在事务原创 2017-01-04 11:40:39 · 956 阅读 · 0 评论 -
MySQL——MyISAM表级锁
锁是计算机协调多个进程或者多个线程并发访问某一个资源的机制。相对其他数据库而言,MySQL数据库的锁比较简单,最显著的特点是不同的引擎持有不同的锁机制。MyISAM和MEMORY存储引擎支持表级锁,DBD引擎支持采用页面锁,但也支持表级锁,InnoDB既支持行级锁也支持表级锁,默认为行级锁。MySQL三种锁的特性如下:(1)、表级锁:开销小,加锁快;不会出现死锁;锁定粒度比较大,发生所冲突原创 2017-01-03 16:28:58 · 665 阅读 · 0 评论 -
数据表多字段时数据插入的总结
在开发中我们需要经常使用SQL语句执行数据插入,最常出现的情况是数据表字段不多的时候,那个时候写写sql语句似乎很简单,但是有一天你会发现,你有个数据表,数据表字段有几百个,如果必须使用insert into TB_Table ('字段一','字段二','字段三',....) values(?,?,?,.....);来完成数据的插入,那么这样的sql语句难道不大,但是特别繁琐,那么有什么办法可以解原创 2016-11-23 19:40:46 · 1382 阅读 · 1 评论 -
MySQL间隙锁问题
间隙锁(Gap Lock):锁加在不存在的空闲空间,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间。最近用户反馈说系统老是出现insert时,等待超时了,最后发现是insert间隙锁!间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是一个数据范围。间隙锁的主要作用是为了防止出现幻读,但是它会把锁定范围扩大,有时候也会给我们带来麻烦原创 2017-01-03 11:04:38 · 8543 阅读 · 3 评论 -
MySQL错误——java.sql.SQLException: Incorrect decimal value: \'\' for column \'sys_offset_seq\' a
错误名称:java.sql.SQLException: Incorrect decimal value: \'\' for column \'sys_offset_seq\' a这种应该是版本问题,尤其是虚拟主机。把''改成null不会出错:insert into log values(null,'admin')insert into log values(' ','admin')转载 2017-03-04 11:44:12 · 8297 阅读 · 0 评论