前言:
不管你是一个开发工程师还是测试工程师,或是你是运维工程师,假如我们使用的是关系型数据库的话,可能最多使用到的可能就是数据库中的增删改查了(CRUD)。此文是本系列里面的第二篇文章,第一篇文章主要讲解的是:Mysql表结构的增删改查(CRUD)——Mysql初级(一),假如你也感兴趣的话,可以前往查阅,当然也可以提出你宝贵的意见和建议。此文主要致力于Mysql数据层面的增删改查。首先会先讲解MySQL CRUD语法,主要参考资料是Mysql的官方文档(中文版)。其次,会针对性的提供私人定制的基础案列,用以说明问题。然后会讲解在开发的过程中容易忽视的问题分享,以及关于CRUD的一些高级操作。最后总结关于CRUD的注意事项。这就是本文的行文思路,废话不多说,咱们直接上干货吧!
数据准备:
1、表结构建立:
-- 1、建立测试表
DROP TABLE IF EXISTS T_MYSQL_CRUD; -- 这种方式是删了重建
CREATE TABLE IF NOT EXISTS T_MYSQL_CRUD(
id INT UNSIGNED AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
author VARCHAR(40) NOT NULL,
date DATE,
PRIMARY KEY (id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、数据插入:
-- 2、添加测试数据
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《C语言》','马云',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《C#语言》','马化腾',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《Java》','李彦宏',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《Mysql》','刘强东',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《演员的自我修养》','周星驰',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《神雕侠侣》','金庸',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《武林外传》','阿猫',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《某海堡垒站》','阿狗',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《Python基础》','粉红',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《Django入门》','五毛',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《JavaScrppt高级》','马克思',NOW());
INSERT INTO T_MYSQL_CRUD(title,author,date) VALUES('《Spring学习手册》','二哈',NOW());
3、数据概览
一、数据插入(INSERT)
1、语法分析:
Mysql数据插入的方式有多种,在不同的应用场景下,我们可能使用不同的插入方式,这样即可以最大限度的节省时间又可以提高程序的性能。以下是Mysql数据插入的语法概览,在接下来的时间会分别讲解,稍安勿躁。代码来源于Mysql官方文档。
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name [, partition_name] ...)]
[(col_name [, col_name] ...)]
{VALUES | VALUE} (value_list) [, (value_list)] ...
[ON DUPLICATE KEY UPDATE assignment_list]
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name [, partition_name] ...)]
SET assignment_list
[ON DUPLICATE KEY UPDATE assignment_list]
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name [, partition_name] ...)]
[(col_name [, col_name] ...)]
SELECT ...
[ON DUPLICATE KEY UPDATE assignment_list]
value:
{expr | DEFAULT}
value_list:
value [, value] ...
assignment:
col_name = value
assignment_list:
assignment [, assignment] ...
使用INSERT ... VALUES和 INSERT ... SET 语句的形式插入基于明确指定的值的行。 使用INSERT ... SELECT形式插入从另一个或多个表中选择行(这就是常用的SELECT FOR INSERT)。 INSERT使用 ON DUPLICATE KEY UPDATE子句可以使现有行更新,如果要插入的行将导致UNIQUE索引中的重复或PRIMARY KEY冲突。 在MySQL 5.7中,DELAYED关键字被接受,但被服务器忽略。在后续的文章中回具体讨论。
1)、INSERT ... SELECT语法
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name [, partition_name] ...)]
[(col_name [, col_name] ...)]
SELECT ...
[ON DUPLICATE KEY UPDATE assignment_list]
value:
{expr | DEFAULT}
assignment:
col_name = value
assignment_list:
assignment [, assignment] ...
使用INSERT ... SELECT,您可以根据SELECT 语句的结果快速地将多行插入到表中,该语句可以从一个或多个表中进