Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于值插入数据的触发器_Mysql_Triggers_Relationship - Fatal编程技术网

Mysql 基于值插入数据的触发器

Mysql 基于值插入数据的触发器,mysql,triggers,relationship,Mysql,Triggers,Relationship,我们有3张桌子: 穿孔表: ID user_code (columns ) 2 10 雇员人数表: Id user_code(columns ) 5 10 我想要一个触发器,一旦一条新记录插入到Punchs_表中,它将在employees表中搜索相同的用户代码,然后将2个id值插入: Punches-employees-relation_table: ID employees_id punches_id 1 2 5 更新

我们有3张桌子:

穿孔表:

ID  user_code (columns )
2   10
雇员人数表:

Id  user_code(columns )
5   10
我想要一个触发器,一旦一条新记录插入到Punchs_表中,它将在employees表中搜索相同的用户代码,然后将2个id值插入:

Punches-employees-relation_table:

ID  employees_id     punches_id    
1   2                 5
更新 谢谢你的回答,我得到1064错误,我想我有MariaDB和代码是不好的MariaDB

以下是我试图做的:首先,我想说,在第一次我没有把确切的表和字段的名称

因此,要把事情整理好:第一个表名是123_employees_punchs

Fields:
id (char(36))
user_code (int(255))
第二个表是abc12_员工_cstm

Fields:
id_c (char(36))
usercode_c (varchar(255))
第三个表是abc12\U员工\U a123\U员工\U打孔\U 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)
目标是有一个触发器,一旦将新记录插入123_employees_punchs表中,就可以根据插入的新用户代码和匹配的用户代码从abc12_employees_cstm表中获取匹配的id_c

然后将插入abc12_employees_a123_employees_punchs_1_c表(abc12_employees_a123_employees_punchs_1abc12_employees_ida(varchar(36))和abc12_employees4863 punchs_idb(varchar(36))中的两个字段

到目前为止,我试过:

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行“”附近使用的正确语法


您的表和字段看起来不正确,并且您没有提供create table,因此您必须检查下面的表和语句是否有效

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 ;
员工|打孔| id -----------: | ---------: 1 | 3
DBFIDLE

您好,谢谢您的回答,我收到了1064错误,我想我有MariaDB,代码对MariaDB不好,有人能帮我吗?我在回答中还说,您应该单独测试所有查询。有人能帮我吗?我知道我一开始问的问题不正确,因为我是新来的。正如您所看到的我在我的回答中,我添加了一个示例,这样您就可以看到r’一切正常。我运行了所有脚本,并且都进行得很顺利,直到我尝试了创建触发器脚本,但我得到了#1064-您的SQL语法有一个错误;请查看与您的MariaDB服务器版本对应的手册,在第6行的“”附近使用正确的语法(选择版本()给出了5.5.64-1)
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