Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Können Sie innerhalb einer Anweisung auf den Auto-Increment-Wert in MySQL zugreifen?

Es besteht keine Notwendigkeit, eine weitere Tabelle zu erstellen, und max() wird Probleme mit dem auto_increment-Wert der Tabelle haben, tun Sie dies:

CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
   DECLARE next_id;
   SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl');
   SET NEW.field = next_id;
END

Ich deklariere die next_id-Variable, weil sie normalerweise auf andere Weise verwendet wird (*), aber Sie könnten direkt new.field=(select ...)

tun
CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
   SET NEW.field=(SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl');
END

Auch in Fällen von (SELECT-String-Feld) können Sie den CAST-Wert verwenden;

CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
   SET NEW.field=CAST((SELECT aStringField FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl') AS UNSIGNED);
END

(*) Um ein Bild automatisch zu benennen:

SET NEW.field = CONCAT('image_', next_id, '.gif');

(*) So erstellen Sie einen Hash:

SET NEW.field = CONCAT( MD5( next_id ) , MD5( FLOOR( RAND( ) *10000000 ) ) );