mysql 插入到表中,跳过自动递增的列,而无需写入列的名称

gdrx4gfi  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(53)

所以我有一个有30多列的大表,我想做的是插入它的值,但是跳过第一列,这是自动递增的“id”,所以我有两个选择,一个是:

INSERT INTO 'table name' col2,col3,col4... VALUES val2,val3,val4

字符串
但是复制列的名称会花费很长时间,并且可能会丢失一个字母从而产生错误。因此另一种选择是获取表中的最后一个id并自己编辑下一个id:

$last_row_query = mysql_query("SELECT id FROM `order` ORDER BY id DESC LIMIT 1");
if(!$last_row_query) {
    die('invalid query: '.mysql_error());
}
$last_row = mysql_fetch_assoc($last_row_query);
$last_id = $last_row['id'];
$current_id = $last_id+1;


然后查询将是

INSERT INTO 'table name' VALUES $current_id,val2,val3,val4


这两种方法的效率有什么不同吗?有没有一种方法比另一种更值得推荐?

n7taea2i

n7taea2i1#

如果您获取当前值并尝试插入下一个更高的值,则会创建争用条件。两个并发应用请求将尝试插入相同的值。
一个更好的解决方案是使用NULLDEFAULT来代替值。根据SQL模式,零也可以工作。

INSERT INTO `table name` VALUES (DEFAULT, ?, ?, ?);

字符串
记住,表名要用反引号,而不是单引号。单引号是用于字符串的。

相关问题