一:Sqlite数据类型:
SQLite 数据类型是一个用来指定任何对象的数据类型的属性,SQLite 中的每一列,每个变量和表达式都有相关的数据类型。
(1):Sqlite存储类:
存储类 | 描述 |
NULL | 表示一个null值 |
INTEGER | 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中 |
REAL | 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。 |
TEXT | 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 |
BLOB | 值是一个 blob 数据,完全根据它的输入存储 |
(2):布尔数据类型:
SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。
(3):date与Time数据类型:
SQLite 没有一个单独的用于存储日期和/或时间的存储类,但 SQLite 能够把日期和时间存储为 TEXT、REAL 或 INTEGER 值。
存储类 | 日期格式 |
TEXT | 格式为 "YYYY-MM-DD HH:MM:SS.SSS" 的日期。 |
REAL | 从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数 |
INTEGER | 从 1970-01-01 00:00:00 UTC 算起的秒数。 |
这里重点学习TEXT类型就可以了。
二:数据库的基本操作:
1--------------//创建数据库格式 $sqlite3 databaseName.db
C:Userspc>sqlite3 first.db; //在命令行先不要输入sqlite3命令进行sqlite环境,在命令行直接创建数据库,进入环境。 SQLite version 3.32.2 2020-06-04 12:58:43 Enter ".help" for usage hints. sqlite>
2----------------使用.open dataName; 进入SQLite后,输入.open fileName这个方式,也可以创建数据库,如果filename是已经建立的数据库文件,则打开。否则就创建。
C:Userspc>sqlite3; SQLite version 3.32.2 2020-06-04 12:58:43 Enter ".help" for usage hints. sqlite> .open second.db; sqlite>
3:创建表,注意先要进入目标数据库中,在该库中创建数据表。
sqlite> .open first.db; //进入该数据库,有则进入,如不存在该表,则创建。 sqlite> CREATE TABLE ME( ...> ID INT PRIMARY KEY NOT NULL, ...> AGE INT NOT NULL, ...> ADDRESS CHAR(50), ...> SALARY REAL ...> ); sqlite> .tables ME sqlite>
//在创建一个 HE
sqlite> CREATE TABLE HE(
...> ID INT PRIMARY KEY NOT NULL,
...> DEPT CHAR(50) NOT NULL,
...> EMP_ID INT NOT NULL
...> );
sqlite> .tables; //当你使用“;”时就会保存,有些指令如quit等结尾不能使用“;”号
Error: unknown command or invalid arguments: "tables;". Enter ".help" for help
sqlite> .tables
HE ME
sqlite> .databases
main: C:Userspcfirst.db; //显示了当前的数据库。
sqlite>
4:删除表:
sqlite> .tables HE sqlite> DROP TABLE HE; sqlite> .tables sqlite>
5:SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行。
INSERT INTO 语句有两种基本语法,如下所示:
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)] VALUES (value1, value2, value3,...valueN);
案例:
sqlite> .tables HE sqlite> DROP TABLE HE; sqlite> .tables sqlite> CREATE TABLE HE( ...> ID INT PRIMARY KEY NOT NULL, ...> DEPT CHAR(10) NOT NULL, ...> EMP_ID INT NOT NULL ...> ); sqlite> INSERT INTO HE (ID,DEPT,EMP_ID) ...> VALUES(1,'Paul',32); sqlite> INSERT INTO HE VALUES(2,'DZX',22); sqlite> SELECT *FROM HE; 1|Paul|32 2|DZX|22 sqlite>
sqlite> INSERT INTO HE(ID,DEPT,EMP_ID) ...> VALUES(3,'FFF',23), ...> (4,'fgg',44); sqlite> select *from HE; 1|Paul|32 2|DZX|22 3|FFF|23 4|fgg|44 sqlite>
6:SQlite运算符:
运算符是一个保留字或字符,主要用于 SQLite 语句的 WHERE 子句中执行操作,如比较和算术运算。
运算符用于指定 SQLite 语句中的条件,并在语句中连接多个条件。
(1):Sqlite的算术运算符:
sqlite> .mode line sqlite> select 10+20; 10+20 = 30 sqlite> select 10-20; 10-20 = -10 sqlite>
(2):比较运算符和where语句的使用
#SALARY 大于 50,000.00 的所有记录 sqlite> SELECT * FROM COMPANY WHERE SALARY > 50000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 #SALARY 等于 20,000.00 的所有记录 sqlite> SELECT * FROM COMPANY WHERE SALARY = 20000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 3 Teddy 23 Norway 20000.0 #SALARY 不等于 20,000.00 的所有记录 sqlite> SELECT * FROM COMPANY WHERE SALARY != 20000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 #SALARY 不等于 20,000.00 的所有记录 sqlite> SELECT * FROM COMPANY WHERE SALARY <> 20000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 #SALARY 大于等于 65,000.00 的所有记录 sqlite> SELECT * FROM COMPANY WHERE SALARY >= 65000; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
(3)逻辑运算符的使用:
#AGE 大于等于 25 且工资大于等于 65000.00 的所有记录 SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000; #AGE 大于等于 25 或工资大于等于 65000.00 的所有记录 SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000; #AGE 不为 NULL 的所有记录,结果显示所有的记录,意味着没有一个记录的 AGE 等于 NULL SELECT * FROM COMPANY WHERE AGE IS NOT NULL; #NAME 以 'Ki' 开始的所有记录,'Ki' 之后的字符不做限制 SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%'; #NAME 以 'Ki' 开始的所有记录,'Ki' 之后的字符不做限制 SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*'; #AGE 的值为 25 或 27 的所有记录 SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 ); #AGE 的值既不是 25 也不是 27 的所有记录 SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 ); #AGE 的值在 25 与 27 之间的所有记录 SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27; #使用 SQL 子查询,子查询查找 SALARY > 65000 的带有 AGE 字段的所有记录 #后边的 WHERE 子句与 EXISTS 运算符一起使用 #列出了外查询中的 AGE 存在于子查询返回的结果中的所有记录 SELECT AGE FROM COMPANY WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000); #使用 SQL 子查询,子查询查找 SALARY > 65000 的带有 AGE 字段的所有记录 #后边的 WHERE 子句与 > 运算符一起使用 #列出了外查询中的 AGE 大于子查询返回的结果中的年龄的所有记录 SELECT * FROM COMPANY WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
三:Sqlite语法:
(1):大小写敏感性
本质是不区分大小的,但是有个别命令是区分大小的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。