DML语言{数据操纵语言}

  • 插入语句
  • 不指定字段插入:
  • 指定字段名插入:
  • 同时插入多行数据:
  • 将A表查询结果插入到B表
  • 查看插入数据的行数
  • IGNORE插入时忽略错误。
  • 插入默认值
  • 使用set插入数据
  • ON DUPLICATE KEY UPDATE
  • INSERT DELAYED提交到内存排队
  • 修改数据
  • 先备份数据表
  • 修改其中某个字段的值
  • 多个字段同时修改值的时候用逗号隔开
  • 修改非空约束的列
  • 更改列的位置
  • 删除语句
  • delete子句中使用order by子句
  • 清空表数据
  • delete和truncate的区别
  • drop删除表
  • 删除其中某一行数据
  • 同时删除多行数据:


插入语句

expression是指一个可以计算出结果的代码段,通常由数据、操作符和函数组成。

五、DML语言(数据操纵语言)_数据



五、DML语言(数据操纵语言)_数据库_02

五、DML语言(数据操纵语言)_mysql_03



不指定字段插入:

-- 不指定字段插入:
insert into 表名 values (1,'lsii',56,'13512345678');



指定字段名插入:

-- 指定字段名插入:
insert into student (name,age,stuphone) values ('lsii',56,'13512345678');



同时插入多行数据:

-- 同时插入多行数据:
insert into student values 
		(2,'wangwu',46,'13612345678'),
		(3,'sadfsa',34,'13412345678');



将A表查询结果插入到B表

五、DML语言(数据操纵语言)_字段_04


五、DML语言(数据操纵语言)_数据_05

--  将A表查询结果插入到B表
insert into product2(pname, price)
SELECT pname,
    price
from product;



查看插入数据的行数

-- 查看插入数据的行数
select row_count();

五、DML语言(数据操纵语言)_sql_06



IGNORE插入时忽略错误。

忽略错误不会插入错误的值。

五、DML语言(数据操纵语言)_字段_07


五、DML语言(数据操纵语言)_字段_08



插入默认值

如果列有默认值,且其他值没有非空约束和唯一约束。

那么插入空行,也会插入一行默认值数据。

五、DML语言(数据操纵语言)_mysql_09


五、DML语言(数据操纵语言)_数据_10



使用set插入数据

五、DML语言(数据操纵语言)_数据_11



ON DUPLICATE KEY UPDATE

MySQL 8的 ON DUPLICATE KEY UPDATE 语法,如果插入的数据会导致一个唯一性索引主键冲突,则对应的现有行将被更新为新插入的值。否则,将插入新行。

-- 创建库
create database mydb;

-- 进入库
use mydb;

-- 创建T表,a列为主键约束
CREATE TABLE t(a INT(3) PRIMARY KEY, b INT(3), c INT(3));

-- 正常插入一行数据
INSERT INTO t(a,b,c) VALUES (1, 2, 3);

-- 再插入一行数据--主键冲突
INSERT INTO t(a,b,c) VALUES (1, 2, 4);

五、DML语言(数据操纵语言)_数据_12

-- 如果主键冲突或唯一性索引,则更新为新插入的值,否则,插入新行
INSERT INTO t(a,b,c) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE c=4;
INSERT INTO t(a,b,c) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

五、DML语言(数据操纵语言)_mysql_13



INSERT DELAYED提交到内存排队

MySQL8已经移除INSERT DELAYED这个命令。

MySQL5.7及之前的版本中,INSERT DELAYED是一种优化方式,它可以让INSERT语句在后台异步执行,而不阻塞其他查询操作。这种方式在高并发环境下可以提高系统的吞吐量。

但是,在MySQL 5.7之后的版本中,这个命令已经被废弃,因为MySQL引入了更好的优化策略来处理高并发情况。其中一种常用的优化方式是使用INSERT … ON DUPLICATE KEY UPDATE语句。

如果你正在升级到MySQL 8,建议不要再使用INSERT DELAYED命令,而应该使用新的优化方式来提高系统性能。

五、DML语言(数据操纵语言)_数据_14



修改数据

五、DML语言(数据操纵语言)_mysql_15

五、DML语言(数据操纵语言)_数据_16


五、DML语言(数据操纵语言)_数据_17



先备份数据表

修改数据表之前,先备份数据表

-- 修改某个字段的值之前先备份数据表
CREATE TABLE your_table_backup AS SELECT * FROM your_table;



修改其中某个字段的值

-- 修改其中某个字段的值
update 表名 set id = 4 where age=56;



多个字段同时修改值的时候用逗号隔开

-- 多个字段同时修改值的时候用逗号隔开
update student set id = 4,name='augus' where age=56;



修改非空约束的列

如果把非空约束的字段更新为NULL会报错。



更改列的位置

# 将表中的列名1移动到第一列
ALTER TABLE 表名 MODIFY COLUMN 列名1 int(5) FIRST;

# 将表中的列名1移动到列名2的后面
ALTER TABLE 表名 MODIFY COLUMN 列名1 int(5) AFTER 列名2;

五、DML语言(数据操纵语言)_字段_18



删除语句

五、DML语言(数据操纵语言)_数据库_19



delete子句中使用order by子句

如果DELETE语句包括一个ORDER BY子句,则各行按照子句中指定的顺序进行删除,此子句只在与LIMIT联用时才起作用。

-- 使用timestamp_column进行分组,并删除第一(最旧的)行
-- 排序默认升序
DELETE FROM somelog
WHERE user = 'jcole'
ORDER BY timestamp_column
LIMIT 1;

五、DML语言(数据操纵语言)_mysql_20



清空表数据

五、DML语言(数据操纵语言)_mysql_21




delete和truncate的区别

delete是只删除表的数据,自增长约束,是从断点处开始;
truncate类似于drop table完全删除表,然后再创建该表,自增长约束,是从1开始。



drop删除表

五、DML语言(数据操纵语言)_字段_22

-- 删除指定表
drop table 表名;



删除其中某一行数据

-- 删除其中某一行数据
delete from 表名 where name='fengliu';



同时删除多行数据:

-- 同时删除多行数据:
delete from 表名 where name in ('lisi','wangwu');