không cần tạo một bảng khác và max () sẽ gặp sự cố theo giá trị auto_increment của bảng, hãy làm như sau:
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
Tôi khai báo biến next_id vì thường nó sẽ được sử dụng theo một số cách khác (*), nhưng bạn có thể thực hiện ngay new.field =(select ...)
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
Ngoài ra trong trường hợp của (trường chuỗi SELECT), bạn có thể sử dụng giá trị CAST;
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
(*) Để tự động đặt tên cho hình ảnh:
SET NEW.field = CONCAT('image_', next_id, '.gif');
(*) Để tạo hàm băm:
SET NEW.field = CONCAT( MD5( next_id ) , MD5( FLOOR( RAND( ) *10000000 ) ) );