2016-05-31 11 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

ありがとうございました! –

関連する問題