[SQL] MySQL은 : 테이블의 기본 키를 동적으로 결정
SQLMySQL은 : 테이블의 기본 키를 동적으로 결정
나는 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.
SHOW INDEX FROM <tablename>
KEY_NAME가 PRIMARY = 어디 행을 원하는
http://dev.mysql.com/doc/refman/5.0/en/show-index.html
당신은 아마 결과를 캐시 할 것이다 - 당신이 작업에 필요한 수있는 모든 테이블에 대한 SHOW 문을 실행하는 데 시간이 걸립니다.
-
==============================
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.더 좋은 방법은 기본 키 열을 얻을 수 있습니다 :
더 좋은 방법은 기본 키 열을 얻을 수 있습니다 :
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.또한
또한
SHOW INDEX FROM <table_name> WHERE Key_name = 'PRIMARY';
에 해당
SHOW KEYS FROM <table_name> WHERE Key_name = 'PRIMARY';
-
==============================
5.자신의 코드의 병합을, 제이크 - 설리와 @lukmdo 답변 @ 바탕으로, 나는 다음 코드 완료 :
자신의 코드의 병합을, 제이크 - 설리와 @lukmdo 답변 @ 바탕으로, 나는 다음 코드 완료 :
SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = DATABASE()) AND (`TABLE_NAME` = '<tablename>') AND (`COLUMN_KEY` = 'PRI');
누군가를 도울 수있는 희망
from https://stackoverflow.com/questions/893874/mysql-determine-tables-primary-key-dynamically by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] FROM INSERT INTO [임시 테이블]에 MySQL을 어떻게 [저장 프로 시저] (0) | 2020.06.13 |
---|---|
[SQL] 하이버 네이트 기준의 합 ()을 사용하여 (0) | 2020.06.13 |
[SQL] TSQL 동적 SQL에서 임시 테이블로 선택 (0) | 2020.06.12 |
[SQL] 액세스 SQL에서 '이스케이프 (0) | 2020.06.12 |
[SQL] 저장 프로 시저에서 SQL Server 에이전트 작업을 실행하고 작업 결과를 반환 (0) | 2020.06.12 |