Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写mysql查询以仅在存在外键时插入值_Mysql_Sql_Liquibase - Fatal编程技术网

如何编写mysql查询以仅在存在外键时插入值

如何编写mysql查询以仅在存在外键时插入值,mysql,sql,liquibase,Mysql,Sql,Liquibase,我有一个user\u角色表,它有user\u id作为user表中的外键 desc user; +-----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-----

我有一个
user\u角色
表,它有
user\u id
作为
user
表中的外键

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    |                |
+-----------------+--------------+------+-----+---------+----------------+
我想创建一个测试数据,仅当用户id存在时才将值插入
user\u 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抛出了一个错误。有什么方法可以实现这种行为吗?

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

大概是这样的:-

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

您可以将INSERT更改为使用SELECT作为要插入的字段的源,SELECT将检查user表

大概是这样的:-

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

您可以将INSERT更改为使用SELECT作为要插入的字段的源,SELECT将检查user表

大概是这样的:-

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

您可以将INSERT更改为使用SELECT作为要插入的字段的源,SELECT将检查user表

大概是这样的:-

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

如果在您的工作场景中,总是首先添加用户,并且只在稍后的用户角色-考虑更改外键顺序。


在这种情况下,最好使用用户角色表来引用用户表,反之亦然。

< P>如果在您的工作场景中,总是首先添加用户,而只有后来的用户角色考虑更改外键顺序。


在这种情况下,最好使用用户角色表来引用用户表,反之亦然。

< P>如果在您的工作场景中,总是首先添加用户,而只有后来的用户角色考虑更改外键顺序。


在这种情况下,最好使用用户角色表来引用用户表,反之亦然。

< P>如果在您的工作场景中,总是首先添加用户,而只有后来的用户角色考虑更改外键顺序。


在这种情况下,最好让user_role表引用user表,反之亦然。

它会抛出什么错误?在引号块中显示它。您得到了什么错误?错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在“IFWhat error”附近使用的正确语法?在引号块中显示它。您得到了什么错误?错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在“IFWhat error”附近使用的正确语法?在引号块中显示它。您得到了什么错误?错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在“IFWhat error”附近使用的正确语法?在引号块中显示它。您得到了什么错误?错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用“IF”附近的正确语法