2016-05-31 45 views
0

我的触发器代码有问题。
我写了我的触发器之后,我写了Insert来测试触发器。但我的插入错误为插入失败,因为我的触发器mysql

错误代码:1109。未知表employees在字段列表中。

如果我在触发器之前插入插件,一切都很完美。但我希望这个插入来测试触发器。

drop database if exists kontrolno; 
    create database kontrolno; 
    use kontrolno; 
    CREATE TABLE departments(
    id TINYINT UNSIGNED PRIMARY KEY, 
    name CHAR(12) NOT NULL, 
    min_salary SMALLINT UNSIGNED NOT NULL, 
    max_salary SMALLINT UNSIGNED NOT NULL 
    ) ENGINE=InnoDB; 
    CREATE TABLE employees(
    id SMALLINT UNSIGNED PRIMARY KEY, 
    name VARCHAR(255) NOT NULL, 
    salary SMALLINT UNSIGNED NOT NULL, 
    department_id TINYINT UNSIGNED, 
    constraint FOREIGN KEY (department_id) 
    REFERENCES departments(id) 
    ) ENGINE=InnoDB; 

    insert into departments(id,name,min_salary,max_salary) 
    values(1,"qa", 800,2000), 
    (2,"jd",1200,3500); 


    DROP TRIGGER if exists checkSalary; 
    delimiter | 
    create trigger checkSalary before Insert on employees 
    for each row 
    begin 

    if(employees.salary>max_salary OR employees.salary<min_salary) 
    then signal sqlstate '45000' set MESSAGE_TEXT="the salary is not valide"; 
    end if; 
    end; 
    | 
    delimiter ; 

    insert into employees(id,name,salary,department_id) 
    values(1,"ivan", 200,1); 
+0

为什么你使用'如果(employees.salary> MAX_SALARY OR employees.salary Sandeep

回答

0

你的触发代码有错误。
触发代码应该是:

DROP TRIGGER if exists checkSalary; 
delimiter | 
create trigger checkSalary before Insert on employees 
for each row 
begin 

if(new.salary>(select max_salary from departments where id=new.department_id) 
    OR 
    new.salary<(select min_salary from departments where id=new.department_id)) 
then signal sqlstate '45000' set MESSAGE_TEXT="the salary is not valid"; 

end if; 
end; 
| 
delimiter ; 
+0

非常感谢! –