【问题标题】:Does primary index in mysql table automatically have a value when new row is added?添加新行时,mysql表中的主索引是否自动具有值?
【发布时间】:2013-10-22 09:15:03
【问题描述】:

所以,假设我有一个表,有 20 列,我想向它们插入数据,并且第一列只是一个主索引,如果我不为其分配一个,它将自动具有一个数值.主索引已启用自动递增。

所以我的问题是,我是否总是必须这样做(这很烦人而且很慢)

INSERT INTO table (col1,col2,col3,col4,col5,col6) VALUES (col1value,col2value,col3value,col4,value,col5value,col6value)

或者,我可以像这样指定值(假设我正在填充除主索引之外的每一列)

INSERT INTO table VALUES (col1values,col2values,col3values,col4values,col5values,col6values)

还是会破坏桌子?

【问题讨论】:

  • 第一个慢怎么办?因为你必须输入列名?
  • @ypercube 是的。如果不需要,我宁愿不输入。
  • 其实可以的:INSERT INTO table VALUES (null,col2values,col3values,col4values,col5values,col6values)

标签: php mysql sql pdo


【解决方案1】:

第一个是正确的。 在第二个中,您可以将主键属性指定为 null 或使用 INSERT INTO table VALUES('',col2values,col3values,col4values,col5values,col6values) 假设第一个字段是主键。

【讨论】:

  • NULL 和空字符串不是一回事。
【解决方案2】:

tldr;您需要定义要插入的列。

Mysql 假设当你没有像下面这样输入列名时

INSERT INTO table (column_name1, column_name2, column_name3)

您稍后将在值定义中定义所有列。如果不定义列名,它将不知道为主键跳过哪一行。

如果您在上面的示例中将主键作为 column_name2,就是一个例子。

【讨论】:

  • 是的,我知道。我认为你没有理解这个问题。
【解决方案3】:

不,您不能使用第二种解决方案,除非您提供与字段计数一样多的值。您仍然可以使用NULL 提供主键值。 MySQL 然后将其替换为自动递增的值(假设您的列是 PRIMARY KEY + AUTO_INCREMENT)。

尽管如此,第一个解决方案非常好。

【讨论】:

  • 第一个解决方案使用起来非常糟糕,因为我必须先输入列名。但是使用NULL 可以完成这项工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 2014-02-02
  • 1970-01-01
  • 2010-10-31
相关资源
最近更新 更多