Mysql 基于值插入数据的触发器
我们有3张桌子: 穿孔表: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 更新
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