数据库中,可以用触发器来实现对insert插入时判断是否已存在数据,是则修改,否则新增,但是在Mysql中,触发器在insert时不能同时执行同一张表的更新操作,所以我们使用replace命令来实现插入。
replace into 会根据唯一索引或主键进行判断,如果存在则覆盖写入字段,如果不存在则新增。
首先需要创建insert触发器来判断是否存在图书,如果存在,则需要把新增的数量加上原库存的数量。
怎么写触发器
在 MySQL 中,触发器是在指定的数据库表上触发执行的特殊的存储过程。触发器可以用来在表上的插入、更新或删除操作发生时执行一些预先定义的动作。
下面是如何创建一个在 books 表上的 INSERT 操作时触发的触发器的示例:
DELIMITER $$
CREATE TRIGGER update_books_quantity
AFTER INSERT ON books
FOR EACH ROW
BEGIN
UPDATE books SET quantity = quantity + NEW.quantity
WHERE id = NEW.id;
END $$
DELIMITER ;
这个触发器会在 books 表上的每一次 INSERT 操作后执行,并且会更新所有新插入行的 quantity 字段,将它们加上新行的 quantity 字段的值。
注意:在 MySQL 中,触发器不能执行对触发它的表进行修改的操作,所以在上面的触发器中,我们使用了一个常见的技巧来避免这个限制,即使用一个 SELECT 语句来更新表中的行。
你可以使用触发器来在插入记录时判断是否已存在数据,如果存在则修改,否则新增。下面是使用触发器和 REPLACE 命令来实现对应功能的示例:
CREATE TRIGGER update_book_stock
AFTER INSERT ON books
FOR EACH ROW
BEGIN
IF EXISTS (SELECT * FROM books WHERE id = NEW.id) THEN
UPDATE books SET stock = stock + NEW.stock WHERE id = NEW.id;
ELSE
REPLACE INTO books (id, name, author, stock)
VALUES (NEW.id, NEW.name, NEW.author, NEW.stock);
END IF;
END