Триггерные dow не позволяют мне вставлять данные в mysql

#mysql #triggers

#mysql #триггеры

Вопрос:

я пытаюсь привыкнуть к триггерам. Я создал небольшую базу данных и триггер. Когда я хочу вставить что-то в категорию ship, это не позволяет мне это сделать.Если я сброшу триггер с тем же сообщением, я смогу вставлять значения в таблицу. Я получаю эту ошибку: #1048 — Столбец ‘IMO’ не может быть нулевым, мой код триггера:

 /*ship insert*/
DELIMITER //
CREATE TRIGGER `ship_insert_logs` 
AFTER INSERT ON `ship` 
FOR EACH ROW
BEGIN
DECLARE ship_IMO INTEGER;
SET ship_IMO=new.IMO; 
INSERT INTO ship_logs VALUES (null, concat('A new row is inserted with IMO ', ship_IMO, 'at', 
date_format(now(), '%d-%m-%y %h:%i:%s %p')));
END //
DELIMITER ;
  

и таблица доставки:

 CREATE TABLE ship(      
department_id INTEGER NOT NULL,
IMO BIGINT PRIMARY KEY NOT NULL,
Latitude DOUBLE PRECISION NOT NULL,
Longitude DOUBLE PRECISION NOT NULL,
current_speed DOUBLE PRECISION NOT NULL,
heading VARCHAR (30),
status VARCHAR(30), 
FOREIGN KEY(department_id) REFERENCES department (department_id) ON UPDATE CASCADE
);
  

в то время как таблица ship_logs:

 CREATE TABLE ship_logs(      
IMO BIGINT PRIMARY KEY NOT NULL,
audit_description VARCHAR(500)
);
  

Комментарии:

1. Пожалуйста, добавьте пример вставки для отправки.

2. ВСТАВИТЬ В ЗНАЧЕНИЯ ship(department_id, IMO, широта, Долгота, current_speed, заголовок, статус) (2, 9171448, 1.5915, 104.5291, 0.0, ‘ СИНГАПУР [SG]», «На якоре»);

3. Вы забыли определить ship_logs.IMO как AUTO_INCREMENT .

4. Что вы имеете в виду?

5. Вставка в триггер устанавливает значение imo равным null — это то, что вы хотели сделать? или вы хотели установить для него значение new.imo? или вы хотели, чтобы это был столбец auto_increment?