PHP mySQL - 将新记录插入表中,主键自动递增

Posted

技术标签:

【中文标题】PHP mySQL - 将新记录插入表中,主键自动递增【英文标题】:PHP mySQL - Insert new record into table with auto-increment on primary key 【发布时间】:2011-11-21 11:19:07 【问题描述】:

想知道是否有一个速记版本可以将新记录插入到启用了主键的表中? (即不必在查询中包含键列) 假设键列称为 ID,其他列是 Fname、Lname 和网站

$query = "INSERT INTO myTable VALUES ('Fname', 'Lname', 'Website')";

【问题讨论】:

你已经得到了答案。您的示例应该按预期工作(假设 ID 是自动增量)。 @konsolenfreddy:他正在使用需要指定每个列值的插入语法。 我建议不要在应用程序中使用这种类型的插入语法,因为如果您将来添加列(或更改列顺序),您必须返回并更改您的 SQL 语句,即使这些列具有默认值.如果是一次性数据库更新,那没什么大不了的。 【参考方案1】:

您还可以对 auto_increment 列使用空白单引号。像这样的东西。它对我有用。

$query = "INSERT INTO myTable VALUES ('','Fname', 'Lname', 'Website')";

【讨论】:

【参考方案2】:

使用 DEFAULT 关键字:

$query = "INSERT INTO myTable VALUES (DEFAULT,'Fname', 'Lname', 'Website')";

另外,您可以指定列,(这是更好的做法):

$query = "INSERT INTO myTable
          (fname, lname, website)
          VALUES
          ('fname', 'lname', 'website')";

参考:

http://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html

【讨论】:

是的,我知道最好设置每一列。但是这个表不会被改变,所以我只是好奇如何使用最少的代码来完成这个技巧。谢谢! “不会被改变”是一个相当大的假设。也许这是一张一次性的桌子,当您完成当前的任务时,您会放弃它,否则谁知道业务需求何时会以意想不到的方式发生变化。在绝大多数情况下,如果您使用带有列名的第二种形式,接下来必须维护系统的人会非常感激。【参考方案3】:
$query = "INSERT INTO myTable VALUES (NULL,'Fname', 'Lname', 'Website')";

只要留下 AI 主键 NULL 的值,就会分配一个自动递增的值。

【讨论】:

这确实是一种骇人听闻的行为,并且依赖于 MySQL 将空字符串转换为整数(这不是严格的行为),失败而没有错误(这是可配置的),然后使用 null 作为它通常会(其中 null 成为 DEFAULT 的等效项)。我真的建议不要使用它。 这是一个旧的:P 我已经用 null 而不是空字符串更新了。【参考方案4】:

这是 phpMyAdmin 方法。

$query = "INSERT INTO myTable
         (mtb_i_idautoinc, mtb_s_string1, mtb_s_string2) 
         VALUES
         (NULL, 'Jagodina', '35000')";

【讨论】:

如果你要从 PHP 中给出一个查询,你真的应该让它成为一个参数化查询。 如果您有需要在查询中使用的动态馈送值,是的,请使用准备好的语句。如果插入的所有值都是静态的(并且不包含任何破坏 sql 的字符),那么您可以只使用基本的query()【参考方案5】:

我更喜欢这种语法:

$query = "INSERT INTO myTable SET fname='Fname',lname='Lname',website='Website'";

【讨论】:

+1,我也喜欢,只适用于 MySQL / 不适用于 SQLite。

以上是关于PHP mySQL - 将新记录插入表中,主键自动递增的主要内容,如果未能解决你的问题,请参考以下文章

如何从 mysql 表中获取自动递增字段名称或主键字段名称?

将自动递增的主键插入 Access 表

如果 mysql 数据库中的表中不存在,则更新或插入多条记录

自动从 Mysql 表中删除的记录

SQL的自动增长

如何使用 PHP 在 MYSQL 中的数据库表中插入、更新、删除记录时创建日志