【问题标题】:MYSQL trigger to create idMYSQL 触发器创建 id
【发布时间】:2015-02-23 07:18:19
【问题描述】:

我正在尝试从 2 个字段中创建一个 id

producten_categorien 填充了以下数据:

productcat_id productcat_name productcat_count productcat_code
1 声音 1 SOU
2 灯 1 LIG
3 视觉 1 视觉

我想做一个像VIS0001 (productcat_code + productcat_count)这样的id

我总是把 VIS000 拿回来,你们能帮帮我吗?

下面是我的代码:

使用`jarent`; 分隔符 $$ 创建触发器`klanten_BINS` 在插入“producten”之前 每一行 开始 声明 productcat VARCHAR(45); DECLARE productcatcount INT 无符号; 选择 productcat_code INTO productcat FROM producten_categorien WHERE productcat_id = NEW.product_catid; 选择 productcat_count INTO productcatcount FROM producten_categorien WHERE productcat_id = NEW.product_catid; SET productcatcount = productcatcount + 1; 更新 producten_categorien SET productcat_count = productcatcount WHERE productcat_id = NEW.product_catid; SET NEW.product_id = CONCAT(productcat, LPAD(productcatcount, 4, '0')); 结尾

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    首先,尝试自己维护 id 序列将在负载下惨遭失败。尝试插入新产品的两个会话很容易产生相同的product_id

    至少使用LAST_INSERT_ID(expr)。最好完全放弃它,只使用 AUTO_INCREMENTLAST_INSERT_ID() 作为 id。

    这里所说的是触发器的改进和工作版本:

    DELIMITER $$
    CREATE TRIGGER klanten_BINS
    BEFORE INSERT ON producten
    FOR EACH ROW
    BEGIN
      DECLARE productcat VARCHAR(45);
    
      UPDATE producten_categorien 
         SET productcat_count = LAST_INSERT_ID(productcat_count + 1)
      WHERE productcat_id = NEW.product_catid;
    
      SELECT productcat_code INTO productcat
        FROM producten_categorien 
       WHERE productcat_id = NEW.product_catid;
    
      SET NEW.product_id = CONCAT(productcat, LPAD(LAST_INSERT_ID(), 4, '0'));
    END$$
    DELIMITER ;
    

    这是一个SQLFiddle演示

    进一步阅读:

    【讨论】:

      猜你喜欢
      • 2011-02-03
      • 2016-09-19
      • 2015-03-01
      • 2013-07-16
      • 2013-05-30
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      相关资源
      最近更新 更多