MySQL: tablonun birincil anahtarının dinamik belirleyin

3 Cevap php

Ben PHP böyle bir SQL sorgusu üreten, kulüpler:

$sql = sprintf("UPDATE %s SET %s = %s WHERE %s = %s", ...);

Bu sorgunun hemen her parçası dinamik olduğundan böyle bir sorgu olurdu ki ben, dinamik tablonun birincil anahtar belirlemek için bir yol gerekir:

$sql = sprintf("UPDATE %s SET %s=%s WHERE PRIMARY_KEY = %s", ...);

Tablonun birincil anahtarı için bir MySQL anahtar kelime, veya bunu elde etmek için bir yolu var mı?

Ben bu gibi bilgileri bulmak için önce information_schema DB kullandım, ama buna başvurmak zorunda olmasaydı iyi olurdu.

3 Cevap

SHOW INDEX FROM <tablename>

Sen key_name'ı = İLKÖĞRETİM satır istediğiniz

http://dev.mysql.com/doc/refman/5.0/en/show-index.html

Muhtemelen sonuçlarını önbelleğe isteyeceksiniz - sizinle çalışmak gerekebilir tüm masalarda GÖSTER ifadeleri çalıştırmak için bir süre alır.

Bu tavsiye ama gayet güzel çalışıyor değil olabilir:

show index from TABLE where Key_name = 'PRIMARY' ;

Katı yolu information_schema kullanmaktır:

SELECT k.COLUMN_NAME
FROM information_schema.table_constraints t
LEFT JOIN information_schema.key_column_usage k
USING(constraint_name,table_schema,table_name)
WHERE t.constraint_type='PRIMARY KEY'
    AND t.table_schema=DATABASE()
    AND t.table_name='owalog';

Sunulan gibi mysql-list. Ancak ilk çözüm onun bir kaç kat daha yavaş.

Birincil Anahtar sütunları almak için daha iyi bir yolu:

SELECT `COLUMN_NAME`
FROM `information_schema`.`COLUMNS`
WHERE (`TABLE_SCHEMA` = 'dbName')
  AND (`TABLE_NAME` = 'tableName')
  AND (`COLUMN_KEY` = 'PRI');

Dan http://mysql-0v34c10ck.blogspot.com/2011/05/better-way-to-get-primary-key-columns.html