插入触发器:约束问题

时间:2015-08-15 15:01:16

标签: mysql sql database triggers

我正在尝试在客户订单数据库上创建触发器,其中每个客户都有多个订单,并且每个订单都有多个商品。< / p>

我打算创建一个触发器来确保

  

同一客户所下的所有订单总数不能   超过10000

如何为上述约束创建插入触发器。

这是我提供的示例数据的SQL文件。

 CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
 USE `mydb` ;


CREATE TABLE customers
(`id` int not null auto_increment primary key, `first_name` varchar(64), `last_name`varchar(64) );

INSERT INTO customers(`first_name`, `last_name`)VALUES('Jhon', 'Doe');

CREATE TABLE items
(`id` int not null auto_increment primary key,`item` varchar(64),`price` decimal(19,2));

INSERT INTO items(`item`, `price`)VALUES('Item1', 10.5),('Item2', 25);

CREATE TABLE orders
(`id` int not null auto_increment primary key, `date` date, `customer_id` int,`status` int not null default 1, -- 1 new constraint fk_customer_id foreign key (customer_id) references customers (id));

INSERT INTO orders(`date`, `customer_id`, `status`)VALUES(CURDATE(), 1, 1);

CREATE TABLE order_items(`id` int not null auto_increment primary key, 
 `order_id` int not null, `item_id` int not null, `quantity` decimal(19,3) not null,  `price` decimal(19,3) not null,
constraint fk_order_id foreign key (order_id) references orders (id),
constraint fk_item_id  foreign key (item_id) references items (id));

INSERT INTO order_items(`order_id`, `item_id`, `quantity`, `price`)VALUES
(1, 1, 2, 10.5),(1, 2, 4, 25);

1 个答案:

答案 0 :(得分:0)

此触发器将停止插入 -

CREATE TRIGGER `customer_orders_check`
BEFORE INSERT ON `orders` FOR EACH ROW
BEGIN

IF exists(select count(*) 
    from `orders` a 
    where a.customer_id= NEW.customer_id
    having count(*)>=10000 ) THEN
SET NEW.id = 1 ;
END IF;

END;