本节内容如何向SQLite表中插入,更新和删除数据。实现这些操作的SQL语句分别为INSERT,UPDATE和DELETE。这些语句是SQL数据操作语言(DML)中的一部分。
插入数据
INSERT语句用于向表中插入数据。我们这里有一个已经创建好的表Books,先看看创建这个表的SQL语句结构和表中的数据。
1
2
3
4
5
6
7
8
| sqlite> .schema BooksCREATE TABLE Books(Id integer PRIMARY KEY,Title text,Author text,Isbn text default 'not available');sqlite> SELECT * FROM Books;Id|Title|Author|Isbn1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-63|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|Isbn1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-63|OpenGL编程指南|Dave Shreiner|978-7-111-29450-44|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|Isbn1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-63|OpenGL编程指南|Dave Shreiner|978-7-111-29450-44|Visual C++程序开发|明日科技|978-7-115-20107-25|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|Isbn1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-63|OpenGL编程指南|Dave Shreiner|978-7-111-29450-44|Visual C++程序开发|明日科技|978-7-115-20107-25|21天学通Linux C编程|马玉军等|978-7-12110622-46|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 NULLsqlite> INSERT INTO Books(Id,Title) VALUES(7,'红高粱');sqlite> SELECT * FROM Books;Id|Title|Author|Isbn1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-63|OpenGL编程指南|Dave Shreiner|978-7-111-29450-44|Visual C++程序开发|明日科技|978-7-115-20107-25|21天学通Linux C编程|马玉军等|978-7-12110622-46|PHP开发宝典|刘欣等|978-7-111-38093-17|红高粱|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 uniquesqlite> INSERT OR REPLACE INTO Books ...> VALUES(4,'过得刚好','郭得 纲','978-550-21422-4);sqlite> SELECT * FROM Books;Id|Title|Author|Isbn1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-63|OpenGL编程指南|Dave Shreiner|978-7-111-29450-44|过得刚好|郭得纲|978-550-21422-45|21天学通Linux C编程|马玉军等|978-7-12110622-46|PHP开发宝典|刘欣等|978-7-111-38093-17|红高粱||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 BooksCREATE 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|Isbn1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP2|鸟哥的Linux私房菜|鸟哥|978-7-115-22626-63|OpenGL编程指南|Dave Shreiner|978-7-111-29450-44|过得刚好|郭得纲|978-550-21422-45|21天学通Linux C编程|马玉军等|978-7-12110622-46|PHP开发宝典|刘欣等|978-7-111-38093-17|红高粱||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|Isbn1|C Primer Plus|Stephen Prata|978-7-115-13022-8/TP3|OpenGL编程指南|Dave Shreiner|978-7-111-29450-44|过得刚好|郭得纲|978-550-21422-45|21天学通Linux C编程|马玉军等|978-7-12110622-46|PHP开发宝典|刘欣等|978-7-111-38093-17|红高粱||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|Isbn4|过得刚好|于谦|978-550-21422-4 |
可以看出Id为4的行中列Author的数据已经被成功修改。
这一节我们主要介绍如何向表中插入、删除和修改数据。
没有评论:
发表评论