一、背景

以前使用SQL Server进行表分区的时候就碰到很多关于唯一索引的问题:Step8:SQL Server 当表分区遇上唯一约束,没想到在MySQL的分区中一样会遇到这样的问题:MySQL表分区实战。

今天我们来了解MySQL唯一索引的一些知识:包括如何创建,如何批量插入,还有一些技巧上SQL;

这些问题的根源在什么地方?有什么共同点?MySQL中也有分区对齐的概念?唯一索引是在很多系统中都会出现的要求,有什么办法可以避免?它对性能的影响有多大?

二、过程

(一) 导入差异数据,忽略重复数据,IGNORE INTO的使用

在MySQL创建表的时候,我们通常创建一个表的时候是以一个自增ID值作为主键,那么MySQL就会以PRIMARY KEY作为聚集索引键和主键,既然是主键,那当然是唯一的了,所以重复执行下面的插入语句会报1062错误:如Figure1所示;复制代码 代码如下:-- 创建测试表

CREATE TABLE `testtable` (

`Id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,

`UserId` INT(11) DEFAULT NULL,

`UserName` VARCHAR(10) DEFAULT NULL,

`UserType` INT(11) DEFAULT NULL,

PRIMARY KEY (`Id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 插入测试数据

INSERT INTO testtable(Id,UserId,UserName,UserType)

VALUES(1,101,'aa',1),(2,102,'bbb',2),(3,103,'ccc',3);

(Figure1:Duplicate entry '1' for key 'PRIMARY')

但是在实际的生产环境中,需求往往是需要在UserId键值中设置唯一索引,今天我就以这个作为示例,进行唯一索引的测试:复制代码 代码如下:-- 创建测试表1

CREATE TABLE `testtable1` (

`Id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,

`UserId` INT(11) DEFAULT NULL,

`UserName` VARCHAR(10) DEFAULT NULL,

`UserType` INT(11) DEFAULT NULL,

PRIMARY KEY (`Id`),

UNIQUE KEY `IX_UserId` (`UserId`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 创建测试表2

CREATE TABLE `testtable2` (

`Id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,

`UserId` INT(11) DEFAULT NULL,

`UserName` VARCHAR(10) DEFAULT NULL,

`UserType` INT(11) DEFAULT NULL,

PRIMARY KEY (`Id`),

UNIQUE KEY `IX_UserId` (`UserId`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 插入测试数据1

INSERT INTO testtable1(Id,UserId,UserName,UserType)

VALUES(1,101,'aa',1),(2,102,'bbb',2),(3,103,'ccc',3);

-- 插入测试数据2

INSERT INTO testtable2(Id,UserId,UserName,UserType)

VALUES(1,201,'aaa',1),(2,202,'bbb',2),(3,203,'ccc',3),(4,101,'xxxx',5);

sql加上唯一索引后批量插入_MySQL批量插入遇上唯一索引避免方法相关推荐

  1. sql加上唯一索引后批量插入_MySQL当批量插入遇上唯一索引

    一.背景 以前使用SQL Server进行表分区的时候就碰到很多关于唯一索引的问题:Step8:SQL Server 当表分区遇上唯一约束,没想到在MySQL的分区中一样会遇到这样的问题:MySQL表 ...

  2. mysql中sql批量插入_MySQL批量SQL插入性能优化

    对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长. 特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的 ...

  3. mysqlplus 批量插入_mysql批量插入

    在MySQL数据库中,如果要批量插入数据(特别是上百万级超大数据), 用普通的insert into来操作非常不现实,速度慢人力成本高, 推荐使用Load Data或存储过程来导入数据, 我总结了一些 ...

  4. mysql索引缓存的内容_mysql服务器变量、缓存及索引

    服务器变量 注意:其中有些参数支持运行时修改,会立即生效:有些参数不支持,且只能通过修改配置文件,并重启服务器程序生效:有些参数作用域是全局的,且不可改变:有些可以为每个用户提供单独(会话)的设置. ...

  5. SQL Server 当表分区遇上唯一约束(转载)

    一.前言 我已经在高兴对服务器创建了表分区并且获得良好性能和自动化管理分区切换的时候,某一天,开发人员告诉我,某表的两个字段的数据不唯一,需要为这两个字段创建唯一索引的时候,这一切就变得不完美了. 列 ...

  6. mybatis mysql 批量更新_mysql批量update更新,mybatis中批量更新操作

    在日常开发中,有时候会遇到批量更新操作,这时候最普通的写法就是循环遍历,然后一条一条地进行update操作.但是不管是在服务端进行遍历,还是在sql代码中进行遍历,都很耗费资源,而且性能比较差,容易造 ...

  7. mysql数据库语句插入_MySQL之插入数据(添加数据)-INSERT

    基本语法: INSERT 语句有两种语法形式,分别是 INSERT-VALUES 语句和 INSERT-SET 语句. 1.INSERT...VLAUES语句 INSERT VLAUES的语法格式如下 ...

  8. mysql sql批量插入_mysql批量插入数据的纯sql脚本

    引用 13.2.5. LOAD DATA INFILE语法 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [ ...

  9. mysql不存在就批量新增_mysql批量插入,存在则修改,不存在则插入

    批量插入,存在则修改,不存在则插入 INSERT INTO 表名 (字段1,字段2,字段3,字段4) VALUES (字段1值,字段2值,字段3值,字段4值) ON DUPLICATE KEY UPD ...

最新文章

  1. MySQL/MariaDB数据库主从复制
  2. 数据结构之堆Heap
  3. 人的大脑皮层对产品设计有何启发?
  4. 效率最高的Excel数据导入续---SSIS Package包制作图解全过程
  5. 介绍一个使用 cl_abap_corresponding 进行两个内表不同名称字段赋值的快捷方法
  6. c语言cin改scanf,我的代码用scanf输入wa了,改成cin就ac了 ?
  7. java第一季2.2
  8. JS点击获取验证码后60秒内禁止重新获取(防刷新)
  9. CSS Word的文档结构视图设计
  10. 怎么用ubuntu进入python_ubuntu 下python环境的切换使用
  11. python字母频率_科学网-Python统计字母频数和频率-吕波的博文
  12. 架构设计师(Architect)的专业与角色
  13. QT Opencv 抽奖系统
  14. 2015年阿里巴巴实习生面试经验
  15. NOIP2016普及组复赛全国一等奖名单及排名(续表_919~1419名)
  16. 世界首富马斯克突然吟了一首中文诗
  17. 类似华为麒麟鸿蒙类的名字,华为除了“麒麟”,还有四款顶级芯片,名字背后隐藏寓意令人感动...
  18. yun mysql_yun 安装mysql
  19. java 汇编_大话+图说:Java 汇编指令——只为让你懂
  20. 一个循环实现冒泡法排序(并没有什么卵用)

热门文章

  1. java读取mysql配置文件_MySql主从复制,从原理到实践
  2. excel打印预览在哪里_excel预览打印超出范围该怎么办呢?
  3. 软件工程第一次作业-谢旭军
  4. BZOJ 1833 数位DP
  5. poj2125最小点权覆盖
  6. 【笔记】8位流水线乘法器(Verilog)
  7. 解决硬盘磁道损坏问题(亲测)
  8. 蓝牙通信-打开和关闭蓝牙设备
  9. 如何将 Ubuntu 版本升级到新版本
  10. 开发选gRPC还是HTTP