所以我有一个有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
型
这两种方法的效率有什么不同吗?有没有一种方法比另一种更值得推荐?
1条答案
按热度按时间n7taea2i1#
如果您获取当前值并尝试插入下一个更高的值,则会创建争用条件。两个并发应用请求将尝试插入相同的值。
一个更好的解决方案是使用
NULL
或DEFAULT
来代替值。根据SQL模式,零也可以工作。字符串
记住,表名要用反引号,而不是单引号。单引号是用于字符串的。