如何编写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”附近的正确语法