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 教程中,我们已在数据库表中插入、删除和更新了数据。