MySQL'de bir dizi oluşturmaya çalışıyorum (SQL'de çok yeniyim). Aşağıdaki kodu kullanıyorum, ancak bir hataya neden oluyor:
CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;
ORDID, kullandığım bir tablodaki bir alanı ifade ediyor. Sıralamayı nasıl düzgün oluşturabilirim?
Düzenle:
İddiaya göre, MySQL dizileri kullanmıyor. Şimdi aşağıdaki kodu kullanıyorum, ancak bu da hatalara neden oluyor. Bunları nasıl düzeltebilirim?
CREATE TABLE ORD (
ORDID NUMERIC(4) NOT NULL AUTO_INCREMENT START WITH 622,
//Rest of table code
Düzenle:
Sanırım bir çözüm buldum. phpMyAdmin (benim kullandığım) için aşağıdaki kodu kullanabilirsiniz.
ALTER TABLE ORD AUTO_INCREMENT = 622;
Neden bunu tercih ettiği hakkında hiçbir fikrim yok, ancak başka birinin bu konuda yardıma ihtiyacı varsa, işte buyurun :)
Bu, [MySQl kılavuzu tarafından önerilen] bir çözümdür1:
expr, LAST_INSERT_ID() işlevine bir bağımsız değişken olarak verilirse argümanı fonksiyon tarafından döndürülür ve bir sonraki argüman olarak hatırlanır. değeri LAST_INSERT_ID() tarafından döndürülecektir. Bu simüle etmek için kullanılabilir diziler:
Sıra sayacını tutmak için bir tablo oluşturun ve bunu başlatın:
mysql> CREATE TABLE sequence (id INT NOT NULL); mysql> INSERT INTO sequence VALUES (0);
Bunun gibi sıra numaraları oluşturmak için tabloyu kullanın:
mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1); mysql> SELECT LAST_INSERT_ID();
UPDATE deyimi sıra sayacını artırır ve bir sonraki LAST_INSERT_ID() çağrısının güncellenmiş değeri döndürmesine neden olur. Bu SELECT deyimi bu değeri alır. mysql_insert_id() C API'si fonksiyonu da değeri almak için kullanılabilir. Bkz. Bölüm 23.8.7.37, "mysql_insert_id()".
LAST_INSERT_ID() işlevini çağırmadan da diziler oluşturabilirsiniz, ancak Fonksiyonu bu şekilde kullanmanın faydası, ID değerinin otomatik olarak oluşturulan son değer olarak sunucuda tutulur. Bu çok kullanıcılı olarak güvenlidir çünkü birden fazla istemci UPDATE deyimi ve SELECT deyimi ile kendi sıra değerlerini alırlar (veya mysql_insert_id()), diğerlerini etkilemeden veya onlardan etkilenmeden kendi sıra değerlerini üreten istemciler.
Bu makaleye göz atın]1. İstediğinizi elde etmenize yardımcı olacağına inanıyorum. Tablonuz zaten mevcutsa ve içinde zaten veri varsa, aldığınız hata auto_increment'ın diğer kayıtlar için zaten var olan bir değeri atamaya çalışmasından kaynaklanıyor olabilir.
Kısacası, diğerlerinin de yorumlarda belirttiği gibi, Oracle'da düşünüldüğü ve işlendiği şekliyle diziler MySQL'de mevcut değildir. Bununla birlikte, istediğinizi gerçekleştirmek için muhtemelen auto_increment kullanabilirsiniz.
Belirli bir hata hakkında ek ayrıntılar olmadan, daha spesifik yardım sağlamak zordur.
GÜNCELLEME
CREATE TABLE ORD (
ORDID INT NOT NULL AUTO_INCREMENT,
//Rest of table code
PRIMARY KEY (ordid)
)
AUTO_INCREMENT = 622;
Bu bağlantı auto_increment kullanımını açıklamak için de yararlıdır. AUTO_INCREMENT değerinin ayarlanması bir tablo seçeneği gibi görünmektedir ve özellikle sütun özniteliği olarak belirtilen bir şey değildir.
Ayrıca, yukarıdaki bağlantılardan birine göre, alternatif olarak tablonuzda bir değişiklik yaparak otomatik artış başlangıç değerini ayarlayabilirsiniz.
ALTER TABLE ORD AUTO_INCREMENT = 622;
GÜNCELLEME 2
Burada otomatik artırma kullanan çalışan sqlfiddle örneği için bir bağlantı bulunmaktadır.
Umarım bu bilgi yardımcı olur.
Artış tablosunu oluştururken eklenen satırları silmemeyi bilmelisiniz. bunun nedeni, içinde ID'ler bulunan db'de büyük aptal verileri depolamaktan kaçınmaktır. Aksi takdirde mysql yeniden başlatıldığında mevcut maksimum satırı alır ve dokümantasyonda belirtildiği gibi bu noktadan itibaren artırmaya devam eder http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html