MySQL 学习教程(六)【整理】-主键冲突/ 蠕虫复制/ 更新/ 删除
2017-11-06 07:47
726 查看
注: 参考自 http://blog.csdn.net/qq_35246620/article/details/70823903
新增数据的基本语法为:
在数据插入的时候,假设主键对应的值已经存在,则插入失败!这就是主键冲突。
当主键存在冲突(duplicate key)的时候,可以选择性的进行处理,即更新或替换。
下面,以表
其中,
1. 第一种情况:主键冲突,进行更新操作。
基本语法:
执行如下 SQL 语句,进行测试:
如上图所示,当主键已经存在的时候,产生主键冲突。再执行如下 SQL 语言,解决主键冲突的问题:
2. 第二种情况:主键冲突,选择替换操作。
基本语法:
执行如下 SQL 语句,进行测试:
如上图所示,当主键已经存在的时候,产生主键冲突。再执行如下 SQL 语言,解决主键冲突的问题:
通过以上两种情况的演示,当再发生主键冲突的时候,咱们已经可以从容应对并解决啦!
h2 id=”蠕虫复制”>二、蠕虫复制
蠕虫复制:从已有的数据表中获取数据,然后将数据进行新增操作,数据成倍(以指数形式)的增加。
根据已有表创建新表,即复制表结构,其基本语法为:
执行如下 SQL 语句,进行测试:
如上图所示,表
蠕虫复制的步骤为:先查出数据,然后将查出的数据新增一遍。
基本语法:
执行如上 SQL 语句,进行测试:
如上图所示,咱们已经成功将表
如上图所示,通过观察每次执行 SQL 语句后影响的列数,分别为
蠕虫复制的意义:
从已有的数据表中拷贝数据到新的数据表;
可以迅速的让表中的数据膨胀到一定的数量级,多用于测试表的压力及效率。
高级语法:
执行如下 SQL 语句,进行测试:
执行上述 SQL 语句前:
执行上述 SQL 语句后:
基本语法:
高级语法:
执行如下 SQL 语句,进行测试:
此外,在删除记录的过程中,如果表中存在自增长的主键,那么删除之后,自增长不会还原。执行如下 SQL 语句,进行测试:
如上图所示,显然在咱们删除表
基本语法:
执行如下 SQL 语句,进行测试:
如上图所示,显然咱们已经测试成功啦!
一、主键冲突
数据的操作,无外乎增删改查。新增数据的基本语法为:
insert into + 表名 + [(字段列表)] + values (值列表);
在数据插入的时候,假设主键对应的值已经存在,则插入失败!这就是主键冲突。
当主键存在冲突(duplicate key)的时候,可以选择性的进行处理,即更新或替换。
下面,以表
my_class为例,进行测试:
其中,
grade为主键。
1. 第一种情况:主键冲突,进行更新操作。
基本语法:
insert into + 表名 + [(字段列表:包含主键)] + values (值列表) on duplicate key update 字段 = 新值;
执行如下 SQL 语句,进行测试:
-- 测试主键冲突的 SQL 语句 insert into my_class values ('PM3527','B315');[/code]
如上图所示,当主键已经存在的时候,产生主键冲突。再执行如下 SQL 语言,解决主键冲突的问题:
-- 当主键冲突的时候,进行更新操作 insert into my_class values ('PM3527','B315') -- 冲突处理 on duplicate key update -- 更新主键值 room = 'B315';[/code]
2. 第二种情况:主键冲突,选择替换操作。
基本语法:
replace insert into + 表名 + [(字段列表:包含主键)] + values (值列表);
执行如下 SQL 语句,进行测试:
-- 测试主键冲突的 SQL 语句 insert into my_class values ('PM3528','B215');[/code]
如上图所示,当主键已经存在的时候,产生主键冲突。再执行如下 SQL 语言,解决主键冲突的问题:
-- 当主键冲突的时候,进行替换操作 replace into my_class values ('PM3528','B215');[/code]
通过以上两种情况的演示,当再发生主键冲突的时候,咱们已经可以从容应对并解决啦!
h2 id=”蠕虫复制”>二、蠕虫复制
蠕虫复制:从已有的数据表中获取数据,然后将数据进行新增操作,数据成倍(以指数形式)的增加。
根据已有表创建新表,即复制表结构,其基本语法为:
create table + 表名 + like + [数据库名.]表名;
执行如下 SQL 语句,进行测试:
-- 根据已有表,创建新表,当两张表位于同一数据库时,可以省略数据库名称 create table my_copy like my_gbk;[/code]
如上图所示,表
my_copy和表
my_gbk的表结构完成相同。
蠕虫复制的步骤为:先查出数据,然后将查出的数据新增一遍。
基本语法:
insert into + 表名 + [()] + select + 字段列表/* + from + 表名;
执行如上 SQL 语句,进行测试:
-- 蠕虫复制 insert into my_copy select * from my_collate_bin;[/code]
如上图所示,咱们已经成功将表
my_collate_bin中的数据复制到表
my_copy中啦!接下来,咱们再执行如下 SQL 语句,测试蠕虫复制的效果:
-- 蠕虫复制 insert into my_copy select * from my_copy;[/code]
如上图所示,通过观察每次执行 SQL 语句后影响的列数,分别为
4、
8和
16等,咱们会发现蠕虫复制的效果呈(指数)爆炸性增长。
蠕虫复制的意义:
从已有的数据表中拷贝数据到新的数据表;
可以迅速的让表中的数据膨胀到一定的数量级,多用于测试表的压力及效率。
三、更新数据
基本语法:update + 表名 + set + 字段 = 值 + [where 条件];
高级语法:
update + 表名 + set + 字段 = 值 + [where 条件] + [limit 更新数量];
执行如下 SQL 语句,进行测试:
-- 将表 my_copy 中的部分 a 更新为 c update my_copy set name = 'c' where name = 'a' limit 3;[/code]
执行上述 SQL 语句前:
执行上述 SQL 语句后:
四、删除数据
与更新类似,可以通过limit来限制删除的数量。
基本语法:
delete + from + 表名 + [where 条件];
高级语法:
delete + from + 表名 + [where 条件] + [limit 删除数量];
执行如下 SQL 语句,进行测试:
-- 将表 my_copy 中的部分 b 删除 delete from my_copy where name = 'b' limit 10;[/code]
此外,在删除记录的过程中,如果表中存在自增长的主键,那么删除之后,自增长不会还原。执行如下 SQL 语句,进行测试:
-- 删除表 student 中的记录,查看自增长属性 delete from student; show create table student;[/code]
如上图所示,显然在咱们删除表
student中的全部数据之后,
id的自增长属性值
3并没有发生改变,这是因为数据的删除是不会改变表结构的。如果想要还原自增长属性,思路是:先删除表,然后重新建表。
基本语法:
truncate + 表名;
执行如下 SQL 语句,进行测试:
-- 先清空 student 表,再重新创建 student 表 truncate student;[/code]
如上图所示,显然咱们已经测试成功啦!
相关文章推荐
- mysql复制日志删除设置和解决主键冲突的方法
- MySQL 学习教程(四)【整理】-列属性(空属性、列描述和默认值/ 主键/ 自动增长/ 唯一键)
- mysql如何设置主键和外键,实现级联更新、级联删除
- mySQL教程 第5章 插入 更新与删除数据
- MySQL学习笔记(六)插入、更新、删除记录
- Mysql复制技术中的主键冲突
- 我的MYSQL学习心得(八) 插入 更新 删除
- MySQL 5.6学习笔记(查询数据、插入、更新、删除数据)
- mysql 学习笔记-插入、更新、删除
- MySQL学习之插入、更新和删除
- MySQL 复制 主键冲突
- 我的MYSQL学习心得(八) 插入 更新 删除
- MySQL学习笔记8(插入、更新、删除数据)
- Mysql复制技术中的主键冲突
- MySQL中主键索引与聚焦索引之概念的学习教程
- mySQL 教程 第5章 插入 更新与删除数据
- mySQL教程 第5章 插入 更新与删除数据
- 《MongoDB权威指南》学习整理----MongoDB文档增加、删除及更新
- MySQL中主键索引与聚焦索引之概念的学习教程
- MySQL学习笔记之四:插入、更新与删除数据