|
1 |
| -SQLite |
| 1 | +SQLite 数据库 |
2 | 2 |
|
3 |
| -SQLite is an embedded SQL database engine. |
| 3 | +SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world. SQLite is built into all mobile phones and most computers and comes bundled inside countless other applications that people use every day. |
4 | 4 |
|
5 |
| -SQLite is an in-process library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. |
| 5 | +SQLite 是一个由 C 语言实现的嵌入式的支持SQL查询的小型数据库引擎。 |
| 6 | +SQLite 项目开始于2000年05月09日。 |
6 | 7 |
|
7 |
| -The SQLite project was started on 2000-05-09. |
| 8 | +更多内容可查看其[网站](https://www.sqlite.org)。 |
8 | 9 |
|
9 |
| -## Command |
10 | 10 |
|
11 |
| -(1) enter: "sqlite3" |
| 11 | +## 安装 |
12 | 12 |
|
13 |
| -``` |
14 |
| -$ sqlite3 |
15 |
| -SQLite version 3.34.0 2020-12-01 16:14:00 |
| 13 | +Linux 和 Mac 基本都会预装。 |
| 14 | + |
| 15 | +Mac环境可以使用 brew 安装: brew install sqlite3 |
| 16 | + |
| 17 | + |
| 18 | +直接输入 `sqlite3` 可进入命令行交互界面(sqlite shell): |
| 19 | + |
| 20 | +```sh |
| 21 | +$ sqlite3 |
| 22 | +SQLite version 3.36.0 2021-06-18 18:36:39 |
16 | 23 | Enter ".help" for usage hints.
|
17 | 24 | Connected to a transient in-memory database.
|
18 | 25 | Use ".open FILENAME" to reopen on a persistent database.
|
| 26 | +sqlite> |
19 | 27 | sqlite> .quit
|
20 | 28 | $
|
21 | 29 | ```
|
22 | 30 |
|
23 |
| -use `.quit` to exit from sqlite shell. |
| 31 | +退出直接输入 `.quit` 或 `.exit` 即可。 |
| 32 | + |
| 33 | + |
| 34 | + |
| 35 | +## 基本操作 Command |
| 36 | + |
| 37 | +直接使用 sqlite3 命令进入 sqlite shell : |
| 38 | + |
| 39 | +$ sqlite3 |
| 40 | +SQLite version 3.36.0 2021-06-18 18:36:39 |
| 41 | +Enter ".help" for usage hints. |
| 42 | +Connected to a transient in-memory database. |
| 43 | +Use ".open FILENAME" to reopen on a persistent database. |
| 44 | +sqlite> |
| 45 | + |
| 46 | + |
| 47 | +使用 `.open test.db` 创建一个名为 `test.db` 的 sqlite 数据库。 |
| 48 | + |
| 49 | +$ sqlite> .open test.db |
| 50 | + |
| 51 | + |
| 52 | +创建一个用户表 (users): |
| 53 | + |
| 54 | +sqlite> CREATE TABLE users( |
| 55 | + id INTEGER PRIMARY KEY AUTOINCREMENT, |
| 56 | + name TEXT NOT NULL, |
| 57 | + score REAL |
| 58 | +); |
| 59 | + |
| 60 | + |
| 61 | +创建一个商品表 (products): |
| 62 | + |
| 63 | +sqlite> CREATE TABLE products( |
| 64 | + id INTEGER PRIMARY KEY AUTOINCREMENT, |
| 65 | + title TEXT NOT NULL, |
| 66 | + stock INT NOT NULL DEFAULT 0, |
| 67 | + price REAL |
| 68 | +); |
| 69 | + |
| 70 | + |
| 71 | +使用 AUTOINCREMENT 指定字段为自增字段,注意自增字段类型必须为 INTEGER PRIMARY KEY。 |
| 72 | + |
| 73 | +``` |
| 74 | +sqlite> CREATE TABLE user3( |
| 75 | + id INT PRIMARY KEY AUTOINCREMENT, |
| 76 | + name TEXT NOT NULL |
| 77 | +); |
| 78 | +Error: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY |
| 79 | +``` |
| 80 | + |
| 81 | +注意 INT 不行,必须为 INTEGER 。 |
| 82 | + |
| 83 | + |
| 84 | +查看已有的表 (.tables): |
| 85 | + |
| 86 | +sqlite> .tables |
| 87 | + products users |
| 88 | + |
| 89 | +删除表 (DROP): |
| 90 | + |
| 91 | +DROP TABLE users; |
| 92 | +DROP TABLE products; |
| 93 | + |
| 94 | + |
| 95 | +INSERT 添加数据: |
| 96 | + |
| 97 | +插入一条数据: |
| 98 | + |
| 99 | +INSERT INTO users (name,score) VALUES ("admin", 100); |
| 100 | + |
| 101 | +插入多条数据: |
| 102 | + |
| 103 | +INSERT INTO users (name,score) VALUES |
| 104 | + ("张三", 33.3), |
| 105 | + ("李四", 44.4), |
| 106 | + ("王五", 85.5), |
| 107 | + ("赵六", 86.6); |
| 108 | + |
| 109 | +SELECT 查询数据: |
| 110 | + |
| 111 | +sqlite> SELECT * FROM users; |
| 112 | +1|admin|10.0 |
| 113 | +2|张三|33.3 |
| 114 | +3|李四|44.4 |
| 115 | +4|王五|85.5 |
| 116 | +5|赵六|86.6 |
| 117 | + |
| 118 | +sqlite> SELECT * FROM users WHERE score > 60; |
| 119 | +4|王五|85.5 |
| 120 | +5|赵六|86.6 |
| 121 | + |
| 122 | +sqlite> SELECT * FROM users ORDER BY score DESC LIMIT 1; |
| 123 | +5|赵六|86.6 |
| 124 | + |
| 125 | + |
| 126 | +UPDATE 更新数据: |
| 127 | + |
| 128 | +sqlite> UPDATE users SET score = '44.8' WHERE ID = 3; |
| 129 | + |
| 130 | + |
| 131 | +DELETE 删除数据: |
| 132 | + |
| 133 | +DELETE FROM users WHERE id=1; |
| 134 | + |
| 135 | + |
| 136 | +## 数据库导入与导出 |
| 137 | + |
| 138 | +使用 .dump 命令导出 sql 语句。 |
| 139 | + |
| 140 | +``` |
| 141 | +$ sqlite3 test.db .dump > test.sql |
| 142 | +``` |
| 143 | + |
| 144 | +查看导出的SQL语句: |
| 145 | + |
| 146 | +```sh |
| 147 | +$ cat test.sql |
| 148 | +PRAGMA foreign_keys=OFF; |
| 149 | +BEGIN TRANSACTION; |
| 150 | +CREATE TABLE users( |
| 151 | + id INTEGER PRIMARY KEY AUTOINCREMENT, |
| 152 | + name TEXT NOT NULL, |
| 153 | + score REAL |
| 154 | +); |
| 155 | +INSERT INTO users VALUES(2,'张三',33.299999999999997158); |
| 156 | +INSERT INTO users VALUES(3,'李四',44.799999999999997159); |
| 157 | +INSERT INTO users VALUES(4,'王五',85.500000000000000001); |
| 158 | +INSERT INTO users VALUES(5,'赵六',86.599999999999994317); |
| 159 | +CREATE TABLE products( |
| 160 | + id INTEGER PRIMARY KEY AUTOINCREMENT, |
| 161 | + title TEXT NOT NULL, |
| 162 | + stock INT NOT NULL DEFAULT 0, |
| 163 | + price REAL |
| 164 | +); |
| 165 | +CREATE TABLE user3( |
| 166 | + id INT PRIMARY KEY NOT NULL, |
| 167 | + name TEXT NOT NULL |
| 168 | +); |
| 169 | +DELETE FROM sqlite_sequence; |
| 170 | +INSERT INTO sqlite_sequence VALUES('users',5); |
| 171 | +COMMIT; |
| 172 | +``` |
| 173 | + |
| 174 | +导入新数据库: |
| 175 | + |
| 176 | +``` |
| 177 | +$ sqlite3 myNewDB.db < test.sql |
| 178 | +``` |
24 | 179 |
|
25 | 180 |
|
26 |
| -(2) enter: "sqlite3 test.db". This will create a new database named "test.db" |
| 181 | +查看新的数据库: |
27 | 182 |
|
| 183 | +``` |
| 184 | +$ sqlite3 myNewDB.db |
| 185 | +SQLite version 3.36.0 2021-06-18 18:36:39 |
| 186 | +Enter ".help" for usage hints. |
| 187 | +sqlite> .tables |
| 188 | +products user2 users |
| 189 | +sqlite> .quit |
| 190 | +``` |
28 | 191 |
|
29 | 192 |
|
30 |
| -## References |
| 193 | +## 参考资料 References |
31 | 194 |
|
32 | 195 | https://www.sqlite.org/
|
33 | 196 | https://github.com/jmoiron/sqlx
|
34 | 197 | https://github.com/go-gorm/gorm
|
| 198 | +https://www.runoob.com/sqlite/sqlite-tutorial.html |
0 commit comments