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

实用SQL语句:

1.插入或更换

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

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

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

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

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

-- 20 Point rechargeREPLACE INTO last_transaction (transId,username,amount,trans_time,remark)VALUES (null, 'chenhaha', 30, '2020-06-11 20:00:20', 'Member recharge');-- 21 Buy skinREPLACE 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 ......重复密钥更新...”语句:

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

-- User Chen haha recharged 30 yuan 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';-- User Chen ha ha recharged 100 yuan 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设置。

-- First added by userINSERT IGNORE INTO users_info (id, username, sex, age ,balance, create_time)VALUES (null, 'chenhaha', 'male', 12, 0, '2020-06-11 20:00:20');-- Add twice, 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以下的大专;

原始测试数据如下:

查询语句:

5.指定数据快照或备份

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

-- Yes class_id=1(The records of the first shift) are snapshot and stored as new tables 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 = 1 ORDER BY id DESC;

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

出处:https://www.cnblogs.com/zuishuaideou/p/14225618.html

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

创建数据库company写出语句_MySQL中最实用的SQL语句相关推荐

  1. mysql 怎么查询慢sql语句_Mysql中 查询慢的 Sql语句的记录查找

    Mysql中 查询慢的 Sql语句的记录查找 慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化. ...

  2. 会mysql不会sql_不是吧,不会有人还不知道MySQL中具实用的SQL语句

    原标题:不是吧,不会有人还不知道MySQL中具实用的SQL语句 目录 实用的SQL 1.插入或替换 2.插入或更新 3.插入或忽略 4.SQL中的if-else判断语句 5.指定数据快照或备份 6.写 ...

  3. mysql导出不带注释的sql语句_MySQL mysqlbinlog解析出的SQL语句被注释是怎么回事

    MySQL mysqlbinlog解析出的SQL语句被注释是怎么回事 一网友反馈使用mysqlbinlog解析出的二进制日志中的内容中,有些SQL语句有#注释的情况,这个是怎么回事呢?我们通过实验来了 ...

  4. set trans 必须是事务处理的第一个语句_MySQL中特别实用的几种SQL语句送给大家

    在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑.减少程序与数据库的交互次数,有利于数据库高可用性,同时也能显得你的SQL很牛B,让同事们眼前一亮. 实用的SQL 1.插入或替 ...

  5. mysql语句中怎么去重复_mysql中删除重复记录sql语句

    在sql中我们经常会碰到有重复的一些数据,下面我来介绍在mysql中删除重复记录的多种方法,有需要的朋友可参考参考. 删除重复记录方法一: 1. 新建一个临时表 代码如下 复制代码 create ta ...

  6. mysql的group语句_MySQL中distinct与group by语句的一些比较及用法讲解

    这篇文章主要介绍了MySQL中distinct与group by的一些比较及用法讲解,二者在查询操作中的用法有很多相似之处,需要的朋友可以参考下 在数据表中记录了用户验证时使用的书目,现在想取出所有书 ...

  7. mysql删除列前判断_MySQL中,删除列的SQL语句是( )

    参考答案如下 除列[单选题]在某个事件过程中定义的变量是______ 语句[单选题]Moving forward even in the face of great difficulties has ...

  8. mysql命令行语句_MySql命令行命令和SQL语句

    一.常用mysql命令行命令 1.启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2.netstat -na|findstr 3306 查看被监听 ...

  9. mysql基础题知识基本语句_Mysql基础知识02-基础SQL语句 | 文艺数学君

    摘要这一篇介绍一下关于MySQL的基本操作和常用的命令. 主要会包括, 简单查询:desc; select (distinct)去重; select count(1)统计总数; 进阶查询:限制wher ...

  10. mysql直连1.执行语句_MySQL随笔01_一条SQL语句是如何执行的

    一.MySQL基础架构示意图 二.MySQL分层 总体来讲,MySQL可以分为二层:Server层 和 存储引擎 两部分,如下图所示. 不同的存储引擎共用一个Server层. 三.各部分组件概述 连接 ...

最新文章

  1. Educational Codeforces Round 2 B. Queries about less or equal elements
  2. 查看ubuntu linux开放的端口以及控制端口范围
  3. Rocket - tilelink - Delayer
  4. 中国水泥板市场趋势报告、技术动态创新及市场预测
  5. HALCON 21.11:深度学习笔记---Data(数据)(3)
  6. (转)OutOfMemory时抓取heap 快照
  7. 精读《如何在 nodejs 使用环境变量》
  8. vs2008 sp1 C++ 发布程序
  9. 如何ubuntu上安装tecplot,教你怎么创建图标哦!
  10. h5/uni-app打开手机app,没有则跳转到商店下载
  11. 华为应用市场名称问题
  12. autojs教程:贝壳赚app脚本代码
  13. 如何利用qiankun快速搭建一个微前端项目
  14. 2021年全球望远镜收入大约1161.6百万美元,预计2028年达到1275百万美元
  15. 高通--PMIC修改(三)
  16. CentOS 8.1安装MySQL 8.0详解
  17. cad缩放_这个CAD缩放技巧太实用!
  18. PW5328B的锂电池升压9V芯片方案,设计图
  19. 实例操作:Python提取雅虎财经数据,并做数据分析和可视化
  20. 初学JAVA环境变量配置以及编译程序和运行

热门文章

  1. echarter: ECharts的R语言接口(一)
  2. 成不了数据分析师,都是这些套路搞的鬼!
  3. 王建林的一个亿,靠打工能实现么?
  4. 数据之路 - Python爬虫 - 正则表达式
  5. java 调用 oracle的function 和 procedure
  6. hdu 3501(欧拉函数)
  7. SQL服务器名称的更改
  8. UVa 621 - Secret Research
  9. ORACLE纯SQL实现多行合并一行【转】
  10. 值类型和引用类型和数据大小排名