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

插入语句

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


image.png

image.png


不指定字段插入:

-- 不指定字段插入:
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表

在这里插入图片描述
在这里插入图片描述

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

查看插入数据的行数

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

image.png


IGNORE插入时忽略错误。

忽略错误不会插入错误的值。
image.png
image.png


插入默认值

如果列有默认值,且其他值没有非空约束和唯一约束。
那么插入空行,也会插入一行默认值数据。
image.png
image.png


使用set插入数据

image.png


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);

image.png

-- 如果主键冲突或唯一性索引,则更新为新插入的值,否则,插入新行
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);

image.png


INSERT DELAYED提交到内存排队

MySQL8已经移除INSERT DELAYED这个命令。
MySQL5.7及之前的版本中,INSERT DELAYED是一种优化方式,它可以让INSERT语句在后台异步执行,而不阻塞其他查询操作。这种方式在高并发环境下可以提高系统的吞吐量。
但是,在MySQL 5.7之后的版本中,这个命令已经被废弃,因为MySQL引入了更好的优化策略来处理高并发情况。其中一种常用的优化方式是使用INSERT … ON DUPLICATE KEY UPDATE语句。
如果你正在升级到MySQL 8,建议不要再使用INSERT DELAYED命令,而应该使用新的优化方式来提高系统性能。
image.png


修改数据

image.png

image.png
在这里插入图片描述


先备份数据表

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

-- 修改某个字段的值之前先备份数据表
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;

在这里插入图片描述


删除语句

image.png


delete子句中使用order by子句

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

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

在这里插入图片描述


清空表数据

在这里插入图片描述

https://blog.youkuaiyun.com/omaidb/article/details/106664327


delete和truncate的区别

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


drop删除表

在这里插入图片描述

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

删除其中某一行数据

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

同时删除多行数据:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值