今天,我就给大家介绍一下
MySQL
批量
插入
和
唯一索引
问题
怎么
解决
,由于内容介绍的非常详细,对大家学习或者使用
MySQL
具有一定的参考学习价值,感兴趣的朋友可以参考下, 希望大家看完这篇文章之后有所收获。
MySQL
批量
插入
问题
在开发项目时,因为有一些旧系统的基础数据需要提前导入,所以我在导入时做了批量导入操作,但是因为
MySQL
中的一次可接受的SQL语句大小受限制所以我每次批量虽然只有500条,但依然无法
插入
,这个时候代码报
错
如下:
根据报
错
我们很快就可以知道,是SQL语句数据包太大
导致
,我们可以设置M
普通索引(INDEX):最基本的索引,没有任何限制
唯一索引
(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引(PRIMARY):它 是一种特殊的
唯一索引
,不允许有空值。
全文索引(FULLTEXT ):可用于 MyISAM 表,
mysql
5.6之后也可用于innodb表, 用于在一篇文章中,检索文本信息的, 针对较大的数据,生成全文索引很耗时和空间。
联合
(组合)索引:为了更多的提高
mysql
效率可建立组合索引,遵循”最左前缀“原
研发在早期的设计中,由于设计方面的
问题
,
导致
在设计表结构的时候,有个表有非空
唯一索引
而没有主键
在InnoDB存储引擎中,如果没有主键的情况下,有非空
唯一索引
的话,非空
唯一索引
即为主键。
那么这就会有个
问题
存在
应用在更新表的时候,用了
update aaaa
set xxx=xxx+(-1)
where id=412 and xxx+(-1)>=0
alter table "表名" add unique index(`字段1`,`字段2`)
2.此时如果在
插入
相同的数据会报
错
,可以使用 no duplicate key update
解决
相同数据不存储,不会报
错
insert into "表名" (`name`,`age`,`time`)values('zhangsan','18','2001:10:10') on dup...
同一具有UNIQUE约束的列或者行,可以允许只有一个空值,就是相当于,这个具有空值的行或者列可以用空值来和其他非空值行或者列区别。 而约束中的PRIMARY KEY,不能允许有空值。它来定义基本表的主键,起唯一标识作用,值不能是NULL,不能
重复
,以此来保证实体的完整性。
黑色头发 http://heisetoufa.iteye.com
如果发现本文有误,欢迎批评指正...
因数据
重复
创建
唯一索引
失败
,删除
重复
数据的SQL语句:
delete from stat where id in (select * from (select min(id) from stat group by mid having
count(mid)>1) as b);
说明:红色为表明,绿色为唯一主键,蓝色为
重复
的字段。
付:转移数据库:
(1)把要转移的数据库表和数据