복붙노트

[SQL] MySQL은 : 테이블의 기본 키를 동적으로 결정

SQL

MySQL은 : 테이블의 기본 키를 동적으로 결정

나는 PHP에서이 같은 SQL 쿼리를 생성 해요 :

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

이 쿼리의 거의 모든 부분은 동적이기 때문에 나는이 같은 쿼리이있을 것이다 그래서, 동적 테이블의 기본 키를 결정하는 방법이 필요합니다 :

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

테이블의 기본 키, 또는 그것을 얻을 수있는 방법에 대한 MySQL의 키워드가 있습니까?

이 같은 정보를 찾을 전에 나는 INFORMATION_SCHEMA의 DB를 사용했지만, 나는 그에게 의지하지 않은 경우 그것은 좋은 일 것입니다.

해결법

  1. ==============================

    1.

    SHOW INDEX FROM <tablename>
    

    KEY_NAME가 PRIMARY = 어디 행을 원하는

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

    당신은 아마 결과를 캐시 할 것이다 - 당신이 작업에 필요한 수있는 모든 테이블에 대한 SHOW 문을 실행하는 데 시간이 걸립니다.

  2. ==============================

    2.그것은 조언하지만 잘 작동하지 될 수 있습니다

    그것은 조언하지만 잘 작동하지 될 수 있습니다

    SHOW INDEX FROM <table_name> WHERE Key_name = 'PRIMARY';
    

    고체 방법은 사용 INFORMATION_SCHEMA이다 :

    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';
    

    MySQL의 목록에 표시한다. 최초의 솔루션에서하지만 그 몇 번 느린.

  3. ==============================

    3.더 좋은 방법은 기본 키 열을 얻을 수 있습니다 :

    더 좋은 방법은 기본 키 열을 얻을 수 있습니다 :

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

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

  4. ==============================

    4.또한

    또한

    SHOW INDEX FROM <table_name> WHERE Key_name = 'PRIMARY';
    

    에 해당

    SHOW KEYS FROM <table_name> WHERE Key_name = 'PRIMARY';
    

  5. ==============================

    5.자신의 코드의 병합을, 제이크 - 설리와 @lukmdo 답변 @ 바탕으로, 나는 다음 코드 완료 :

    자신의 코드의 병합을, 제이크 - 설리와 @lukmdo 답변 @ 바탕으로, 나는 다음 코드 완료 :

    SELECT `COLUMN_NAME`
    FROM `information_schema`.`COLUMNS`
    WHERE (`TABLE_SCHEMA` = DATABASE())
    AND (`TABLE_NAME` = '<tablename>')
    AND (`COLUMN_KEY` = 'PRI');
    

    누군가를 도울 수있는 희망

  6. from https://stackoverflow.com/questions/893874/mysql-determine-tables-primary-key-dynamically by cc-by-sa and MIT license