2012-06-19 41 views
6

Trong PHP, làm thế nào để tôi nhận được tên trường của trường được thiết lập là tự động tăng khi một rec mới được thêm vào nó?Làm cách nào để lấy tên trường tự động gia tăng hoặc tên trường khóa chính từ bảng mysql?

Trong hầu hết các trường hợp, nó giống như PRIMARY_KEY của bảng nhưng không nhất thiết phải luôn luôn.

Vì vậy, câu hỏi này có 2 phần với phần thứ hai phân nhánh thành phần thứ 3.

1- Làm thế nào để có được tên của tên trường tự động incrementing ...

2- Làm thế nào để có được tên của tên trường primary_key ...

2.1 Làm thế nào để có được những primary_key (s) thông tin khi một bảng sử dụng nhiều hơn một trường làm khóa chính của nó ...

Trả lời

2

Bạn có thể lấy thông tin bảng bằng cách sử dụng SHOW COLUMNS FROM table. Một cái gì đó như thế này:

$res = $mysqli->query('SHOW COLUMNS FROM tablename'); 

while($row = $res->fetch_assoc()) { 
    if ($row['Extra'] == 'auto_increment') 
    echo 'Field with auto_increment = '.$row['Field']; 
    if ($row['Key'] == 'PRI') 
    echo 'Field with primary key = '.$row['Field']; 
} 
+1

hiển thị các cột từ tablename trong đó Extra = 'auto_increment' – ling

2

Bạn có thể nhận được thông tin đó bằng cách sử dụng lệnh SHOW COLUMNS. More info

Ví dụ: Giả sử bạn có bảng có tên Thành phố. Các truy vấn để xem các thuộc tính bảng sẽ là:

mysql> SHOW COLUMNS FROM City; 

...And the result: 
+------------+----------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+------------+----------+------+-----+---------+----------------+ 
| Id   | int(11) | NO | PRI | NULL | auto_increment | 
| Name  | char(35) | NO |  |   |    | 
| Country | char(3) | NO | UNI |   |    | 
| District | char(20) | YES | MUL |   |    | 
| Population | int(11) | NO |  | 0  |    | 
+------------+----------+------+-----+---------+----------------+ 

Đây là từ http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

+0

Tôi muốn đưa ra câu trả lời này nếu bạn thực sự đưa vào lệnh để lấy thông tin mà OP yêu cầu. – JohnFx

+0

@JohnFx Đã thêm ví dụ. –

+0

upvote được thêm vào. =) – JohnFx

2

Bạn có thể truy vấn cơ sở dữ liệu information_schema:

SELECT column_name, column_key, extra 
FROM information_schema.columns 
WHERE table_schema=DATABASE() AND table_name='tablename'; 
  • các column_key sẽ bao gồm các loại chủ chốt, tức là PRI, MUL, v.v.
  • Cộtsẽ chứa auto_increment cho cột tăng tự động.

Lưu ý rằng cơ sở dữ liệu information_schema là "toàn cầu" vì vậy bạn phải luôn luôn vượt qua các cơ sở dữ liệu tương ứng (hoặc đặc biệt hoặc thông qua DATABASE() cho cơ sở dữ liệu hiện hành) bảng, nếu không bạn kết thúc với một kết quả thiết lập BIG.

6

nếu bạn muốn nhận được các cột khóa chính của bảng, bạn có thể sử dụng mã này:

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='tbName'; -- the name of your table 

Để có được lĩnh vực tự động tăng lên, hãy thử này:

SELECT Auto_increment 
FROM information_schema.tables 
WHERE table_name = 'tbName' 
    AND table_schema = DATABASE(); 
+0

khi truy vấn bảng information_schema, sử dụng innodb_stats_on_metadata = 0 để có hiệu suất tốt hơn: https://www.percona.com/blog/2011/12/23/solving-information_schema-slowness/ – ling

Các vấn đề liên quan