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 表中获取自动递增字段名称或主键字段名称?