场景:
判断数据库中是否有指定的数据,当没有时,执行插入操作,否则什么也不做。
问题:
mysql 目前没有直接的方法完成该操作。
解决思路:
我们可以通过控制 INSERT INTO ... SELECT ...
语句的 SELECT
部分返回值,来控制是否执行插入操作。
示例:
当 user 表中不存在 user_name = 'zhangsan' 的记录时,插入一条记录,sql 语句如下:
INSERT INTO `user`(`user_name`, `name`, `password`)
SELECT 'zhangsan' AS `user_name`, '张三' AS `name`, '123456' AS `password`
FROM `user`
WHERE (SELECT COUNT(1) FROM `user` WHERE `user_name` = 'zhangsan') = 0
LIMIT 1;
示例解析
- 首先构造
INSERT INTO ... SELECT ...
语句,实现基本的插入操作; - 然后使用
SELECT 'zhangsan' AS user_name, '张三' AS name, '123456' AS password
构造一条待插入的数据; - 接着给
SELECT
语句带上判断条件:(SELECT COUNT(1) FROM user WHERE user_name = 'zhangsan') = 0
,判断是否存在user_name = 'zhangsan'
的记录。当条件不满足时,SELECT 语句不会返回任何数据,INSERT INTO
也就不会执行; - 当条件满足时,为了避免返回多条,加上
LIMIT 1
限制即可。