Как задать значение столбца с помощью триггера? Я использую MySQL 5.5.54.Предустановленное значение столбца с помощью триггера
EDIT. Если я удалю ограничение NOT NULL на c2, это сработает.
mysql> USE mydb;
Database changed
mysql> INSERT INTO t(c1) VALUES(123);
ERROR 1364 (HY000): Field 'c2' doesn't have a default value
mysql>
схема:
-- MySQL Script generated by MySQL Workbench
-- 02/21/17 08:26:27
-- Model: New Model Version: 1.0
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `mydb` ;
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`t`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`t` (
`c1` INT NOT NULL AUTO_INCREMENT,
`c2` INT NOT NULL,
PRIMARY KEY (`c1`))
ENGINE = InnoDB;
SET [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;
USE `mydb`;
DELIMITER $$
USE `mydb`$$
CREATE TRIGGER `t_BINS` BEFORE INSERT ON `t` FOR EACH ROW
begin
SET NEW.c2=321;
end$$
DELIMITER ;
Возможно, вы могли бы присвоить значение по умолчанию при создании таблицы, поэтому 'INSERT' не подведет, а затем создать' 'TRIGGER' для AFTER INSERT ON' изменить' c2' значение? Просто идея. –
@VicenteOlivertRiera Я ожидаю, что это сработает, но это фактически то же самое, что удаление ограничения NOT NULL. Спасибо – user1032531
Я также думаю, что ошибка, которую вы опубликовали как ответ, поскольку я пытался воспроизвести проблему на моей коробке, и я не мог. Не могли бы вы попробуете одну вещь ради любопытства? Можете ли вы создать таблицу, определяющую значение по умолчанию для столбца c2? Например, 'create table t (c1 int primary key auto_increment, c2 int not null default 0) engine = innodb;' У вас все еще такая же ошибка при вставке новых строк? Если нет, задайте ли новые строки значение 0 в столбце 'c2' или значение, заданное триггером? Благодарю. –