我有一个包含4列的表格。第一列对于每一行都是唯一的,但它是一个字符串(URL格式)。 我想更新我的表,但不是使用“WHERE”,我想按顺序更新行。 第一个查询将更新第一行,第二个查询将更新第二行,依此类推。
那是什么SQL代码?我正在使用Sqlite。
编辑:我的表架构
CREATE table (
url varchar(150),
views int(5),
clicks int(5)
)
Edit2:我现在正在做的是一个SQL查询循环
更新表设置视图= 5,单击= 10,其中url =“http://someurl.com”;
数据库中有大约400万条记录。我的服务器需要大约16秒来进行更新。由于循环按顺序更新行,所以第一个查询更新第一行;我在想是否按顺序更新行可能比使用需要浏览400万行的WHERE子句更快。
答案 0 :(得分:1)
如果不使用WHERE,则无法执行所需操作,因为这是仅方式从表中选择行以进行读取,更新或删除。所以你会想要使用:
UPDATE table SET url = ... WHERE url = '<whatever>'
HOWEVER ... SqlLite有一个额外的功能 - autogenerated column, ROWID。您可以在查询中使用此列。默认情况下,您不会看到此数据,因此如果您需要其中的数据,则需要明确请求它,例如:
SELECT ROWID, * FROM table
这意味着您可以直接执行您想要引用此列的内容:
UPDATE table SET url = ... WHERE ROWID = 1
您仍然需要使用WHERE
子句,但这允许您以插入顺序访问行而不执行任何其他操作。
<强> CAVEAT 强>
ROWID有效地存储行的INSERT
顺序。如果从表中删除行,则剩余行的ROWID将 NOT 更改 - 因此可能在ROWID序列中存在间隙。这是设计上的,没有解决方法,无法重新创建表并重新填充数据。
<强>可移植性强>
请注意,这仅适用于SQLite - 如果您需要移植它,您可能无法对其他SQL引擎执行相同的操作。添加一个可以使用和管理的EXPLICIT自动编号列(也称为IDENTITY
字段)会更好。