触发根据值插入数据

时间:2020-03-02 21:12:17

标签: mysql triggers relationship

我们有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行的''附近使用

1 个答案:

答案 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