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