随着业务的不断发展,数据库中的数据会越来越多,相应地,单表的数据量也会越到越大,大到一个临界值,单表的查询性能就会下降. 这个临界值,并不能一概而论,它与硬件能力.具体业务有关. 虽然在很多 MySQL 运维规范里,都建议单表不超过 500w.1000w. 但实际上,我在生产环境,也见过大小超过 2T,记录数过亿的表,同时,业务不受影响. 单表过大时,业务通常会考虑两种拆分方案:水平切分和垂直切分. 水平拆分 VS 垂直拆分 水平切分,拆分的维度是行,一般会根据某种规则或算法将表中的记录拆分到多…
mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说mysql插入数据失败,怎么能防止主键增长? MYSQL不保证AUTO_INCREMENT依次增长(1,2,3,4,5),但是可以保证正向增长(1,3,5,9)所以,当你某次操作失败后,下次AUTO_INCREMENT就不是顺序的了. innodb的自增是缓存在内存字典中的,分配方式是先预留,然后再…
MySQL DBMS,MySQL的概念,数据库分类,以前MySQL的部署中的一些概念 #DBMS:数据库管理系统,用于管理数据库的大型软件.mysql就是dbms的一种 #Mysql:是用于管理文件的一个软件 #服务端软件 #socket服务端 #本地文件操作 #解析指令(sql语句) #客户端软件(各种各样) #socket客户端 #发送指令 #解析指令(sql语句) #除了mysql,还有其他类似软件: #语法大体上都是sql语句 #关系型数据库:sqllite,db2,Oracle,acc…
自增主键没有持久化是个比较早的bug,这点从其在官方bug网站的id号也可看出(https://bugs.mysql.com/bug.php?id=199).由Peter Zaitsev(现Percona CEO)于2003年提出.历史悠久且臭名昭著. 首先,直观的重现下. mysql> create table t1(id int auto_increment primary key); Query OK, rows affected (0.01 sec) mysql> insert int…
java mysql 获取主键.DIY主键.UUID,简单粗暴,代码如下: mapper.xml insert id="add" parameterType="com.xuyao.model.User" > insert into user ( id, name, created_time, modified_time ) values ( #{id}, #{name}, now(), now() ) <selectKey resultType=&quo…
转载自:http://blog.csdn.net/sunrise918/article/details/5575054 这几天对逻辑主键.业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论,相关讨论可以看最下面的参考链接.下面是自己基于 SQL Server 做的一些总结,其他数据库(Oracle.MySQL.DB2.......)应该也类似吧.这个只是自己一时的思考,如有不当请告知,重新思考后再修 正. 定义(部分定义来源于 SQL Server 联机丛书): 主键(PRIMARY…
--查询某个表是否有唯一主键 select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name ='表名' --查询某个表是否有联合主键 select cu.* from user_cons_columns cu, user_constraints au whe…
公司决定新项目用mybatis,虽然这个以前学过但是一直没用过都忘得差不多了,而且项目比较紧,也没时间去系统点的学一学,只好很粗略的百度达到能用的程度就行了. 其中涉及到插入实体要求返回主键id的问题,以前用ssh配合oracle很容易实现,因为有sequence,而且mysql也基本没用过,所以只好去百度了. 这个内容还是比较好查的,如下: <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapp…
回到目录 如果在mysql中添加了自增字段,用来维护行的版本,那么在EF中会有一个问题,会把它当成是数据表主键,当你的真正主键是自曾时,就会把默认值0拼到生成的SQL语句里,导致你的insert出错,这是那个原因! 我们需要把它注释掉,担注释后,又有新的问题出来了 这种问题也很无厘头! 这种问题是因为你的MySQL数据库里的CreateDate字段没有把时间戳去掉,应该先把它去了就可以了! 再次运行程序,问题解决! 回到目录…
非空(not null).唯一(unique key).主键(primary key).自增长(auto_increment).默认约束(default) 准备基础环境: mysql> create database mydb2;             #创建一个名为 mydb2的数据库Query OK, 1 row affected (0.00 sec) mysql> show databases;                     #查看创建的数据库, mydb2已经创建成功.+-…