我正在使用Unix命令行sqlite3命令工具处理一个小型SQLite数据库。我的架构是:
sqlite> .schema
CREATE TABLE status (id text, date integer, status text, mode text);
现在我想将列'mode'设置为所有条目的字符串“Status”。但是,如果我键入:
sqlite> UPDATE status SET mode="Status";
它不是将列'mode'设置为字符串“Status”,而是将每个条目设置为当前位于“status”列中的值。相反,如果我键入以下内容,它会执行预期的行为:
sqlite> UPDATE status SET mode='Status';
这是正常行为吗?
答案 0 :(得分:1)
这也是常见问题解答: -
我的WHERE子句表达式column1 =“column1”不起作用。它会导致返回表的每一行,而不仅仅是column1的值为“column1”的行。
在SQL中的字符串文字周围使用单引号而不是双引号。这就是SQL标准所要求的。您的WHERE子句表达式应为:column1 ='column2'
SQL在包含特殊字符或关键字的标识符(列名或表名)周围使用双引号。所以双引号是一种转义标识符名称的方法。因此,当你说column1 =“column1”等于column1 = column1时,显然总是如此。
答案 1 :(得分:0)
是的,这在SQL中是正常的。
单引号用于字符串值;双引号用于标识符(如表名或列名)。 (参见documentation。)