【发布时间】:2021-10-25 09:07:33
【问题描述】:
我正在创建一个有关应用程序商店的信息数据库,我想冒险创建我的第一个触发器,但我的语法中的某些内容失败(我是编程新手)并且终端返回 2014 错误命令不同步.
我把你放在上下文中:我创建了 2 个表,'Empleados'(员工)和 'Empresas'(公司),关系为 N:N,这创建了另一个表,即这些实体之间的关系,即 'TRABAJAN '(工作),在那里,我已经在公司中输入了开始日期(Fecha_inicio)和结束日期(Fecha_fin),而且,我已经在另一列中添加了布尔值,说明它们是否在工作。当我插入数据时,我允许如果它们继续工作,它们有一个 NULL 值。
好吧,我想要的是创建一个触发器,当将工作列的状态从1修改为0时,我将Date_fin列的NULL值修改为当前系统日期的值。
我把代码和我所做的触发尝试留给你:
CREATE DATABASE Info_Tiendas_App2;
USE Info_Tiendas_App2;
CREATE TABLE Empleados (
codEmpleado SMALLINT PRIMARY KEY,
DNI VARCHAR(9) NOT NULL UNIQUE,
NomEmpleado VARCHAR(40) NOT NULL,
Calle VARCHAR(30),
Numero NUMERIC(3,0),
CodPostal NUMERIC(5,0),
CorreoElect VARCHAR(50)
);
CREATE TABLE Empresas (
codEmpresa SMALLINT PRIMARY KEY,
NomEmpresa VARCHAR(50) NOT NULL,
PaisFacturacion VARCHAR(15) NOT NULL,
AnnoCreacion NUMERIC(4,0),
Correo VARCHAR(50),
PagWeb VARCHAR(40)
);
CREATE TABLE TRABAJAN (
codEmpleado SMALLINT,
codEmpresa SMALLINT,
Fecha_inicio DATE,
Fecha_fin DATE,
Trabajando BOOLEAN,
PRIMARY KEY (codEmpleado, codEmpresa),
FOREIGN KEY (codEmpleado) REFERENCES Empleados(codEmpleado)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (codEmpresa) REFERENCES Empresas(codEmpresa)
ON DELETE CASCADE
ON UPDATE CASCADE
);
-- Aquí el trigger
DROP TRIGGER IF EXISTS Mod_fecha_fin;
CREATE TRIGGER Mod_fecha_fin
AFTER UPDATE
ON TRABAJAN
FOR EACH ROW
BEGIN
IF TRABAJAN(Trabajando) = 0
UPDATE INTO TRABAJAN(Fecha_fin) SET Fecha_fin = (NOW())
ELSE
SET Fecha_fin = NULL
END //
为什么会出现这个错误?我需要修改什么?最后一个查询是触发器设计得好不好?
非常感谢大家的帮助和时间,问候
【问题讨论】:
-
IF TRABAJAN(Trabajando) = 0 ???
TRABAJAN是函数吗? -
不,它是一个表,但他的 Trabajando 列具有布尔值
-
请仔细查看查询中如何指定表的列。