MySQL中购买的语句_MySQL中最实用的SQL语句

原标题:MySQL中最实用的SQL语句

前言:在编写SQL时,我们经常灵活地使用一些SQL语句编写语句,从而可以大大简化程序逻辑。减少程序与数据库之间的交互次数,这有利于数据库的高可用性。

实用SQL语句:

1.插入或更换

如果我们要插入新记录(INSERT),但是如果该记录已经存在,请先删除原始记录,然后再插入新记录。

场景示例:需要使用此表中存储的每个客户的最新交易订单信息,以确保不重复输入单个用户的数据,执行效率最高,与数据库的交互最少,并且数据库是高度可用的。

此时,可以用“ REPLACE INTO”语句,这样就不必先查询,然后再决定是否先删除和插入。

“REPLACE INTO”语句基于唯一索引或主键来确定其是否唯一。

注意:如以下SQL所示,在用户名字段中创建唯一索引,并且可以自动增加transId设置。

--20PointrechargeREPLACE INTO last_transaction(transId,username,amount,trans_time,remark)VALUES(null,'chenhaha',30,'2020-06-11 20:00:20','Member recharge');--21BuyskinREPLACE INTO last_transaction(transId,username,amount,trans_time,remark)VALUES(null,'chenhaha',100,'2020-06-11 21:00:00','Buy the skin of the supreme fist of blind monk');

如果用户名= chenaha的记录不存在,则REPLACE语句将插入一条新记录(第一次充值),否则,将删除当前用户名= chenaha的记录,然后将一条新记录已插入。

不要给id赋予特定的值,否则,除非特殊的业务要求,否则SQL执行将受到影响。

2.插入或更新

如果我们要插入新记录(INSERT),但是如果该记录已经存在,请更新该记录。这时,可以用“ INSERT into ......重复密钥更新...”语句:

方案示例:此表存储用户的历史充值金额。如果用户是第一次充电,将添加新的数据。如果用户是第一次充值,将累积历史充值量。必须确保不会重复输入单个用户的数据。

--UserChenhaha recharged30yuan to buy membersINSERT INTO total_transaction(t_transId,username,total_amount,last_transTime,last_remark)VALUES(null,'chenhaha',30,'2020-06-11 20:00:20','Full membership')ON DUPLICATE KEY UPDATE total_amount=total_amount+30,last_transTime='2020-06-11 20:00:20',last_remark='Full membership';--UserChenha ha recharged100yuan to buy the highest fist skin of the blindINSERT INTO total_transaction(t_transId,username,total_amount,last_transTime,last_remark)VALUES(null,'chenhaha',100,'2020-06-11 20:00:20','Buy the skin of the supreme fist of blind monk')ON DUPLICATE KEY UPDATE total_amount=total_amount+100,last_transTime='2020-06-11 21:00:00',last_remark='Buy the skin of the supreme fist of blind monk';

如果用户名= chenaha'记录不存在,则INSERT语句将插入新记录。否则,当前用户名= chenaha的记录将被更新,并且更新的字段将由UPDATE指定。

3.插入或忽略

如果要插入新记录(INSERT),但是如果该记录已存在,则不能直接忽略任何内容。我们可以用INSERT IGNORE INTO ...语句。

“INSERT IGNORE INTO ...”语句基于唯一索引或主键来确定其是否唯一。只要在用户名字段上创建唯一索引,并且可以自动增加transId设置。

--FirstaddedbyuserINSERT IGNORE INTO users_info(id,username,sex,age,balance,create_time)VALUES(null,'chenhaha','male',12,0,'2020-06-11 20:00:20');--Addtwice,ignore directlyINSERT IGNORE INTO users_info(id,username,sex,age,balance,create_time)VALUES(null,'chenhaha','male',12,0,'2020-06-11 21:00:20');

如果用户名='chenaha'的记录不存在,则INSERT语句将插入新记录,否则将不执行任何操作。

4. SQL中的if判断语句

众所周知,判断是否到处都是非常有用的。在SQL语句中,“在……时……然后……其他……结束”的情况下,可用于添加,删除,修改和查询各种语句。

如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)

*方案:有一个针对学生的高考成绩表,需要列出成绩。重点大学的得分超过650分,其中一门600-650分,两门500-600分,三门400-500分,以及400以下的大专;

原始测试数据如下:

0a1656fe8c8488b28b2dda040e8de2b3.png

查询语句:

b909da0f3f868178535e11f799087299.png

5.指定数据快照或备份

如果要对表进行快照,即将当前表的数据复制到新表,则可以将CREATE TABLE和SELECT结合使用:

--Yesclass_id=1(Therecords of the first shift)are snapshotandstoredasnewtables students_of_class1:CREATE TABLE students_of_class1 SELECT*FROM student WHERE class_id=1;

新创建的表结构与SELECT使用的表结构完全相同。

6.编写查询结果集

如果查询结果集需要写入表中,则可以将INSERT和SELECT组合以将SELECT语句的结果集直接插入到指定表中。

例如,创建一个统计表以记录每个班级的平均分数:

CREATE TABLE statistics(id BIGINT NOT NULL AUTO_INCREMENT,class_id BIGINT NOT NULL,average DOUBLE NOT NULL,PRIMARY KEY(id));

然后,我们可以用一句话写出每个班级的平均分数:

INSERT INTO statistics(class_id,average)SELECT class_id,AVG(score)FROM students GROUP BY class_id;

7.强制指定索引

查询时,数据库系统将自动分析查询语句并选择最合适的索引。但是在许多情况下,数据库系统的查询优化器并不总是使用最佳索引。如果我们知道如何选择索引,则可以使用FORCE INDEX强制查询使用指定的索引。例如:

SELECT*FROM students FORCE INDEX(idx_class_id)WHERE class_id=1ORDER BY id DESC;

指定索引的前提是索引idx_class_id必须存在。

版权申明:本文来源于网友收集或网友提供,如果有侵权,请转告版主或者留言,本公众号立即删除。返回搜狐,查看更多

责任编辑:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值