Nasıl olabilir sıfırlamakAUTO_INCREMENT
bir alanın? Tekrar
saymaya başlamasını istiyorum 1
.
TRUNCATE TABLE yourTableName;
Nasıl olabilir sıfırlamakAUTO_INCREMENT
bir alanın? Tekrar
saymaya başlamasını istiyorum 1
.
TRUNCATE TABLE yourTableName;
Yanıtlar:
Sayacı aşağıdakilerle sıfırlayabilirsiniz:
ALTER TABLE tablename AUTO_INCREMENT = 1
InnoDB için, auto_increment
değeri en yüksek akım dizinine daha düşük veya eşit olarak ayarlayamazsınız . ( ViralPatel'den alıntı ):
Sayacı, daha önce kullanılmış olandan küçük veya ona eşit bir değere sıfırlayamayacağınızı unutmayın. MyISAM için, değer şu anda AUTO_INCREMENT sütunundaki maksimum değerden küçük veya ona eşitse, değer geçerli maksimum artı bir değerine sıfırlanır. InnoDB için, değer sütundaki geçerli maksimum değerden küçükse hiçbir hata oluşmaz ve geçerli sıra değeri değiştirilmez.
Bkz . Başka bir tablodaki MAX değerini kullanarak bir MySQL OtomatikIncrement Nasıl Sıfırlanır? dinamik olarak kabul edilebilir bir değer elde etme konusunda.
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;
Bence bu yapacak
UPDATE
tüm değerleri güncelleyeceksiniz id
.
Sadece şöyle:
ALTER TABLE tablename AUTO_INCREMENT = value;
başvuru: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
reset
varsayılan değere ayarlamak anlamına gelir ... böylece "değer" yerine 1 kullanabilirsiniz
Phpmyadmin ile "işlemleri" sekmesi altında çok kolay bir yol var, tablo seçeneklerinde, istediğiniz sayıya otomatik artış ayarlayabilirsiniz.
Benim için çalışan en iyi çözüm:
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
Hızlı, innoDB ile çalışır ve mevcut maksimum değeri bilmeme gerek yok! Bu şekilde otomatik artış sayacı sıfırlanacak ve mevcut maksimum değerden otomatik olarak başlayacaktır.
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
oysa ALTER TABLE tablename AUTO_INCREMENT = 1
yapar değil .
Bu soruya verilen en yüksek puanların tümü "ALTER yourtable AUTO_INCREMENT = value" değerini öneriyor. Ancak, bu yalnızca value
değiştirmedeki otomatik bağlama sütununun geçerli maksimum değerinden büyük olduğunda çalışır . MySQL 8 belgelerine göre :
Sayacı, kullanılmakta olan değerden küçük veya ona eşit bir değere sıfırlayamazsınız. Hem InnoDB hem de MyISAM için, değer şu anda AUTO_INCREMENT sütunundaki maksimum değerden küçük veya ona eşitse, değer geçerli maksimum AUTO_INCREMENT sütun değeri artı bir değerine sıfırlanır.
Temelde, OP sorunun yalnızca ikinci bölümünde sorduğu için, otomatik giriş sütununun değerini artırmak için yalnızca AUTO_INCREMENT değerini 1 olarak sıfırlayamazsınız. AUTO_INCREMENT öğesini geçerli maks. Değerinden aşağıya doğru ayarlamanıza izin veren seçenekler için, Otomatik artışı birincil anahtarını yeniden sırala / sıfırla'ya bakın .
MySQL 5.6'da işlevsellik değiştiği için güncelleme ekleme. MySQL 5.6'dan itibaren InnoDB ile basit ALTER TABLOSU'nu kullanabilirsiniz:
ALTER TABLE tablename AUTO_INCREMENT = 1;
Dokümanlar bunu yansıtacak şekilde güncellenir:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
Testim ayrıca tablonun kopyalanmadığını, değerin basitçe değiştirildiğini de gösteriyor.
MySQL Autoincrement Sütununu Sıfırlama bölümünde verilen iyi seçenekler vardır
Not ALTER TABLE tablename AUTO_INCREMENT = value;
yok değil InnoDb için çalışmak
DELETE
(veya ROLLBACK
) kimlikleri kurtarmaz. Bir istisna: Yeniden başlatmadan (veya kilitlenmeden) sonra, bir sonraki kimliğin hesaplanması MAX(id)+1
, böylece sonunda silinmiş kimlikleri etkili bir şekilde kurtarmasıdır . İstisna istisnası: MySQL 8.0 bu kimlikleri kullanılmaz hale getirir.
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
Bazı komut dosyalarımda bunu kullandım, id alanı bırakıldı ve önceki ayarlarla geri eklendi, veritabanı tablosundaki tüm alanlar yeni otomatik artış değerleri ile dolduruldu, bu da InnoDB ile çalışmalı.
Tablodaki tüm alanların yeniden sayılacağını ve başka kimlikleri olacağını unutmayın !!!.
Sözdizimi TRUNCATE
tablosunu şu şekilde de kullanabilirsiniz :
TRUNCATE TABLE table_name
DİKKAT!! TRUNCATE TABLE your_table
olacak her şeyi silmek Gözlerinde farklı your_table
!!
TRUNCATE
da sileceğini unutmayın !
TRUNCATE
auto_increment
alanları da sıfırlayacak mı? Benim kullanım durumum , tablodaki eski verileri temizlemek ve yeni veriler için kimlikleri 1'den yeniden başlatmaktır (hayal edin, test tamamlandıktan sonra doğru kullanım için tabloyu temizleme). DROP
Tüm masaya gitmeyi düşündüm ve CREATE
yine.
auto_increment
, DELETE FROM
yerine kullanın TRUNCATE
.
boş masa içindir:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
Verileriniz varsa ancak düzenlemek istiyorsanız, bunu kullanmanızı öneririz:
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`);
İşte benim çözümüm, ancak sütununuz kısıtlamaları varsa veya kötü tablolara sahip olacağı veya hatta çalışmayacağı için diğer tablolara yabancı anahtar olarak bağlanmışsa bunu yapmanızı tavsiye etmeyeceğim.
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
Bu iyi çalışıyor!
MySQL 5.6 itibariyle aşağıdaki yaklaşım çevrimiçi DDL nedeniyle daha hızlı çalışır (not algorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
Diziyi sıfırlamak için tabloyu kısaltabilirsiniz
TRUNCATE TABLE TABLE_NAME
Tablo değiştirmek ve auto_increment 1 ayarlamak için çalıştı ama işe yaramadı. Artırdığım sütun adını silmeye, sonra tercih ettiğiniz adla yeni bir sütun oluşturmaya ve bu yeni sütunu başlangıcından itibaren artırmaya karar verdim.
Bir tablo için otomatik artış sayacı iki şekilde ayarlanabilir:
Daha önce açıklandığı gibi bir sorgu yürüterek:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Workbench veya diğer görsel veritabanı tasarım araçlarını kullanma. Workbench'te nasıl yapıldığını göstereceğim - ancak diğer araçlarda da çok farklı olmamalı. İstediğiniz tabloya sağ tıklayın Alter table
ve içerik menüsünden seçim yapın. Altta bir tabloyu değiştirmek için mevcut tüm seçenekleri görebilirsiniz. Seçin Options
ve bu formu alacaksınız:
Ardından, alanda Auto increment
gösterilen değeri resimde gösterildiği gibi ayarlamanız yeterlidir. Bu temel olarak ilk seçenekte gösterilen sorguyu yürütür.
En son artı bir kimliği güncellemek için
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
ALTER TABLE tablo adı AUTO_INCREMENT = 1
Bu soruyu araştırdım ve buldum, ancak aradığım cevap iki kriteri karşılıyor:
Burada tam olarak ne istediğimi bulamadığım için, cevabı çeşitli cevaplardan toplayıp burada paylaştım.
Unutulmaması gereken birkaç nokta:
id
tür içeren alanı kullanırint
bunun gibi bir saklı yordam oluşturun:
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 ;
Sonra çalıştırın.
Çalıştırılmadan önce, veritabanınızdaki Saklı Yordamlar'ın altına baktığınızda şöyle görünür.
Çalıştırdığımda, saklı yordamı seçiyorum ve Seçimi Çalıştır'a basıyorum
Not: ayırıcılar kısmı çok önemlidir. Bu nedenle, bu soruda seçilen en iyi yanıtlardan kopyalayıp yapıştırırsanız, bu nedenle çalışmazlar.
Çalıştırdıktan sonra, saklı yordamı görmeliyim
Saklı yordamı değiştirmeniz gerekirse, saklı yordamı silmeniz ve ardından yeniden çalıştırmayı seçmeniz gerekir.
Bu sefer normal MySQL sorgularını kullanabilirsiniz.
call reset_autoincrement('products');
Başlangıçta kendi SQL sorgularımdan https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc adresindeki notlar ve StackOverflow için uyarlanmış
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Bu Sorguyu Çalıştır'ı deneyin
ALTER TABLE tablename AUTO_INCREMENT = value;
Veya Otomatik Sorguyu Sıfırla için Bu Sorguyu Deneyin
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
Ve Otomatik Artışı Ayarlayın Sonra Bu Sorguyu Çalıştırın
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
Sorgu Tarayıcısına gitmenizi ve aşağıdakileri yapmanızı öneririm:
Tabloda yeni satıra girdiğinizde otomatik_dönüş bire sıfırlanmalıdır.
Eğer bir auto_increment alan değeri zaten mevcut bir satır eklemek çalışırsanız ne olacağını bilmiyorum.
Umarım bu yardım!
En iyi yol, alanı AI ile kaldırmak ve AI ile tekrar eklemek, tüm tablolar için çalışır