mysql 如何在插入[重复]后更新同一行

jexiocij  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(55)

此问题在此处已有答案

MySQL - Trigger for updating same table after insert(6个回答)
21天前关闭
此帖子于21天前编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
在触发器的帮助下,我必须修改刚刚插入的行的一个列(id_encode),以存储在. insertion时生成的id值(主键和自动递增)。但是我必须在id_encode列中输入base 36中的id值。
举例来说:
| ID| id_encode|
| --|--|
| 1 | 1 |
| 2467 |1WJ|
| 256845 |5I6L|
因此,我设置了一个AFTER触发器,以便生成NEW.id值

CREATE TRIGGER gen_id_encode AFTER INSERT ON book FOR EACH ROW
    BEGIN
        DECLARE new_id INT;
        SET new_id = NEW.id;
        UPDATE book SET id_encode = UPPER(CONV(new_id, 10, 36)) WHERE id = new_id;
    END

字符串
最后,我有一个例外:
执行查询时发生异常:SQLSTATE[HY 000]:一般错误:1442无法更新存储函数/触发器中的表“book”,因为它已被调用此存储函数/触发器的语句使用。
我做了一些测试(临时)修改SQL模式。没有成功。
你有什么想法吗?
这是我桌上书:

CREATE TABLE `book` (
  `id` int NOT NULL AUTO_INCREMENT,
  `id_encode` varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `UNIQ_694309E4D80E6B01` (`id_encode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

vmjh9lq9

vmjh9lq91#

使用BEFORE INSERT似乎可以做你想做的事情:

CREATE TABLE book (
  id INT AUTO_INCREMENT PRIMARY KEY,
  id_encode VARCHAR(20) 
  );

CREATE TRIGGER ge_id_encode BEFORE INSERT on book 
FOR EACH ROW
BEGIN
  SET NEW.id_encode=UPPER(CONV(NEW.id,10,36));
END

字符串
参见:DBFIDDLE
| ID| id_encode|
| --|--|
| 1 | 1 |
| 31 |V|
| 61 |1P|
| 391 |AV|
| 421 |BP|
| 9435 |7A3|

相关问题