Wie kann ich den Wert einer Spalte mit einem Trigger voreinstellen? Ich benutze MySQL 5.5.54.Voreingestellter Spaltenwert mit einem Trigger
BEARBEITEN. Wenn ich die NOT NULL-Einschränkung für c2 entferne, scheint es zu funktionieren.
mysql> USE mydb;
Database changed
mysql> INSERT INTO t(c1) VALUES(123);
ERROR 1364 (HY000): Field 'c2' doesn't have a default value
mysql>
Schema:
-- 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 ;
Vielleicht könnten Sie einen Standardwert zuweisen, wenn Sie die Tabelle erstellen, so dass die 'INSERT' wird nicht scheitern, und erstellen Sie dann die' TRIGGER' für 'AFTER INSERT ON' den' c2' Wert zu ändern? Nur eine Idee. –
@ VicenteOlivertRiera Ich erwarte, dass das funktionieren würde, aber es ist im Grunde dasselbe wie das Entfernen der NOT NULL-Bedingung. Danke – user1032531
Ich denke auch, dass dieser Bug du als Antwort gepostet hast, als ich versuchte, das Problem auf meiner Box zu reproduzieren und ich konnte es nicht. Könnten Sie bitte etwas aus Neugierde versuchen? Können Sie die Tabelle erstellen, die einen Standardwert für die Spalte c2 definiert? Zum Beispiel: create table t (c1 int Primärschlüssel auto_increment, c2 int not null default 0) engine = innodb; 'Haben Sie immer noch denselben Fehler beim Einfügen neuer Zeilen? Wenn nicht, haben die neuen Zeilen den Wert 0 in der Spalte "c2" oder den vom Trigger gesetzten Wert? Vielen Dank. –