दूसरी तालिका बनाने की कोई आवश्यकता नहीं है, और तालिका के auto_increment मान के अनुसार अधिकतम () में समस्याएँ होंगी, यह करें:
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
मैं अगला_आईडी वैरिएबल घोषित करता हूं क्योंकि आमतौर पर इसका इस्तेमाल किसी अन्य तरीके से किया जाएगा (*), लेकिन आप सीधे कर सकते हैं 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
इसके अलावा (चयन स्ट्रिंग फ़ील्ड) के मामलों में आप 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
(*) इमेज को अपने आप नाम देने के लिए:
SET NEW.field = CONCAT('image_', next_id, '.gif');
(*) हैश बनाने के लिए:
SET NEW.field = CONCAT( MD5( next_id ) , MD5( FLOOR( RAND( ) *10000000 ) ) );