我们有3张桌子:
打孔表:
ID user_code (columns )
2 10
Employees_table:
Id user_code(columns )
5 10
我想要一个触发器,一旦将新记录插入punches_table,它将在employees表中搜索相同的user_code,然后将两个id值插入:
Punches-employees-relation_table:
ID employees_id punches_id
1 2 5
感谢您的回答,我收到1064错误,我猜我有MariaDB,并且代码对MariaDB不利。
这是我要尝试的操作:首先,我想说的是,我第一次没有输入确切的表和字段名称。
因此要整理一下:第一个表名称是a123_employees_punches
Fields:
id (char(36))
user_code (int(255))
第二个表是abc12_employees_cstm
Fields:
id_c (char(36))
usercode_c (varchar(255))
第三个表是abc12_employees_a123_employees_punches_1_c
fields:
abc12_employees_a123_employees_punches_1abc12_employees_ida (varchar(36))
abc12_empl4863punches_idb (varchar(36))
环境:
Server: Localhost via UNIX socket
Server type: MariaDB
Server version: 5.5.64-MariaDB - MariaDB Server
Protocol version: 10
User: root@localhost
Server charset: UTF-8 Unicode (utf8)
目标是创建一个触发器,一旦将新记录插入到a123_employees_punches表中,即可根据插入的新user_code和匹配的usercode_c从abc12_employees_cstm表中获取匹配的id_c。
然后将其插入abc12_employees_a123_employees_punches_1_c表(abc12_employees_a123_employees_punches_1abc12_employees_ida(varchar(36))和abc12_empl4863punches_idb(varchar(36)))的2个字段中
到目前为止,我已经尝试过:
CREATE TRIGGER relate_punch_to_employee AFTER INSERT on a123_employees_punches
FOR EACH ROW
BEGIN
SELECT id_c INTO @id FROM a123_employees_punches_cstm WHERE usercode_c = NEW. user_code ;
INSERT into abc12_employees_a123_employees_punches_1_c (abc12_employees_a123_employees_punches_1abc12_employees_ida, abc12_empl4863punches_idb) VALUES (@id, NEW.id);
END$$
但是它给了我以下错误:
1064-您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在第4行的''附近使用
答案 0 :(得分:1)
您的表和字段看起来不正确,并且您未提供创建表,因此您必须检查下面的表和语句是否有效
DELIMITER $$
CREATE TRIGGER after_punches_table_insert
AFTER INSERT
ON punches_table
FOR EACH ROW
BEGIN
SELECT Id INTO @id
FROM Employees_table
WhERE user_code = NEW. user_code ;
INSERT INTO Punches_employees_relation_table (employees_id, punches_id)
VALUES(NEW.ID,@id);
END$$
DELIMITER ;
select version();
| version() | | :-------------------------------------- | | 10.3.16-MariaDB-1:10.3.16+maria~stretch |
CREATE TABLE Punches_employees_relation_table ( `employees_id` INTEGER, `punches_id` INTEGER );
✓
CREATE TABLE Employees_table ( `Id` INTEGER, `user_code` INTEGER );
✓
INsERT INTO Employees_table ( `Id` , `user_code` ) VALUES (1,100);
✓
SELECT * FROM Employees_table;
Id | user_code -: | --------: 1 | 100
CREATE TABLE punches_table ( `ID` INTEGER, `user_code` INTEGER );
✓
CREATE TRIGGER after_punches_table_insert AFTER INSERT ON punches_table FOR EACH ROW BEGIN SET @id2 = NEW.user_code; SELECT Id INTO @id FROM Employees_table WhERE user_code = NEW.user_code ; INSERT INTO Punches_employees_relation_table (employees_id, punches_id) VALUES(@id,NEW.ID); END;
✓
InsERT punches_table (ID,user_code) VALUES (3,100);
✓
SELECT * FROM Punches_employees_relation_table;
employees_id | punches_id -----------: | ---------: 1 | 3
db <>提琴here