【MySQL】DML数据处理之增删改

本文介绍了MySQL中的数据操作,包括如何添加数据,如指定字段插入、批量插入,更新数据的语法以及删除数据的语法。此外,还提到了MySQL8的新特性——计算列,这是一种根据其他列自动计算值的列,能减少额外的计算操作。文章强调了DML操作的自动提交特性和需要注意的约束问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

闲话

前段时间在准备考华子的od,然后也小小的偷了一下懒,估计是过不去了,还是老老实实回来更新博客吧,继续学习~

一、添加数据

1、准备工作

首先我们创建一张表 t_decade_book_new,AUTO_INCREMENT = 5表示自增起始值是5

DROP TABLE IF EXISTS `t_decade_book_new`;
CREATE TABLE `t_decade_book_new`  (
  `book_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
  `book_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '书名',
  `book_count` int(10) DEFAULT NULL COMMENT '数量',
  `detail` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '描述',
  PRIMARY KEY (`book_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

2、一条一条的插入数据

  • 方式一:没有指明添加的字段,注意使用此方式时需要按照声明字段的先后顺序进行插入
INSERT INTO t_decade_book_new
VALUES(5,'活着',5000,'余华作者,写的是关于福贵一家的故事');

如果不按照字段声明顺序进行插入,就会出错,比如下面这个SQL

INSERT INTO t_decade_book_new
VALUES('活着',5,'余华作者,写的是关于福贵一家的故事',5000);
  • 方式二:指明要添加的字段,推荐使用这种方式
INSERT INTO t_decade_book_new
(book_id, book_name, book_count, detail)
VALUES(6, '孔乙己', 7000, '作者鲁迅,讲的是孔乙己的落魄生活');

如果只指明某些字段,那么在符合约束条件的情况下,未指明的字段将会填入null值

INSERT INTO t_decade_book_new
(book_id, book_name, detail)
VALUES(7, '三体', '作者刘慈欣,讲的是我还没看完~');
  • 同时插入多条记录
INSERT INTO t_decade_book_new
(book_id,book_name,book_count,detail)
VALUES(8,'鬼吹灯',4000,'作者天下霸唱,讲的是一个摸金校尉的盗墓故事'),
(9,'安徒生童话',8000,'我猜作者是叫安徒生');

3、将查询结果插入到表中

注意,查询的字段顺序需要和插入字段的顺序一一对应
另外,还需要注意查询出来的字段是否在类型长度上都与插入表的对应字段匹配上

INSERT INTO t_decade_book_new
(book_id,book_name,book_count,detail)
SELECT book_id,book_name,book_count,detail
FROM t_decade_book
WHERE t_decade_book.book_id IN (1,2,3,4);

二、更新数据

1、更新数据的语法如下

执行时如果不带上WHERE条件语句,就会全量更新数据

UPDATE table_name
SET column1 = value1,colunm2 = value2
(WHERE条件语句);

注意:修改数据时,可能会由于约束的存在导致修改不成功(后面会详细介绍什么是约束)

三、删除数据

1、删除数据的语法如下

执行时如果不带上WHERE条件语句,就会全量删除数据

DELETE FROM table_name
WHERE...;

注意:删除数据时,也可能会由于约束的存在导致删除不成功

DML操作在默认情况下,执行完以后会自动提交数据
如果希望执行完之后不自动提交数据,则需要在执行前设置SET autocommit = FALSE;

四、MySQL8新特性:计算列

简单来说,计算列就是某一列的值是通过别的列计算来的
在MySQL8.0中,我们可以通过CREATE TABLE和ALTER TABLE来新增计算列

CREATE TABLE t_test_table
(
a INT(10),
b INT(10),
res_column INT GENERATED ALWAYS AS (a+b) VIRTUAL
);

# 插入一条数据
INSERT INTO t_test_table(a, b)
VALUES(10, 20);

# 查询出来结果a为10,b为20,res_column为30
SELECT * FROM t_test_table;

# 更新一下a的值
UPDATE t_test_table
SET a = 20;

# 查询出来结果a为20,b为20,res_column为40
SELECT * FROM t_test_table;

结合上面的结果发现,计算列会随着相关列的更新而更新,这样就节省了很多计算的操作,但是会不会有其他隐患呢?这是一个值得思考的问题

如有错误,欢迎指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值