MySQL триггер - имя таблицы триггеров, интерпретируемое как поле - PullRequest
0 голосов
/ 30 января 2019

У меня проблема с триггером, который я поместил в базу данных, которую я строю.Это единственный триггер в базе данных.Вот две таблицы, которые используются.

Таблица клиента

create table client (
    clientNum INT(5) not null auto_increment,
    clientName TEXT(30) not null,
    clientEmail VARCHAR(64) not null,
    clientGender CHAR(1) not null,
    clientDOB DATE not null,
    clientAddress TEXT(50),
    clientPhone VARCHAR(12) not null,
    hasInsurance CHAR(1) not null,
    clientBalanceOwed DECIMAL(10,2),
    clientLastDateVisited DATE,
    clientNextVisitDate DATE,
    primary key (clientNum));

Таблица страхования

create table insurance(
    insuranceNum INT(5) not null auto_increment,
    cardNum INT(16),
    policyNum INT(6),
    policyHolder TEXT(30),
    clientNum INT(5),
    primary key (insuranceNum),
    foreign key (clientNum) references client(clientNum));

Идея следующего триггера состоит в том, чтобы создать строку страхования только при добавлении клиента в базу данных, котораяимеет значение для поля hasInsurance, равное y.Затем, как только этот клиент был добавлен, создайте новую строку страхования с установленным значением clientNum для clientNum, который был только что добавлен.

Триггер

delimiter $$
create trigger New_Insurance_Row after insert on client
for each row
begin
if(client.hasInsurance = 'y') then
insert into insurance (clientNum) values (NEW.clientNum);
end if;
end$$

Все до этого момента работает какдо тех пор, пока вы не попытаетесь вставить нового клиента в таблицу и вызвать триггер.Как только я пытаюсь добавить следующую строку кода:

Оператор вставки

insert into client(clientName, clientEmail, clientGender, clientDOB, 
clientAddress,
clientPhone, hasInsurance, clientBalanceOwed, clientLastDateVisited, 
clientNextVisitDate)
values
('Darcy Watts','dwatts@email.com','m','1996-5-9','Belfast, Charlottetown 
PEI','123-222-3333','y','400.77','2017-8-12','2019-9-6');

Когда я пытаюсь выполнить это, я сталкиваюсь с этой ошибкой:

# 1109 - Неизвестная таблица 'client' в списке полей

Итак, из того, что я узнал за последние несколько часов, эта ошибка обычно возникает, когда вы ставите '`' (backtick) наMySQL считает, что имя переменной или таблицы является частью списка полей или чего-то подобного.Поэтому я изменил триггер, чтобы он стал «клиентом» сам по себе, и у меня все еще есть ошибка.Сбросил старую базу и все.Еще одна вещь, оператор вставки работает сам по себе, если триггер еще не был введен.

Любая помощь будет оценена!Спасибо!

1 Ответ

0 голосов
/ 30 января 2019

Полагаю, ваш hasInsurance должен быть из записи new.

...
if(new.hasInsurance = 'y') then
insert into insurance (clientNum) values (NEW.clientNum);
end if;
...

-

DB Fiddle (предоставлено GMB)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...