闲话
前段时间在准备考华子的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;
结合上面的结果发现,计算列会随着相关列的更新而更新,这样就节省了很多计算的操作,但是会不会有其他隐患呢?这是一个值得思考的问题文章来源:https://www.toymoban.com/news/detail-576019.html
如有错误,欢迎指正!!!文章来源地址https://www.toymoban.com/news/detail-576019.html
到了这里,关于【MySQL】DML数据处理之增删改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!