我有一个user_role
表,该表已user_id
被表引用为foreign_key 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 | |
+-----------------+--------------+------+-----+---------+----------------+
我想创建一个测试数据,user_role
仅在user_id存在时才将值插入表中。可以通过唯一键“ 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';
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句