mysql - 如何编写mysql查询以仅在foreign_key存在时插入值

标签 mysql sql liquibase

我有一个 user_role 表,其中 user_id 被称为 user 表中的 foreign_key。

desc user;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| name            | varchar(256) | YES  |     | NULL    |                |
| e_key            | varchar(256) | NO  | UNI   | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

desc user_role;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| name            | varchar(256) | YES  |     | NULL    |                |
| user_id            | int(11) | NO  |     | UNIQ    |                |
+-----------------+--------------+------+-----+---------+----------------+

我想创建一个测试数据,仅当 user_id 存在时才将值插入到 user_role 表中。用户可以通过唯一键“e_key”来识别。我正在搜索这样的查询

SET @user_id = (select u.id from user u where u.e_key = 'dave');
IF(@user_id IS NOT NULL) THEN
BEGIN
INSERT INTO user_role(`name`, user_id) VALUES ('admin', @user_id) ON DUPLICATE KEY UPDATE `name` = 'admin';
END;
END IF;

但是sql抛出错误。有什么办法可以实现这种行为吗?

最佳答案

您可以更改 INSERT 以使用 SELECT 作为要插入的字段的源,同时 SELECT 检查用户表。

像这样:-

INSERT INTO user_role(`name`, user_id) 
SELECT 'admin', id 
FROM user 
WHERE id = @user_id 
ON DUPLICATE KEY UPDATE `name` = 'admin';

关于mysql - 如何编写mysql查询以仅在foreign_key存在时插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24886566/

相关文章:

java - liquibase - 如何设置 text[] 数组的默认值?

javascript - jqgrid:对日期列进行排序时 MySQL 的特定问题

MySQL 无法识别外键

mysql - 你如何强制 mysql LIKE 区分大小写?

sql - 为数据表中的每一行选择 COUNT(foreign ID)

java - 并发环境中的 Liquibase

sql-server - 为条件索引生成的 Liquibase 代码在 MS SQL Server 中给出错误

php - 从 php&code 插入时,数据没有出现在数据库中

sql - 按多列分组后选择 1 行 SQL Server

sql - Azure Synapse 中的管道不断失败(运行简单的查询)