場景:
判斷數據庫中是否有指定的數據,當沒有時,執行插入操作,否則什么也不做。
問題:
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
限制即可。