Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL按顺序更新行_Sql_Sqlite - Fatal编程技术网

使用SQL按顺序更新行

使用SQL按顺序更新行,sql,sqlite,Sql,Sqlite,我有一个4列的表。第一列对于每一行都是唯一的,但它是一个字符串(URL格式)。 我想更新我的表,但不是使用“WHERE”,而是按顺序更新行。 第一个查询将更新第一行,第二个查询将更新第二行,依此类推 这方面的SQL代码是什么?我正在使用Sqlite 编辑:我的表模式 CREATE table ( url varchar(150), views int(5), clicks int(5) ) Edit2:我现在正在做的是一个SQL查询循环 更新表集视图=5,单击=10,其中url=”http:/

我有一个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秒。由于循环按顺序更新行,因此第一个查询更新第一行;我在想,按顺序更新行是否比使用WHERE子句更快,WHERE子句需要浏览400万行。

如果不使用WHERE,您将无法执行所需操作,因为这是从表中选择行以进行读取、更新或删除的唯一方法。因此,您需要使用:

UPDATE table SET url = ... WHERE url = '<whatever>'
这意味着您可以直接引用此列来执行所需操作:

UPDATE table SET url = ... WHERE ROWID = 1
您仍然需要使用
WHERE
子句,但这允许您以插入顺序访问行,而无需执行任何其他操作

警告
ROWID有效地存储行的
INSERT
顺序。如果从表中删除行,则剩余行的ROWID将不会更改-因此ROWID序列中可能存在间隙。这是经过设计的,除了重新创建表和重新填充数据外,没有其他解决方法

便携性

请注意,这只适用于SQLite-如果您需要移植它,您可能无法对其他SQL引擎执行相同的操作。最好是添加一个明确的自动编号列(也称为
标识
字段),您可以使用和管理该列。

您确实需要发布DDL。但你似乎没有以正确的方式找到解决方案。我补充道。很简单,请提供更多细节。为了什么?哪个栏目?想要像这样一行一行地进行的过程的本质是什么?你到底想做什么或者为什么?你需要更多地解释你想实现什么。例如,在标准SQL中,表的内容在更新前后的显示和示例…在表中,行没有顺序-出于所有目的,它们将被视为一个集合。感谢ROWID解决方案,我正在寻找的。我希望它有一些性能提升:)
UPDATE table SET url = ... WHERE ROWID = 1