2011-12-27 53 views
64

如何糾正從MySQL錯誤「你只能有一個自動遞增列」。只能有一個自動柱

CREATE TABLE book (
    id INT AUTO_INCREMENT NOT NULL, 
    accepted_terms BIT(1) NOT NULL, 
    accepted_privacy BIT(1) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

回答

74

我的MySQL說「不正確的表定義;只能有一個自動列,它必須定義爲一個關鍵「所以,當我加入主鍵下面它開始工作:

CREATE TABLE book (
    id INT AUTO_INCREMENT NOT NULL, 
    accepted_terms BIT(1) NOT NULL, 
    accepted_privacy BIT(1) NOT NULL, 
    primary key (id) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
+2

如果列是複合鍵的一部分,那麼正確的操作過程是什麼? – Nubcake 2017-09-20 18:13:54

6
CREATE TABLE book (
    id INT AUTO_INCREMENT primary key NOT NULL, 
    accepted_terms BIT(1) NOT NULL, 
    accepted_privacy BIT(1) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
26

完整的錯誤消息聽起來:

ERROR 1075(42000):不正確的表定義;只能有一個自動柱,它必須定義爲一個關鍵

所以加primary keyauto_increment領域:

CREATE TABLE book (
    id INT AUTO_INCREMENT primary key NOT NULL, 
    accepted_terms BIT(1) NOT NULL, 
    accepted_privacy BIT(1) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
-2

如果此錯誤的Wi發生在CodeIgniter:

$fields=array(
'slno' => array(
     'type' => 'int', 
     'constraint' => 255, 
     'unsigned' => TRUE, 
     'auto_increment' => TRUE 
     ), 
'node_id' => array(
     'type' => 'int', 
     'constraint' => 255, 
     'unsigned' => TRUE 
     ), 
'node' => array(
     'type' => 'text', 
     'null' => TRUE 
     ) 

); 

$this->dbforge->add_field($fields); 

$this->dbforge->add_key("slno",TRUE); 

$this->dbforge->create_table($key,TRUE); 

不要忘記添加主鍵字段....!

2

還要注意的是「鑰匙」並不一定意味着鍵。像這樣將工作:

CREATE TABLE book (
    isbn    BIGINT NOT NULL PRIMARY KEY, 
    id    INT NOT NULL AUTO_INCREMENT, 
    accepted_terms BIT(1) NOT NULL, 
    accepted_privacy BIT(1) NOT NULL, 
    INDEX(id) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

這是一個人爲的例子,可能不是最好的辦法,但它可以在某些情況下非常有用的。

相關問題