2010-05-27 140 views
0

是否有一個select語句可以完成所有這三個操作:主鍵,唯一鍵和auto_increment?mysql:如何將列更改爲PK Auto_Increment

+0

你是指單個ALTER語句嗎?您實際上不使用SELECT語句來更改表結構。 – 2010-05-27 16:29:38

+0

yes thast我的意思是 – 2010-05-27 16:29:58

+0

當你在得到答案後完全顛倒了問題的含義時,它使得這些答案看起來非常愚蠢。如果您現在要求的是與您最初要求的相反的內容,我認爲您應該提出一個新問題。 – tvanfosson 2010-05-27 16:33:17

回答

2

這裏我們創建了一個小桌子:

mysql> CREATE TABLE test2 (id int); 

注意空是YES,而id是不是主鍵,也不會AUTO_INCREMENT。

mysql> DESCRIBE test2; 
+-------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+-------+---------+------+-----+---------+-------+ 
| id | int(11) | YES |  | NULL |  | 
+-------+---------+------+-----+---------+-------+ 
1 row in set (0.00 sec) 

這裏是alter命令:

mysql> ALTER TABLE test2 MODIFY COLUMN id INT NOT NULL auto_increment, ADD primary key (id); 

現在空爲否,並且id與AUTO_INCREMENT主鍵。

mysql> describe test2; 
describe test2; 
+-------+---------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra   | 
+-------+---------+------+-----+---------+----------------+ 
| id | int(11) | NO | PRI | NULL | auto_increment | 
+-------+---------+------+-----+---------+----------------+ 
1 row in set (0.00 sec) 

主鍵始終是唯一的。

1

主鍵始終是唯一的。

+0

你應該知道你離開你的答案後問題完全顛倒了。 – tvanfosson 2010-05-27 16:33:59

+0

@tvanfosson:thank you =) – newtover 2010-05-27 16:45:30

1

您不能使用SELECT這樣的DML(數據操作語言)語句更改數據庫結構。您需要DDL(數據定義語言)語句。表列可以與ALTER TABLE修改:

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

的語法基本上是這樣的:

ALTER TABLE `foo` 
CHANGE COLUMN `bar` `bar` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
ADD PRIMARY KEY (`foo`); 

當你想要做的確切變化,你必須知道,在關係數據庫中的主鍵是一個用於唯一標識表中每一行的值。如果它不是唯一的或NULL,它將不會達到這樣的目的。