如何在mysql中插入新行时使用trigger插入concat值

时间:2014-07-23 07:20:13

标签: mysql

在我的架构中我有两列,我是MySQL新手如何使用mysql中的Computed Column连接列

ordertbl schema

Autoorderid int  auto-increment
Orderid         varchar(45)

我想在插入新行时重写orderid值插入

我已经创建了触发器,但是当我插入行时,此触发器没有触发

insert into order_master(customerID,ItemID,quantity,Unitprice,Total)  values ('07961A','1000',6,5,30)

use ntc_sales; DELIMITER
$$ CREATE TRIGGER order_master_BINS BEFORE INSERT ON order_master FOR EACH ROW 
SET NEW.OrderID = CONCAT('ORD' ,NEW.AutoOrderID) ; end;

创建表格     在这里输入代码

     CREATE TABLE Demo(ID INT   PRIMARY KEY,
     IDwithChar AS 'ORD' + RIGHT('0000000' + CAST(ID AS VARCHAR(10)), 6) PERSISTED,valuevar nvarchar(45)
                 )

这显示mysql中的语法错误如何在mysql

中创建如上面的模式表

1 个答案:

答案 0 :(得分:1)

你无法在MySQL中使用触发器来实现这一点。

  • 在设置自动增量值之前运行BEFORE触发器,因此NEW.AutoOrderID将始终为0.
  • AFTER触发器无法更新与触发时相同的表。

换句话说,不是在INSERT上触发,而是使用在单个事务中执行插入/更新的存储过程创建行可能是继续进行的最佳方式。

编辑:您可以为序列使用单独的表,但这不能保证订单号与AutoOrderID的值相同,只是一个唯一值。

CREATE TABLE order_sequence (
  seq INT PRIMARY KEY AUTO_INCREMENT
);

CREATE TRIGGER order_master_BINS BEFORE INSERT ON order_master 
FOR EACH ROW
BEGIN
  INSERT INTO order_sequence VALUES (0);
  SET NEW.OrderID = CONCAT('ORD', LAST_INSERT_ID());
END

An SQLfiddle to test the alternate solution with