【问题标题】:auto insert with mysql trigger使用 mysql 触发器自动插入
【发布时间】:2020-04-20 03:59:41
【问题描述】:

嗨,我有关于 mysql 触发器的问题,我有如下表。当用户插入trip_id、add_type、值时,如何使用触发器在add_id字段上自动插入。

CREATE TABLE `additional` ( `trip_num` VARCHAR(8) NOT NULL ,  
                            `add_id` VARCHAR(3) NOT NULL ,  
                            `add_type` VARCHAR(10) NOT NULL ,  
                            `value` VARCHAR(5) NOT NULL );
INSERT INTO `additional` (`trip_num`, `add_id`, `add_type`, `value`) VALUES 
('TRP0001', 'UM1', 'type 1', '50'), 
('TRP0001', 'UM2', 'type 1', '27'), 
('TRP0001', 'UB1', 'type 2', '250'), 
('TRP0002', 'UM1', 'type 1', '32'), 
('TRP0002', 'UB1', 'type 2', '300'), 
('TRP0002', 'UB2', 'type 2', '120'), 
('TRP0002', 'UL1', 'type 3', '120');

here the table

【问题讨论】:

  • 请提供您尝试过的内容以及要插入的示例数据
  • 用文字 CREATE TABLE + INSERT INTO 脚本替换照片,并以文字表格形式显示所需的结果。
  • @Akina 我刚刚更新了文本 CRETAE TABLE + INSERT
  • 你的意思是那些触发器在同一张表上执行?
  • 嗨@RajenRaiyarela 我想在我插入其他字段时自动添加序列号,但 add_id 有这样的条件:如果 add_type = "type 1" then set add_id "UM" if add_type = "type 2" then设置 add_id "UB" 如果 add_type = "type 2" 然后设置 add_id "UL"

标签: mysql sql database-trigger


【解决方案1】:
CREATE TRIGGER tr_bi
BEFORE INSERT 
ON additional
FOR EACH ROW
BEGIN
DECLARE counter INT;
SELECT 1 + COUNT(*) 
    INTO counter 
    FROM additional 
    WHERE trip_num = NEW.trip_num
      AND add_type = NEW.add_type;
SET NEW.add_id = CONCAT( CASE NEW.add_type WHEN 'type 1' THEN 'UM'
                                           WHEN 'type 2' THEN 'UB'
                                           WHEN 'type 3' THEN 'UL'
                                                         ELSE '??' END,
                         counter );
END;

fiddle

PS。我已经从 INSERT 中删除了add_id,这导致将 DEFAULT 值添加到 CREATE TABLE 中。您可以还原并为该字段分配任何值 - 它将被无条件覆盖。

【讨论】:

  • 我发现这样的错误 CREATE TRIGGER tr_bi BEFORE INSERT ON additional FOR EACH ROW BEGIN DECLARE counter INT MySQL 说:文档 #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 6 行的 '' 附近使用的正确语法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
相关资源
最近更新 更多