SQLite 插入、更新、删除数据
最后修改于 2020 年 7 月 6 日
在本 SQLite 教程中,我们将从 SQLite 表中插入、更新和删除数据。我们将使用 INSERT、DELETE 和 UPDATE 语句。这些语句是 SQL 数据操作语言 (DML) 的一部分。
SQLite 插入数据
INSERT 语句用于将数据插入表中。我们将创建一个新表来执行我们的示例。
sqlite> DROP TABLE IF EXISTS Cars; sqlite> CREATE TABLE Cars(Id INTEGER PRIMARY KEY, Name TEXT, ...> Price INTEGER DEFAULT 'Not available');
我们创建一个新表 Cars,其中包含 Id、Name 和 Price 列。
sqlite> INSERT INTO Cars(Id, Name, Price) VALUES(1, 'Audi', 52642);
这是经典的 INSERT 语句。我们在表名后指定了所有列名,在 VALUES 关键字后指定了所有值。第一行被添加到表中。
sqlite> INSERT INTO Cars(Name, Price) VALUES('Mercedes', 57127);
我们向 Cars 表中添加一辆新车。我们省略了 Id 列。Id 列定义为 INTEGER PRIMARY KEY,此类列在 SQLite 中是自动递增的。这意味着 SQLite 库本身将添加一个新的 Id。
sqlite> .headers on sqlite> SELECT * FROM Cars; Id|Name|Price 1|Audi|52642 2|Mercedes|57127
这是我们目前在 Cars 表中的内容。
sqlite> INSERT INTO Cars VALUES(3, 'Skoda', 9000);
在此 SQL 语句中,我们没有在表名后指定任何列名。在这种情况下,我们必须提供所有值。
sqlite> .nullvalue NULL
.nullvalue 命令告诉 SQLite 将 NULL 值显示为 NULL。默认情况下,SQLite 为 NULL 值显示空字符串。
sqlite> INSERT INTO Cars(Id) VALUES(4);
INSERT 语句省略了最后 2 列。此类列将填充默认值,如果没有默认值,则填充 NULL。Name 列没有默认值,因此有一个 NULL 值。在 CREATE TABLE 语句中,我们指定了 Price 列具有“Not available”默认值。
sqlite> SELECT * FROM Cars WHERE Id=4; Id|Name|Price 4|NULL|Not available
在第二列中,我们有一个 NULL 值。第三列有默认值“Not available”字符串。
sqlite> INSERT INTO Cars VALUES(4, 'Volvo', 29000); Error: UNIQUE constraint failed: Cars.Id
假设我们想将所有信息放入第四列。尝试将新数据插入到现有行会产生以下错误:UNIQUE constraint failed: Cars.Id。
sqlite> INSERT OR REPLACE INTO Cars VALUES(4, 'Volvo', 29000);
在这种情况下,我们可以使用 INSERT OR REPLACE 语句。这也可以通过 UPDATE 语句完成。
sqlite> SELECT * FROM Cars WHERE Id=4; Id|Name|Price 4|Volvo|29000
现在我们在第四行中拥有所有信息。
sqlite> INSERT OR FAIL INTO Cars VALUES(4, 'Bentley', 350000); Error: UNIQUE constraint failed: Cars.Id
INSET OR FAIL INTO 语句等于 INSERT INTO 语句。它只是更具体地说明如果发生错误,它将失败。
sqlite> INSERT OR IGNORE INTO Cars VALUES(4, 'Bentley', 350000); sqlite> SELECT * FROM Cars WHERE Id=4; Id|Name|Price 4|Volvo|29000
INSERT OR IGNORE INTO 语句忽略错误消息。SELECT 语句显示最后两个语句没有修改第四行。
自 SQLite 版本 3.7.11 起,可以使用一个 INSERT 语句插入多行。
sqlite> CREATE TEMP TABLE Ints(Id INTEGER PRIMARY KEY, Val INTEGER);
我们将使用单列 Ints 表来显示多行 INSERT 语句。该表的唯一列存储整数。
sqlite> INSERT INTO Ints(Val) VALUES (1), (3), (5), (6), (7), (8), (6), (4), (9);
我们一次将九行插入到表中。这些行位于 VALUES 关键字之后,并由逗号分隔。
sqlite> SELECT * FROM Ints; Id|Val 1|1 2|3 3|5 4|6 5|7 6|8 7|6 8|4 9|9
这是 Ints 表的内容。
我们可以一起使用 INSERT 和 SELECT 语句。
sqlite> CREATE TABLE Cars2(Id INTEGER PRIMARY KEY, Name TEXT, Price INTEGER);
首先,我们创建一个名为 Cars2 的新表。
sqlite> INSERT INTO Cars2 SELECT * FROM Cars;
在这里,我们将所有数据从 Cars 表插入到 Cars2 表中。
sqlite> SELECT * FROM Cars2; Id|Name|Price 1|Audi|52642 2|Mercedes|57127 3|Skoda|9000 4|Volvo|29000
我们验证一下。
SQLite 删除数据
DELETE 关键字用于从表中删除数据。首先,我们将从表中删除一行。我们将使用之前创建的 Cars2 表。
sqlite> DELETE FROM Cars2 WHERE Id=1;
我们删除 Id 为 1 的行。
sqlite> SELECT * FROM Cars2; Id|Name|Price 2|Mercedes|57127 3|Skoda|9000 4|Volvo|29000
我们验证第一行是否缺失。
sqlite> DELETE FROM Cars2;
此 SQL 语句删除表中的所有数据。
sqlite> SELECT Count(Id) AS '# of cars' FROM Cars2; # of cars --------------- 0
此 SQL 语句确认 Cars2 表中现在没有行。
sqlite> .read cars.sql sqlite> SELECT * FROM Cars; 1|Audi|52642 2|Mercedes|57127 3|Skoda|9000 4|Volvo|29000 5|Bentley|350000 6|Citroen|21000 7|Hummer|41400 8|Volkswagen|21600
使用 .read 元命令,我们创建一个新的 Cars 表。(该表的 SQL 可以在本教程的第一章中找到。)
SQLite 更新数据
UPDATE 语句用于修改存储在数据库表中的零行或多行中的值的子集。
假设我们想在 Cars 表中将“Skoda”更改为“Skoda Octavia”。以下语句显示了如何完成此操作
sqlite> .read cars.sql sqlite> UPDATE Cars SET Name='Skoda Octavia' WHERE Id=3;
SQL 语句将汽车的名称设置为“Skoda Octavia”,对于 Id=3 的列。
sqlite> SELECT * FROM Cars WHERE Id=3; 3|Skoda Octavia|9000
该行已正确更新。
在本 SQLite 教程中,我们已在数据库表中插入、删除和更新了数据。