更新表查询时不会创建Auto_increment列

时间:2017-09-22 17:01:14

标签: mysql

我创建了一个查询为

的表
Create table unititem (ID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (ID));

而不是通过以下查询

来改变它
 Alter table unititem AUTO_INCREMENT=1;

我还有一个表tablename,并希望通过添加引用表unitItemId的列unititem来更改它。我想要执行的查询是

Alter table tablename add column Unititemid INT NOT
NULL AUTO_INCREMENT ;

但是当我执行此查询时,它会给我这个错误:

  

表定义不正确;只能有一个自动列,必须将其定义为键

如果我想将其设为外键,则会在后续查询中提供1005 error

Alter table tablename 
add column Unititemid INT NOT NULL AUTO_INCREMENT,
ADD FOREIGN KEY (Unititemid) REFERENCES unititem (ID) ;

我不知道自己做错了什么。有什么建议吗?

UPDATE1 的 建议我不要将unititemid添加为AUTO_INCREMENT

 ALTER TABLE tablename ADD COLUMN unititemid INT NOT NULL;

现在问题是:我怎样才能把它变成外键?当我使用以下查询时,它会出错:

 ALTER TABLE tablename ADD FOREIGN KEY  (unititemid) REFERENCES unititem(ID);

错误:错误代码:1005 无法创建表格#alnasar_inventory。#sql-a04_1' (错误:150)
如何解决这个问题?任何建议。

1 个答案:

答案 0 :(得分:0)

要修复查询,只需删除AUTO_INCREMENT即可。尝试:

Alter table tablename add column Unititemid INT NOT
NULL ;

您不希望(也不能拥有)外键在新表中自动增加。

AUTO_INCREMENT存在以自动为表行生成新的唯一ID,但在外键上使用它是没有意义的。

考虑表unititem。它的ID为123tablename Unititemid 123tablename中也有3行。现在,您在另一个表AUTO_INCREMENT中创建一个新行。您如何期望3在这里工作?它会自动将4增加到4,但这没有任何意义,因为在itemitem中没有AUTO_INCREMENT。所以override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { let footerView = UIView(frame: CGRect(x:0, y:0, width:tableView.frame.size.width, height: 40)) footerView.backgroundColor = UIColor.lightGray switch(section) { case 2: // change only 3rd cell's footer let label = UILabel(frame: footerView.frame) label.text = "Section 5" footerView.addSubview(label) return footerView default: break } return nil } 只对原始表有意义,而不是在另一个表上。