Auto-Inkrement-IDs zurücksetzen.
http://community.spiceworks.com/scripts/show/3042-reset-auto-increment-ids
Update alle Autoinkrement-Spalten in einer Datenbank auf den kleinstmöglichen Wert, basierend auf aktuellen Werten in den Datenbanken. Wir mussten dies tun, nachdem wir eine Datenbank gelöscht hatten.
eine vorbereitete Anweisung innerhalb einer gespeicherten Prozedur verwenden:
drop PROCEDURE if exists reset_autoincrement;
DELIMITER //
CREATE PROCEDURE reset_autoincrement (IN schemaName varchar(255))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE o_name VARCHAR(255);
DECLARE o_table VARCHAR(255);
DECLARE cur1 CURSOR FOR SELECT COLUMN_NAME, TABLE_NAME FROM information_schema.`COLUMNS` WHERE extra LIKE '%auto_increment%' and table_schema=schemaName;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO o_name, o_table;
IF done THEN
LEAVE read_loop;
END IF;
set @qry1 = concat('SELECT MAX(`',o_name,'`) + 1 as autoincrement FROM `',o_table,'` INTO @ai');
PREPARE stmt1 FROM @qry1;
EXECUTE stmt1;
IF @ai IS NOT NULL THEN
SELECT o_name, o_table;
select @qry1;
select @ai;
set @qry2 = concat('ALTER TABLE `',o_table,'` AUTO_INCREMENT = ', @ai);
select @qry2;
PREPARE stmt2 FROM @qry2;
EXECUTE stmt2;
END IF;
END LOOP;
CLOSE cur1;
END //
DELIMITER ;
call reset_autoincrement('my_schema_name');
Klingt wie eine ziemlich solide Antwort für meine Frage! Vielen Dank! – ThinkCode
'PREPARE stmt FROM 'ALTER TABELLE XYZ AUTO_INCREMENT =?'' Fehler für mich erzeugen :( – bor
@ T30 was ist Ihr Fehler? – Beetle