术→技巧, 研发

MySQL:基于条件判断的数据插入

钱魏Way · · 2,356 次浏览

MySQL INSERT INTO 语句

CREATE TABLE 语句使您能够创建列,而 INSERT 语句使您能够将行或记录插入到表中。INSERT 语句是数据操作语言(DML)的一个示例。顾名思义,数据操作语言处理数据操作。

MySQL INSERT INTO语法

在表中插入一列

INSERT INTO table_name 
VALUES
(value_for_column1, value_for_column2, value_for_column3,... value_for_columnN);

在表中插入多列

INSERT INTO table_name
VALUES
(value_for_column1, value_for_column2, value_for_column3,... value_for_columnN),
(value_for_column1, value_for_column2, value_for_column3,... value_for_columnN),
…;

只在特定列中插入值

INSERT INTO table_name(column1, column3) VALUES (value_for_column1 , value_for_column3);

只有在插入特定列中的值时,需要提及列名。如果 INSERT 语句包含表中所有列的值,可以不提及。

基于条件判断的数据插入

在编写程序时,我们经常会遇到一些基于条件判断的逻辑,比如:判断该条数据是否已经在数据库中存在,如果不存在,则插入。

技巧一:使用ignore关键字

如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: insert ignore into

当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。所以使用ignore请确保语句本身没有问题,否则也会被忽略掉。

示例:

INSERT IGNORE INTO books (name) VALUES ('MySQL Manual')

技巧二:使用replace into

REPLACE的运行与INSERT很相像, 但是如果旧记录与新记录有相同的值,则在新记录被插入之前,旧记录被删除,即:尝试把新行插入到表中,当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时从表中删除含有重复关键字值的冲突行,再次尝试把新行插入到表中。

旧记录与新记录有相同的值的判断标准就是:表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。

语法格式:

REPLACE INTO `table_name`(`col_name`, ...) VALUES (...);
REPLACE INTO `table_name` (`col_name`, ...) SELECT ...;
REPLACE INTO `table_name` SET `col_name`='value'

示例:

REPLACE INTO books SELECT 1, 'MySQL Manual' FROM books

技巧三:ON DUPLICATE KEY UPDATE

具体语法:

INSERT INTO table(field1, field2, fieldn) SELECT 'field1', 'field2', 'fieldn' FROM DUAL WHERE NOT EXISTS(SELECT field FROM table WHERE field = ?)

其中的 DUAL 是一个临时表,不需要物理创建。

示例:

INSERT INTO books (name) VALUES ('MySQL Manual') ON duplicate KEY UPDATE id = id

技巧四:INSERT INTO IF EXISTS

根据select的条件判断是否插入,可以不光通过primary 和unique来判断,也可通过其它条件。

示例:

INSERT INTO books (name) SELECT 'MySQL Manual' FROM dual WHERE NOT EXISTS (SELECT id FROM books WHERE id = 1)

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注