本节内容如何向SQLite表中插入,更新和删除数据。实现这些操作的SQL语句分别为INSERT,UPDATE和DELETE。这些语句是SQL数据操作语言(DML)中的一部分。
插入数据
INSERT语句用于向表中插入数据。我们这里有一个已经创建好的表Books,先看看创建这个表的SQL语句结构和表中的数据。
1
2
3
4
5
6
7
8
| sqlite> . schema Books CREATE TABLE Books(Id integer PRIMARY KEY ,Title text,Author text, Isbn text default 'not available' ); sqlite> SELECT * FROM Books; Id|Title|Author|Isbn 1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP 2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-6 3|OpenGL编程指南|Dave Shreiner|978-7-111-29450-4 |
表Books有四列,字段名分别为Id,Title,Autor和Isbn,其中Id定义为INTEGER PRIMARY kEY,这表示Id为主键,其值是唯一标示一行数据的,同时Id的值是自动增加的,这意味着SQLite库为增加一个新的Id。
1
2
3
4
5
6
7
8
| sqlite> INSERT INTO Books(Id,Title,Author,Isbn) ...> VALUES (4, 'Visual C++程序开发' , '明日科技' , '978-7-115-20107-2' ); sqlite> SELECT * FROM Books; Id|Title|Author|Isbn 1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP 2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-6 3|OpenGL编程指南|Dave Shreiner|978-7-111-29450-4 4|Visual C++程序开发|明日科技|978-7-115-20107-2 |
上面我们向表Books插入一行新的数据。
1
2
3
4
5
6
7
8
9
| sqlite> INSERT INTO Books(Title,Author,Isbn) ...> VALUES ( '21天学通Linux C编程' , '马玉军等' , '978-7-12110622-4' ); sqlite> SELECT * FROM Books; Id|Title|Author|Isbn 1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP 2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-6 3|OpenGL编程指南|Dave Shreiner|978-7-111-29450-4 4|Visual C++程序开发|明日科技|978-7-115-20107-2 5|21天学通Linux C编程|马玉军等|978-7-12110622-4 |
这里我们向表中插入一行新的数据,但我们没有指定Id的值,可以看到没指定Id的值时,Id的值是自动递增的。
1
2
3
4
5
6
7
8
9
| sqlite> INSERT INTO Books VALUES (6, 'PHP开发宝典' , '刘欣等' , '978-7-111-38093-1' ); sqlite> SELECT * FROM Books; Id|Title|Author|Isbn 1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP 2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-6 3|OpenGL编程指南|Dave Shreiner|978-7-111-29450-4 4|Visual C++程序开发|明日科技|978-7-115-20107-2 5|21天学通Linux C编程|马玉军等|978-7-12110622-4 6|PHP开发宝典|刘欣等|978-7-111-38093-1 |
上面的插入语句我们在表名后没有指定任何列名。在这种情况下我们需要指定所有的列值。
1
| sqlite> .nullvalue NULL |
.nullvalue NULL告诉SQLite以NULL代表空值。所以SQLite默认情况下以NULL代替空字符串。
1
2
3
4
5
6
7
8
9
10
11
| sqlite> .nullvalue NULL sqlite> INSERT INTO Books(Id,Title) VALUES (7, '红高粱' ); sqlite> SELECT * FROM Books; Id|Title|Author|Isbn 1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP 2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-6 3|OpenGL编程指南|Dave Shreiner|978-7-111-29450-4 4|Visual C++程序开发|明日科技|978-7-115-20107-2 5|21天学通Linux C编程|马玉军等|978-7-12110622-4 6|PHP开发宝典|刘欣等|978-7-111-38093-1 7|红高粱| NULL | not available |
上面SQL插入语句省略了后两个列值。这些列会被默认值或NULL填充。Author列没有默认值,因此以NULL替代。我们在创建表时指定Isbn列的默认值为'not available',因此这里会用该值来替代。
1
2
3
4
5
6
7
8
9
10
11
12
13
| sqlite> INSERT INTO Books VALUES (4, '过得刚好' , '郭得纲' , '978-7-550-21422-4' ); Error: PRIMARY KEY must be unique sqlite> INSERT OR REPLACE INTO Books ...> VALUES (4, '过得刚好' , '郭得 纲' ,'978-550-21422-4); sqlite> SELECT * FROM Books; Id|Title|Author|Isbn 1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP 2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-6 3|OpenGL编程指南|Dave Shreiner|978-7-111-29450-4 4|过得刚好|郭得纲|978-550-21422-4 5|21天学通Linux C编程|马玉军等|978-7-12110622-4 6|PHP开发宝典|刘欣等|978-7-111-38093-1 7|红高粱|| not available |
这里我们向已经存在的行插入新的数据,结果会提示错误。这是因为Id是主键,其值是唯一的,不能有重复。这种情况下我们想插入数据,可以使用INSERT OR REPLACE语句,这样可以将已经存在的行的数据进行替换,当然使用UPDATE语句也可以实现同样功能。
我们可以使用INSERT语句一次性向表中插入多行数据。下面我们创建一个表Ints,并向表中一次插入五行数据。
1
2
3
4
5
6
7
8
9
10
| sqlite> CREATE TABLE Ints(Id INTEGER PRIMARY KEY ,Val INTEGER ); sqlite> INSERT INTO Ints(Val) VALUES (1),(2),(3),(4),(5); sqlite> SELECT * FROM Ints; Id Val -------------------- -------------------- 1 1 2 2 3 3 4 4 5 5 |
这是Ints表中的所有数据。
我们可以在一个SQL语句中将INSERT和SELECT语句结合起来一起使用。我们先创建一个和Books表结构一样的表Books2。
1
2
3
4
5
| sqlite> . schema Books CREATE TABLE Books(Id integer PRIMARY KEY ,Title text,Author text, Isbn text default 'not available' ); sqlite> CREATE TABLE Books2(Id integer PRIMARY KEY ,Title text,Author text, Isbn text default 'not available' ); |
1
2
3
4
5
6
7
8
9
10
| sqlite> INSERT INTO Books2 SELECT * FROM Books; sqlite> SELECT * FROM Books2; Id|Title|Author|Isbn 1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP 2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-6 3|OpenGL编程指南|Dave Shreiner|978-7-111-29450-4 4|过得刚好|郭得纲|978-550-21422-4 5|21天学通Linux C编程|马玉军等|978-7-12110622-4 6|PHP开发宝典|刘欣等|978-7-111-38093-1 7|红高粱|| not available |
我们将Books中的所有数据插入到表Books2中。
删除数据
DELETE语句用于从表中删除数据。首先我们从表中删除一行数据。我们使用先前创建的表Books2。
1
2
3
4
5
6
7
8
9
| sqlite> DELETE FROM Books2 WHERE Id = 2; sqlite> SELECT * FROM Books2; Id|Title|Author|Isbn 1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP 3|OpenGL编程指南|Dave Shreiner|978-7-111-29450-4 4|过得刚好|郭得纲|978-550-21422-4 5|21天学通Linux C编程|马玉军等|978-7-12110622-4 6|PHP开发宝典|刘欣等|978-7-111-38093-1 7|红高粱|| not available |
我们将Id为2的行删除。查看表中的所有数据,第二行数据已经被删除。
1
| sqlite> DELETE FROM Books2; |
该语句将表中的所有数据删除。
更新数据
UPDATE语句用于修改表中指定行的列值。如果我们想将Books表中的'郭德纲'改为'于谦',我们可以使用下面的语句来实现。
1
2
3
4
| sqlite> UPDATE Books SET Author= '于谦' WHERE Id = 4; sqlite> SELECT * FROM Books WHERE Id = 4 ; Id|Title|Author|Isbn 4|过得刚好|于谦|978-550-21422-4 |
可以看出Id为4的行中列Author的数据已经被成功修改。
这一节我们主要介绍如何向表中插入、删除和修改数据。
没有评论:
发表评论