我有下面两个表。我在雇员表上插入触发器后写了。如果我在employees表中插入记录,它将在employee_audits表中插入记录。
两个表都具有主键列(id)。假设您尝试插入在employees表中不存在但在employee_audits表中存在的记录ID值,则显示错误重复键值违反唯一约束“ employee_audits_pkey”,并且它没有在employees表中插入记录。两次交易均失败。但是我想在雇员表中插入记录。
CREATE TABLE employees( id SERIAL PRIMARY KEY, first_name VARCHAR(40) NOT NULL, last_name VARCHAR(40) NOT NULL ); CREATE TABLE employee_audits ( id SERIAL PRIMARY KEY, last_name VARCHAR(40) NOT NULL, changed_on TIMESTAMP(6) NOT NULL )
触发功能:
CREATE OR REPLACE FUNCTION log_last_name_changes() RETURNS trigger AS $BODY$ BEGIN INSERT INTO employee_audits(last_name,changed_on) VALUES(NEW.last_name,now()); RETURN NEW; END; $BODY$ LANGUAGE plpgsql VOLATILE
触发器定义:
CREATE TRIGGER last_name_changes AFTER INSERT ON employees FOR EACH ROW EXECUTE PROCEDURE log_last_name_changes();
INSERT INTO employees (first_name, last_name) VALUES ('John', 'Doe'); SELECT * FROM EMPLOYEES
id first_name last_name 1 "John" "Doe"
SELECT * FROM EMPLOYEE_AUDITS
ID last_name CHANGED_ON 1 "Doe" "2019-12-27 17:21:13.934"
手动插入第二张桌子
insert into employee_audits values(2,'banu','2019-12-27 17:21:13.934')
手动插入第一张桌子
INSERT INTO employees (first_name, last_name) VALUES ('David', 'Raj');
错误的重复键值违反了唯一约束“ employee_audits_pkey”
是否可以在雇员表中插入记录?
我有下面两个表。我在雇员表上插入触发器后写了。如果我在employees表中插入记录,它将在employee_audits表中插入记录。两个表都有主键...
如果有serial
列,则永远不要手动为其提供值。手动为serial
提供值将使该序列后面的[[not