У меня есть инструкция INSERT
, которая выглядит следующим образом:
INSERT INTO officer (officer_number,
name,
bank_id)
VALUES ('',
'',
8)
ON DUPLICATE KEY UPDATE officer_number = '',
name = '',
bank_id = 8,
id = LAST_INSERT_ID(id)
Это способ сделать это работает нормально. Он перестал работать, когда я добавил следующий триггер:
CREATE TRIGGER officer_update BEFORE UPDATE ON `officer`
FOR EACH ROW SET NEW.updated_at = NOW(), NEW.created_at = OLD.created_at
Дело не в том, что запись офицера
не вставляется. Просто кажется, что триггер захватывает LAST_INSERT_ID ()
или что-то в этом роде. Я говорю это, потому что следующий выполняемый запрос выглядит так:
INSERT INTO account (import_id,
branch_id,
account_number,
officer_id,
customer_id,
open_date,
maturity_date,
interest_rate,
balance,
opening_balance)
VALUES ('123',
'4567',
'789',
'0', # This is the officer id which is of course invalid
'321',
'1992-04-22',
'2012-05-22',
'0.0123',
'0',
'10000')
Поскольку я выполнил десятки успешных операций импорта с одним и тем же файлом, я не изменил свой код, и теперь мои операции импорта не работают после того, как я добавил это триггер, я должен сделать вывод, что триггер является виновником. У меня была аналогичная ситуация с другой таблицей, и удаление триггера решило проблему.
Итак, мои вопросы:
LAST_INSERT_ID ()
или что-то в этом роде. Я говорю это, потому что следующий выполняемый запрос выглядит так:
INSERT INTO account (import_id,
branch_id,
account_number,
officer_id,
customer_id,
open_date,
maturity_date,
interest_rate,
balance,
opening_balance)
VALUES ('123',
'4567',
'789',
'0', # This is the officer id which is of course invalid
'321',
'1992-04-22',
'2012-05-22',
'0.0123',
'0',
'10000')
Поскольку я выполнил десятки успешных операций импорта с одним и тем же файлом, я не изменил свой код, и теперь мои операции импорта не работают после того, как я добавил это триггер, я должен сделать вывод, что триггер является виновником. У меня была аналогичная ситуация с другой таблицей, и удаление триггера решило проблему.
Итак, мои вопросы:
LAST_INSERT_ID ()
или что-то в этом роде. Я говорю это, потому что следующий выполняемый запрос выглядит так:
INSERT INTO account (import_id,
branch_id,
account_number,
officer_id,
customer_id,
open_date,
maturity_date,
interest_rate,
balance,
opening_balance)
VALUES ('123',
'4567',
'789',
'0', # This is the officer id which is of course invalid
'321',
'1992-04-22',
'2012-05-22',
'0.0123',
'0',
'10000')
Поскольку я выполнил десятки успешных операций импорта с одним и тем же файлом, я не изменил свой код, и теперь мои операции импорта не работают после того, как я добавил это триггер, я должен сделать вывод, что триггер является виновником. У меня была аналогичная ситуация с другой таблицей, и удаление триггера решило проблему.
Итак, мои вопросы:
У меня есть еще один триггер на Offic.created_at
(и во многих других таблицах created_at
s), и я бы предпочел избежать какого-то неудобного решения где у меня есть триггер на created_at
, но DEFAULT CURRENT_TIMESTAMP
на updated_at
. По какой-то причине MySQL допускает только одну автоматическую метку времени для каждой таблицы, поэтому я не могу сделать CURRENT_TIMESTAMP
для обоих created_at
и updated_at
.
Вот это SHOW CREATE TABLE
для офицера
:
CREATE TABLE `officer` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`officer_number` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`bank_id` bigint(20) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `officer_number` (`officer_number`,`name`),
UNIQUE KEY `officer_number_2` (`officer_number`,`bank_id`),
KEY `bank_id` (`bank_id`),
CONSTRAINT `officer_ibfk_1` FOREIGN KEY (`bank_id`) REFERENCES `bank` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=102735 DEFAULT CHARSET=latin1