ฉันจะรีเซ็ตAUTO_INCREMENT
ของสนามหรือไม่?
ฉันต้องการที่จะเริ่มนับจาก1
อีกครั้ง
TRUNCATE TABLE yourTableName;
ฉันจะรีเซ็ตAUTO_INCREMENT
ของสนามหรือไม่?
ฉันต้องการที่จะเริ่มนับจาก1
อีกครั้ง
TRUNCATE TABLE yourTableName;
คำตอบ:
คุณสามารถรีเซ็ตตัวนับด้วย:
ALTER TABLE tablename AUTO_INCREMENT = 1
สำหรับ InnoDB คุณไม่สามารถตั้งauto_increment
ค่าต่ำกว่าหรือเท่ากับดัชนีสูงสุดในปัจจุบัน (อ้างจากViralPatel ):
โปรดทราบว่าคุณไม่สามารถรีเซ็ตตัวนับเป็นค่าที่น้อยกว่าหรือเท่ากับค่าใด ๆ ที่ใช้ไปแล้ว สำหรับ MyISAM หากค่าน้อยกว่าหรือเท่ากับค่าสูงสุดในปัจจุบันในคอลัมน์ AUTO_INCREMENT ค่าจะถูกรีเซ็ตเป็นค่าสูงสุดในปัจจุบันบวกหนึ่ง สำหรับ InnoDB หากค่าน้อยกว่าค่าสูงสุดปัจจุบันในคอลัมน์จะไม่มีข้อผิดพลาดเกิดขึ้นและค่าลำดับปัจจุบันจะไม่เปลี่ยนแปลง
ดูวิธีการรีเซ็ต MySQL AutoIncrement โดยใช้ค่า MAX จากตารางอื่น เกี่ยวกับวิธีรับค่าที่ยอมรับได้แบบไดนามิก
circular reference
curcular reference
อะไร
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
ฉันคิดว่ามันจะทำ
UPDATE
จะอัปเดตค่าทั้งหมดในid
คอลัมน์
ง่ายๆเช่นนี้
ALTER TABLE tablename AUTO_INCREMENT = value;
การอ้างอิง: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
หมายถึงการตั้งค่าเป็นค่าเริ่มต้น ... เพื่อให้คุณสามารถแทนที่ "ค่า" โดย 1
มีวิธีที่ง่ายมากกับ phpmyadmin ภายใต้แท็บ "การดำเนินการ" คุณสามารถตั้งค่าในตัวเลือกตารางโดยอัตโนมัติเพิ่มจำนวนที่คุณต้องการ
ทางออกที่ดีที่สุดที่เหมาะกับฉัน:
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
มันเร็วใช้ได้กับ innoDB และฉันไม่จำเป็นต้องรู้ค่าสูงสุดในปัจจุบัน! วิธีนี้ตัวนับการเพิ่มอัตโนมัติจะรีเซ็ตและจะเริ่มโดยอัตโนมัติจากค่าสูงสุดที่มีอยู่
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
ในขณะที่ALTER TABLE tablename AUTO_INCREMENT = 1
ไม่ได้
คำตอบที่ให้คะแนนสูงสุดสำหรับคำถามนี้ทุกคนขอแนะนำ "แก้ไข yourtable AUTO_INCREMENT = ค่า" อย่างไรก็ตามสิ่งนี้ใช้ได้เฉพาะเมื่อvalue
มีการเปลี่ยนแปลงมากกว่าค่าสูงสุดปัจจุบันของคอลัมน์การสร้างอัตโนมัติ ตามเอกสาร MySQL 8 :
คุณไม่สามารถรีเซ็ตตัวนับเป็นค่าที่น้อยกว่าหรือเท่ากับค่าที่ใช้งานอยู่ในปัจจุบัน สำหรับทั้ง InnoDB และ MyISAM หากค่าน้อยกว่าหรือเท่ากับค่าสูงสุดในคอลัมน์ AUTO_INCREMENT ปัจจุบันค่าจะถูกรีเซ็ตเป็นค่าคอลัมน์ AUTO_INCREMENT สูงสุดในปัจจุบันบวกหนึ่ง
โดยพื้นฐานแล้วคุณสามารถแก้ไข AUTO_INCREMENT เพื่อเพิ่มมูลค่าของคอลัมน์การสร้างอัตโนมัติไม่รีเซ็ตเป็น 1 เนื่องจาก OP ถามในส่วนที่สองของคำถาม สำหรับตัวเลือกที่ช่วยให้คุณตั้งจริง AUTO_INCREMENT ลงจากสูงสุดปัจจุบันจะดูที่สั่งซื้อใหม่ / การตั้งค่าที่เพิ่มขึ้นรถยนต์คีย์หลัก
การเพิ่มการอัปเดตเนื่องจากฟังก์ชันการทำงานเปลี่ยนไปใน MySQL 5.6 ในฐานะของ MySQL 5.6 คุณสามารถใช้ ALTER TABLE อย่างง่าย ๆ กับ InnoDB:
ALTER TABLE tablename AUTO_INCREMENT = 1;
เอกสารได้รับการอัพเดตเพื่อสะท้อนสิ่งนี้:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
การทดสอบของฉันยังแสดงให้เห็นว่าตารางไม่ได้คัดลอกค่าเพียงแค่เปลี่ยน
มีตัวเลือกที่ดีในวิธีการตั้งค่าคอลัมน์ MySQL ใหม่อัตโนมัติ
โปรดทราบว่าALTER TABLE tablename AUTO_INCREMENT = value;
ไม่สามารถใช้งานกับ InnoDB ได้
DELETE
(หรือROLLBACK
) จะไม่กู้คืนรหัส ข้อยกเว้นหนึ่ง: หลังจากที่มีการรีสตาร์ท (หรือความผิดพลาด) รหัสต่อไปคือการคำนวณจะเป็นMAX(id)+1
จึงมีประสิทธิภาพการกู้คืนรหัสลบที่สิ้นสุด ข้อยกเว้น: MySQL 8.0 ปล่อยรหัสเหล่านั้นไม่ได้ใช้
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
ฉันใช้สิ่งนี้ในสคริปต์ของฉันบางส่วน, ฟิลด์ id ถูกดร็อปจากนั้นเพิ่มกลับด้วยการตั้งค่าก่อนหน้า, ฟิลด์ที่มีอยู่ทั้งหมดในตารางฐานข้อมูลจะเต็มไปด้วยค่าการเพิ่มอัตโนมัติใหม่, ซึ่งควรทำงานกับ InnoDB
โปรดทราบว่าเขตข้อมูลทั้งหมดในตารางจะถูกนับใหม่และจะมีรหัสอื่น ๆ !!!
คุณสามารถใช้TRUNCATE
ตารางไวยากรณ์ดังนี้:
TRUNCATE TABLE table_name
ระวัง!! TRUNCATE TABLE your_table
จะลบทุกอย่างในของคุณyour_table
!!
TRUNCATE
จะลบแถวทั้งหมดของคุณในตารางที่ระบุด้วย!
TRUNCATE
จะรีเซ็ตauto_increment
ฟิลด์ด้วยหรือไม่ กรณีใช้ของฉันคือการล้างข้อมูลเก่าในตารางและเริ่มรหัสจาก 1 อีกครั้งสำหรับข้อมูลใหม่ (ลองนึกภาพตารางการล้างสำหรับการใช้งานที่เหมาะสมหลังจากการทดสอบเสร็จสมบูรณ์) ฉันคิดว่าฉันจะต้องไปDROP
ทั้งโต๊ะและCREATE
อีกครั้ง
auto_increment
ค่าใช้แทนDELETE FROM
TRUNCATE
มันเป็นตารางที่ว่างเปล่า:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
หากคุณมีข้อมูล แต่ต้องการเก็บไว้เป็นระเบียบฉันขอแนะนำให้ใช้สิ่งนี้:
ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);
นี่คือวิธีแก้ไขปัญหาของฉัน แต่ฉันจะไม่แนะนำให้ทำเช่นนี้หากคอลัมน์ของคุณมีข้อ จำกัด หรือมีการเชื่อมต่อเป็น foreign key ไปยังตารางอื่น ๆ เนื่องจากจะมีผลเสียหรือจะไม่ทำงาน
ALTER TABLE tbl_name DROP COLUMN column_id
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
มันใช้งานได้ดี!
ในฐานะของ MySQL 5.6 วิธีการด้านล่างใช้งานได้เร็วขึ้นเนื่องจากDDL ออนไลน์ (หมายเหตุalgorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
คุณสามารถตัดทอนตารางเพื่อรีเซ็ตลำดับ
TRUNCATE TABLE TABLE_NAME
ฉันพยายามเปลี่ยนตารางและตั้งค่า auto_increment เป็น 1 แต่ไม่ได้ผล ฉันตัดสินใจที่จะลบชื่อคอลัมน์ที่ฉันเพิ่มขึ้นแล้วสร้างคอลัมน์ใหม่ด้วยชื่อที่คุณต้องการและตั้งคอลัมน์ใหม่นั้นให้เพิ่มขึ้นจากการโจมตี
ตัวนับการเพิ่มอัตโนมัติสำหรับตารางสามารถตั้งค่าได้อีกสองวิธี:
โดยการดำเนินการแบบสอบถามเช่นเดียวกับคนอื่น ๆ อธิบายแล้ว:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
การใช้ Workbench หรือเครื่องมือออกแบบฐานข้อมูลภาพอื่น ๆ ฉันจะแสดงใน Workbench ว่าเป็นอย่างไร - แต่ไม่ควรแตกต่างกันมากในเครื่องมืออื่นเช่นกัน โดยคลิกขวาบนตารางที่ต้องการและเลือกAlter table
จากเมนูบริบท ที่ด้านล่างคุณสามารถเห็นตัวเลือกที่มีทั้งหมดสำหรับการเปลี่ยนแปลงตาราง เลือกOptions
และคุณจะได้รับแบบฟอร์มนี้:
จากนั้นเพียงตั้งค่าที่ต้องการในฟิลด์Auto increment
ตามที่แสดงในภาพ โดยทั่วไปจะดำเนินการค้นหาที่แสดงในตัวเลือกแรก
หากต้องการอัปเดตล่าสุดพร้อมรหัสเดียว
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
แก้ไขตาราง tablename AUTO_INCREMENT = 1
ฉัน googled และพบคำถามนี้ แต่คำตอบที่ฉันต้องการจริงๆตรงตามเกณฑ์สองข้อ:
เนื่องจากฉันไม่พบสิ่งที่ฉันต้องการที่นี่ฉันจึงได้คำตอบจากคำตอบที่หลากหลายและแบ่งปันได้ที่นี่
สิ่งที่ควรทราบ:
id
มีประเภทเป็นint
คีย์หลักสร้างกระบวนงานที่เก็บไว้เช่นนี้:
DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN
SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
PREPARE stmt FROM @get_next_inc;
EXECUTE stmt;
SELECT @next_inc AS result;
DEALLOCATE PREPARE stmt;
set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
PREPARE stmt FROM @alter_statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
จากนั้นเรียกใช้
ก่อนเรียกใช้จะมีลักษณะเช่นนี้เมื่อคุณดูใน Stored Procedure ในฐานข้อมูลของคุณ
เมื่อฉันเรียกใช้ฉันเพียงเลือกกระบวนงานที่เก็บไว้แล้วกดเรียกใช้ตัวเลือก
หมายเหตุ: ส่วนของตัวคั่นมีความสำคัญ ดังนั้นหากคุณคัดลอกและวางจากคำตอบที่เลือกสูงสุดในคำถามนี้พวกเขามีแนวโน้มที่จะไม่ทำงานด้วยเหตุผลนี้
หลังจากที่ฉันเรียกใช้แล้วฉันควรเห็นขั้นตอนการจัดเก็บ
หากคุณต้องการเปลี่ยนขั้นตอนการจัดเก็บคุณต้องลบขั้นตอนการจัดเก็บจากนั้นเลือกเพื่อเรียกใช้อีกครั้ง
คราวนี้คุณสามารถใช้การสืบค้น MySQL ปกติได้
call reset_autoincrement('products');
มีพื้นเพมาจากบันทึกการสืบค้น SQL ของฉันเองในhttps://simkimsia.com/library/sql-queries/#mysql-reset-autoincและปรับใช้สำหรับ StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
ลองเรียกใช้แบบสอบถามนี้
ALTER TABLE tablename AUTO_INCREMENT = value;
หรือลองใช้แบบสอบถามนี้เพื่อเพิ่มการรีเซ็ตอัตโนมัติ
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
และตั้งค่าการเพิ่มอัตโนมัติแล้วเรียกใช้แบบสอบถามนี้
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
ฉันขอแนะนำให้คุณไปที่ Query Browser และทำสิ่งต่อไปนี้:
Auto_increment ควรรีเซ็ตเป็นหนึ่งเมื่อคุณป้อนแถวใหม่ในตาราง
ฉันไม่รู้ว่าจะเกิดอะไรขึ้นถ้าคุณพยายามเพิ่มแถวที่มีค่าฟิลด์ auto_increment อยู่แล้ว
หวังว่าจะช่วยได้!
วิธีที่ดีที่สุดคือลบฟิลด์ด้วย AI และเพิ่มอีกครั้งด้วย AI ทำงานได้กับทุกตาราง