十五、mysql中对于数据表中记录/数据的一些中级操作一

mysql中,对于数据基本的增删改查前面(https://blog.csdn.net/catch_dreamer/article/details/102648209)已经介绍过了,本节介绍一些关于数据的增删改查的较高级(中级操作)。

1、高级数据新增(主键冲突)

  1. 基本语法:insert into 表名[(字段1,...,字段n)] values(字段1,...,字段n);
  2. 主键冲突:想要插入的数据中包含主键的值,并且该值已经在数据表中存在,那么此时可以预见,由于记录的主键不能重复这一约束,一定会导致插入失败(报错)。
  3. 解决主键冲突的方法一:当主键存在冲突的时候,可以用duplicate key关键字进行选择性的处理,更新和替换;具体的语法:insert into 表名[(字段1,...,字段n)] values (字段1,...,字段n) on duplicate key update 字段1=新值[,字段2=新值,...,字段n=新值];
    解析: 如果存在主键冲突,就执行update后面的语句。
    实例:
insert into stu values(1,'刘翔');
insert into stu values(1,'讯飞') on duplicate key update id=2,sname='讯飞';  //此时由于主键1已经有了,所以必然会执行后面的update操作。

在这里插入图片描述
注: 需要注意的是更新的还是本条记录,以上面实例为例,由于1号主键存在冲突,所以改为二号主键插入,但需要注意的是此时插入的还是1号原来的位置,故此,当执行两次插入语句后,依然只有一条记录

  1. 解决主键冲突的方法二——替换操作,其基本语法为replace into 表名[(字段1,...,字段n)] values(值1,...,值n);
    解析: 如果发生主键冲突,则先将原来的值删除,然后在将新的值插入,两行受影响;如果不冲突,则直接进行插入,1行受影响。
    实例:
replace into stu values(3,'李飞'); //3号主键不存在,直接插入,一行受影响
replace into stu values(3,'六子');//3号主键已存在,先删除再插入,两行受影响

在这里插入图片描述

2、蠕虫复制

蠕虫复制指的是从已有的数据中去获取数据,然后将数据又进行新增操作,数据成倍的增加。例如有两张表A和B,其中A中有数据,B为空表,我们可以先将A表中的数据复制到B表,然后再将B表中的数据复制到B表,继续重复此操作(将B表的数据复制到B表),这个过程中,B表的数据的增速将会非常快,而这个过程就是蠕虫复制的过程。

从已有的数据表创建新的数据表

基本语法:create table 新创建表表名 like 数据库表名;
解析: 这种方法只会复制表的结构,不会复制表的数据
实例:以stu表为基础创建stu2表在这里插入图片描述

蠕虫复制的实现

基本语法:

   基本语法一:
   insert into 表名[(字段1,...,字段n)] select 字段1[,...,字段n] from 表名;
   基本语法二:
   insert into 表名[(字段1,...,字段n)] select * from 表名;

实例:将stu表的数据复制到stu2表中
insert into stu2 select * from stu; --由于stu2由stu复制而来,两者结构一样,所以不需要添加字段信息
在这里插入图片描述

蠕虫复制的意义

1、可以快速的从已有的表中拷贝全部数据到其他表中;
2、可以迅速的让表中的数据膨胀到一定的数量级,测试数据表的压力以及效率。

3、中级更新中的限制记录(limit关键字)

更新的基本语法

update 表名 set 字段1=值[,...,字段n=值] [where 条件];

limit关键字的使用

update 表名 set 字段1=值[,...,字段n=值] [where 条件] [limit 更新数量];
解析: 语句中,limit表示更新的次数,或者说本语句执行的此数,这个关键字在其他的操作中也能使用,也可以用来实现分页查询功能(后面会详细叙述)。

实例:更新stu表中的数据,更新一次

在这里插入图片描述
在这里插入图片描述
解析: 由于stu表中的id字段是自增长字段,所以当id=2被改为5时,结果排到了后面,即第二条记录(id=5,sname=黄欢)。

4、删除数据

基本语法

删除数据操作与更新类似,可以通过limit来限制删除次数,其基本的语法:delete from 表名 [where 条件] [limit 次数];
解析: limit子句表示的含义和上面相同,只是这里表示的删除的次数。

实例:删除stu表中id为3的元素(执行一次删除操作)

在这里插入图片描述
注: 从上面可以看到,如果表中存在主键自增长,那么当执行删除操作之后,自增长不会还原,也就是说自增长会维持原来的值(比如上面例子中,删除了3号元素,但是5号元素的id依然是5)。
附1: 数据的删除是不会改变表的结构,如果想要改变表的结构,只能删除表后重建新表,这样每次删除记录后都能够及时的刷新数据,以重置自增长。
附2: truncate 表名;指令表名直接清空整个数据表,但表结构会保留。
实例:
在这里插入图片描述

5、select选项及字段别名

前面已经说过基本的select查询,语法如下:select 字段列表/* from 表名 [where 条件];
而本节将会讲到select的一些比较高级结构,语法:select [select选项] 字段列表/* from 表名 [where 条件] [group by子句] [having 子句] [order by子句] [limit 子句];

select选项

解析:
1、select 选项(即select对查出的结果进行处理的方式)可选的参数:

  1. all:默认的,保留所有的结果
  2. distinct:去重,对于查出的多条相同的结果,值显示第一条记录。
    实例:
    在这里插入图片描述
字段别名

字段别名指的是当数据查询出来时,有时候名字不一定满足需求(多表查询时可能会有同名字段),这时就需要对字段暂时进行重命名,而这个新的名字即被称为字段的别名。
字段别名的命名方式:字段名 [as] 别名
实例:将id命名为“编号”

select id as 别名,sname as 姓名 from stu;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值