跳转至

SQLite 插入,更新,删除数据

原文: http://zetcode.com/db/sqlite/datamanipulation/

在 SQLite 教程的这一部分中,我们将插入,更新和删除 SQLite 表中的数据。 我们将使用INSERTDELETEUPDATE语句。 这些语句是 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');

我们使用IdNamePrice列创建一个新表Cars

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语句省略了最后两列。 这些列将填充默认值,如果没有默认值,则填充NULLName列没有默认值,因此有一个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约束失败: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表的内容。

我们可以在一个语句中同时使用INSERTSELECT语句。

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 语句将Id=3列的汽车名称设置为'Skoda Octavia'。

sqlite> SELECT * FROM Cars WHERE Id=3;
3|Skoda Octavia|9000

该行已正确更新。

在 SQLite 教程的这一部分中,我们已经在数据库表中插入,删除和更新了数据。



回到顶部