CREATE INDEX - ALTER TABLOSU ENDEKSİ EKLE - MySQLism veya SQL Standard?


28

Yeni bir tuhaf sorunla karşılaştım, bu yüzden nasıl bir dizin oluşturduğuma bağlı olarak bir dizin adı gerekiyor.

http://dev.mysql.com/doc/refman/5.5/en/create-index.html

http://dev.mysql.com/doc/refman/5.5/en/alter-table.html

CREATE INDEX `random_name` ON `my_table` (`my_column`); # Requires an index name

ALTER TABLE `my_table` ADD INDEX (`my_column`); # Does not require an index name

Bana öyle geliyor ki CREATE INDEX çağrısı, indeks ismini gerekli yapmamalı. Bunun bir MySQLism mi yoksa bir SQL standardı mı olduğunu merak ediyorum.

Yanıtlar:


25

Ben SQL tanımlamış sanmıyorum nasıl endeksler oluşturmak için hiç .

Bu Wikipedia sayfasından bir alıntı :

Standardizasyon

İndeks oluşturma konusunda standart yoktur çünkü ISO SQL Standardı fiziksel yönleri kapsamamaktadır. Endeksler, depolama gibi diğerlerinin yanı sıra veri tabanı kavramının fiziksel parçalarından biridir (tablo alanı veya dosya grupları). RDBMS satıcılarının tümü, müşterilere sağladıkları işlevselliklere bağlı bazı özel seçeneklerle birlikte bir CREATE INDEX sözdizimi verir.

Postgres kılavuzu buradakileri desteklemektedir:

SQL standardında indeksler için bir hüküm yoktur.

SO ile ilgili bu soru altında daha fazla kanıt.


6
MySQL kullanarak kesin bir endeks eklenmesini sağlayan tek DBMS olduğunu ALTER TABLE(bazı endekslerin kısıtlamaları desteklemek için çeşitli DBMS'ler tarafından yaratılacağı bazı durumlar vardır, fakat bu ne demek istediğim değil).
a_horse_with_no_name

@ a_horse_with_no_name: Kurallara göre not alındı. MySQL’in neden bir index_name’i geçmemize zorladığını anlamıyorum; Endeksleri isimlendirmekten kaçınmak için bir değişiklik yapmak zorunda kalmak bir PITA.
Mike Purcell

-1

Dizin için bir ad girmezseniz, MySQL dizini sizin için otomatik olarak adlandırır.

ALTER TABLE my_table ADD INDEX (col1);
ALTER TABLE my_table ADD INDEX (col1, col2);
ALTER TABLE my_table ADD INDEX (col2);

SHOW INDEX FROM my_table;

Yukarıdaki ALTER TABLE ADD INDEXifadeler aşağıdaki endeksleri üretecektir:

  • col1
  • col1_2
  • col2

Yalnızca bir sütunu olan bir dizin oluşturursanız, dizin için bir ad belirtmeniz gerekmeyebilir (çünkü dizinin adı sütun adıyla aynı olacaktır). Ancak, birden çok sütunu olan bir dizin oluşturursanız, dizin için bir ad belirtmeniz daha iyi olabilir; bu nedenle dizini tanımlamak daha kolay olur.

Dizine bir ad vermek iyi bir uygulamadır (ve onu idxdizin olarak tanımlayacak bir şey veya ön ek ):

ALTER TABLE my_table ADD INDEX idx_my_column (my_column);

-- or
CREATE INDEX idx_my_column ON my_table (my_column);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.