027、SQL语句之DML语句

news/2025/1/31 2:40:38/

INSERT 语句

INSERT 向表插⼊⾏。语法如下:

  • INSERT INTO table_name (column_list) VALUES (value_list) [,(value_list),…];
  • column_list 中的列数和 values_list 中的值的数量必须相同
  • 值的顺序必须与语句中列的顺序相匹配
  • 将字符串和时间数据类型(推荐)的列值⽤单引号包裹
  • 数值数据⽆需⽤引号

UPDATE 语句

  • 语法:
UPDATE table_name SET col_name1=expression1[,col_name2=expression2,...][WHERE condition][ORDER BY ...][LIMIT row_count];tidb> SELECT count(*) FROM universe.planets;
+----------+
| count(*) |
+----------+
| 10 |
+----------+tidb> UPDATE universe.planets SET gravity = 0.0;
Query OK, 10 rows affected (0.01 sec)
Rows matched: 10 Changed: 10 Warnings: 0

除了赋值的⼦句部分,UPDATE 的其他字句语法和 SELECT ⾮常类似,本质上是找到已存在的表⾏,然后修改它们。

在 UPDATE ⾥使⽤ LIMIT

和 SELECT 的情况⼀样, 需要注意如何确保返回表⾏的顺序:

tidb> SELECT * FROM test.r1;
+----+------+
| id | name |
+----+------+
| 1 | A |
| 2 | C |
+----+------+
2 rows in set (0.00 sec)tidb> UPDATE test.r1 SET name='Z' WHERE id < 10 LIMIT 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0tidb> SELECT * FROM test.r1;
+----+------+
| id | name |
+----+------+
| 1 | Z |
| 2 | C |
+----+------+
2 rows in set (0.01 sec)

警惕: 本例中的 UPDATE 语句⽆法确定它会修改哪, LIMIT 1 并不能⽤来确定哪个表⾏符合条件。

在 UPDATE ⾥使⽤ ORDER BY 和 LIMIT

tidb> SELECT * FROM test.r1;
+----+------+
| id | name |
+----+------+
| 1 | Z |
| 2 | C |
+----+------+
2 rows in set (0.01 sec)
tidb> UPDATE test.r1 SET name='Z' WHERE id < 10 ORDER BY id DESC
LIMIT 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
tidb> SELECT * FROM test.r1;
+----+------+
| id | name |
+----+------+
| 1 | Z |
| 2 | Z |
+----+------+
2 rows in set (0.00 sec)

就像 SELECT ⼀样,你必须使⽤ ORDER BY 来确保表⾏的顺序。

REPLACE 语句

找到记录的,就是更新,没找到记录的就是插入

  • 在具有主键或唯⼀约束的表中使⽤ REPLACE 语句将现有⾏替换为新的
  • 在没有主键或唯⼀约束的表中,它的作⽤⽅式与 INSERT 语句相同
  • 语句返回的⾏数是删除和插⼊的⾏数的总和
    • rows affected 等于 1: 插⼊了⼀⾏,未删除任何⾏
    • rows affected ⼤于 1: 在插⼊新⾏之前删除了 1 或多个原有⾏。
tidb> SELECT * FROM test.r1;
+----+------+
| id | name |
+----+------+
| 1 | A |
| 2 | B |
+----+------+
tidb> REPLACE INTO test.r1 (id,name) VALUES (2,'C');
Query OK, 2 rows affected (0.00 sec)
tidb> SELECT * FROM test.r1;
+----+------+
| id | name |
+----+------+
| 1 | A |
| 2 | C |
+----+------+

从语义上看,REPLACE 语句是 DELETE 语句和 INSERT 语句的结合,可⽤于简化应⽤程序代码。

避免重复的⾏记录

  • INSERT … ON DUPLICATE KEY UPDATE : 避免重复⾏记录错误
  • 类似于 REPLACE, 但它使⽤ UPDATE ⽽不是 DELETE 来处理重复的⾏记录
tidb> select * from test.r1;
+----+------+--------+
| id | name | gender |
+----+------+--------+
| 1 | Z | F |
| 2 | Z | F |
+----+------+--------+
2 rows in set (0.00 sec)
tidb> replace into test.r1 (id, name) values (1, 'A');
Query OK, 2 rows affected (0.00 sec)# 如下语句,可看到主键为2的重复了,所以将主键为2这一行当中name列改成B
tidb> insert into test.r1 (id, name) values (2, 'B') on duplicate
key update name='B';
Query OK, 2 rows affected (0.01 sec)tidb> select * from test.r1;
+----+------+--------+
| id | name | gender |
+----+------+--------+
| 1 | A | NULL |
| 2 | B | F |
+----+------+--------+
2 rows in set (0.00 sec)

DELETE 语句

语法:

DELETE FROM table_name[WHERE condition][ORDER BY ...][LIMIT row_count];
tidb> SELECT count(*) FROM universe.planets;
+----------+
| count(*) |
+----------+
| 10 |
+----------+
tidb> DELETE FROM universe.planets;
Query OK, 10 rows affected (0.01 sec)

TRUNCATE 语句

  • 语法: TRUNCATE [TABLE] table_name
  • TRUNCATE TABLE 语句将删除表中所有的⾏
  • 它重置 AUTO_INCREMENT 为起始值
  • 不像 DELETE,它是 DDL,不是 DML,意味着它不能加⼊事务⽤,不能被ROLLBACK
  • 等同于按次序执⾏: DROP TABLE , CREATE TABLE
  • 可能可以使⽤ FLASHBACK TABLE 撤销

TRUNCATE 语句以⾮事务⽅式从表中删除所有数据。可认为 TRUNCATE 语句同DROP TABLE + CREATE TABLE 组合在语义上相同。
TRUNCATE TABLE table_name 和 TRUNCATE table_name 均为有效语法。


http://www.ppmy.cn/news/743953.html

相关文章

为什么说vivo Pad 是学习办公的生产力利器

在翘首以盼数日之后&#xff0c;vivo Pad 终于在2022年4月11日这一天揭开了它神秘的面纱&#xff0c;作为 vivo 首款旗舰级平板电脑&#xff0c; vivo Pad一经面世便收获了直播间满屏的「真香」、「买爆」弹幕。 售价2499元的8GB128GB 版本、2999元的8GB256GB版本&#xff0c;在…

vivo手机系统android9,可能是最安全的安卓系统了,vivo Funtouch OS 9带来不一样

原标题:可能是最安全的安卓系统了,vivo Funtouch OS 9带来不一样 或许,很多人在购买手机的时候,都会关注手机的硬件和拍照,当然了,因为系统关系到流畅性和人性化功能体验,对于这一点也是非常重视的。其实,对于手机系统,还有很多隐藏的一些功能相信很多人都不知道。通过…

2<<3是什么意思?

含义&#xff1a;是二进制的位运算&#xff0c;将2转换成二进制是&#xff1a;0000 0000 0010 &#xff08;写成10也行&#xff0c;应该能看懂&#xff09;&#xff0c;然后将1向左移动3位&#xff0c;变成&#xff1a;00010000 。再转换成十进制是&#xff1a;16 。所以 2 <…

屏幕一直显示android,lenovo!屏幕一直显示poweredbyandroid是什么意思

powered By Android意思为由Android(安卓)提供支持&#xff0c;也就是说手机系统是安卓为底层的。而vivo手机系统为Funtouch OS&#xff0c;是基于安卓深度定制的系统&#xff0c;故开机时会显示powered By Android&#xff0c;因而显示也无关系&#xff0c;故手机还有用。 同时…

allergro音乐术语什么意思_乐谱中Allegro Moderato是什么速度?

展开全部 速度大约处在108—120之间 分析如下&#xff1a; Allegro Moderato是音乐术语&#xff0c;ALLEGRO的话肯定就是636f707962616964757a686964616f31333366303137快板了&#xff0c;但是后面跟了一个Moderato这个定语&#xff0c;moderato与其它速度标记连用时&#xff0…

allergro音乐术语什么意思_rit(这是音乐术语)什么意思?

是渐慢的意思 常用的音乐表情术语:速度标记 largo——广板 lento——慢板 adagio——柔板 grave——壮板 andante——行板 andantino——小行板 moderato——中板 allegretto——小快板 allegro——快板 vivo——快速有生气 vivace——快速有生气 presto——急板 常用的音乐表…

allergro音乐术语什么意思_音乐术语里面fz是什么意思?

展开全部 fz是forzando重音、加强的意思。有意e68a84e8a2ad3231313335323631343130323136353331333433663065识地加强某个音&#xff0c;使它的力度超过周围的音。在 音乐创作和表演中重音不仅是构成节拍的基本要素&#xff0c;也是传达作品内涵的重 要手法&#xff0c;还能够组…

allergro音乐术语什么意思_钢琴里的leggiero是什么意思

展开全部 leggiero是钢琴谱表情术语的一种&#xff0c;意思是&#xff1a;轻巧地。指乐曲所要表现的是轻快、轻巧的情62616964757a686964616fe4b893e5b19e31333366303833感。 音乐表情术语是指明乐曲在演唱、演奏时表情要求的文字标记。表情术语的作用主要为帮助演奏更好、更快…