目录
子查询: 数据的来源是一条查询语句(查询语句的结果是二维表)
数据高级操作
数据操作: 增删改查
新增数据
基本语法
Insert into 表名 [(字段列表)] values (值列表);
在数据插入的时候, 假设主键对应的值已经存在: 插入一定会失败!
主键冲突
当主键存在冲突的时候(Duplicate key),可以选择性的进行处理: 更新和替换
主键冲突: 更新操作
Insert into 表名[(字段列表:包含主键)] values(值列表) on duplicate key update 字段 = 新值;
-- 主键冲突: 更新
insert into my_class values('PHP0810','B205')
-- 冲突处理
on duplicate key update
-- 更新教室
room = 'B205';
主键冲突: 替换
Replace into 表名 [(字段列表:包含主键)] values(值列表);
-- 主键冲突:替换
replace into my_class values('PHP0710','A203');
蠕虫复制
蠕虫复制: 从已有的数据中去获取数据,然后将数据又进行新增操作: 数据成倍的增加.
表创建高级操作: 从已有表创建新表(复制表结构)
Create table 表名 like 数据库.表名;
-- 复制创建表
create table my_copy like my_gbk;
蠕虫复制: 先查出数据, 然后将查出的数据新增一遍
Insert into 表名[(字段列表)] select 字段列表/* from 数据表名;
-- 蠕虫复制
insert into my_copy select * from my_collate_bin;
-- 蠕虫复制: 先查出数据, 然后将查出的数据新增一遍
insert into my_copy select * from my_copy;
蠕虫复制的意义
- 从已有表拷贝数据到新表中
- 可以迅速的让表中的数据膨胀到一定的数量级: 测试表的压力以及效率
更新数据
基本语法
Update 表名 set 字段 = 值 [where条件];
高级新增语法
Update 表名 set 字段 = 值 [where条件] [limit 更新数量];
-- 更新部分a变成c limit:限制记录数为10
update my_copy set name = 'c' where name = 'a' limit 3;
删除数据
与更新类似: 可以通过limit来限制数量
Delete from 表名 [where条件] [limit 数量];
-- 删除数据:限制记录数为10
delete from my_copy where name = 'b' limit 10;
-- 删除整张表
delete from my_student;
删除: 如果表中存在主键自增长,那么当删除之后, 自增长不会还原
思路: 数据的删除是不会改变表结构, 只能删除表后重建表
Truncate 表名; -- 先删除改变,后新增改变