database(DB), structured query language
SQLite
一、理论的学习
SQLite是一个很轻便的嵌入式数据库。
- 第一步是安装配置SQLite
- 系统环境变量和目录路径,命令提示符在任何位置使用sqlite3
- 数据库就是以
.db为后缀的普通文件,使用命令sqlite3 mydate.db创建文件。
- 建立表(CREATE TABLE)表是组成数据库存储数据的基本单位,由行和列组成。建立表时需要定义列的名称、数据类型和约束。
一、语法结构
CREATE TABLE [IF NOT EXISTS] 表名字 ( 列1名字 数据类型 [约束] [DFAULT 默认值], 列2名字 数据类型 [约束], );二、SQLite特有的数据类型:SQLite使用动态类型。意味着数据存储时记录值本身的类型,而不是列定义的类型。列定义时可以指定五种类型亲和(Type Affinity),用来提高可读性和索引性能。
- INTEGER:整数
- REAL:浮点数
- TEXT:文本
- BLOB:二进制大对象
- MUMERIC:数字倾向
三、常见的约束:
- NOT NULL:该列不能为空
- UNIQUE:该列的值必须唯一
- PRIMARY KEY:主键,唯一标识一行,隐含NOT NULL 和UNIQUE(在一个表中只能有一个)
- AUTOINCREMENT:
- DEFAULT:
- CHECK:插入或者更新时检查条件是否满足
二、指令简单目录
- 创建文件指令:
sqlite3 mydate.db - 查看已经被创建的表格指令:
.table - 查看表结构指令:
.schema mysid - 表所有行和列显示指令:
SELECT * FROM mysid;
三、实践的角度
我准备用SQLite存角色数据。角色主要需要记录的信息有:名字、别名、性别、身高、外形、性格、特技、负面评价、职业;我在这个过程中出于需求自然而然地分出了单值字段和多值字段。
- 单值字段:名字、性别、身高
- 多值字段:别名、外形、性格、特技、负面评价、职业
(一)基于需求搭建表格结构
根据单值搭建demo表的结构,注明:表取名“mysid”
CREATE TABLE mysid (-> 新建表格 “mysid”id INTEGER PRIMARY KEY AUTOINCREMENT,-> 非手动的编号栏(1、2、3……)name TEXT NOT NULL,-> 不可以为空gender TEXT,-> 可以为空height TEXT-> 可以为空);创建后.table查看已经被创建的表格。.schema mysid查看表结构
INSERT INTO mysid (name,gender,height)
VALUES ('因益','未知','未知')- 操作时发现的错点:
- 双引号属于标识符,字符串使用单引号。
(二)插入数据
- 插入数据时的两个方案:
- 指定列名
INSERT INTO mysid (name,gender,height)- `VALUES ('','',''
- );`
- 根据列数补全(四个)所有值
- `INSERT INTO mysid
- VALUES (NULL,'','',''注:NULL表示把之前的id列留空,自增机制自动填上正确的技术。
- ); 把表里面所有行和列都显示出来的指令:
SELECT * FROM mysid;
- 指定列名
(三)删除数据
用稳妥的方式rowid删除,rowid是SQLite内部每一行自动分配的唯一编号。
DELETE FROM mysid WHERE rowid = 4准确删除想删的第4行 其他的删除方案DELETE FROM mysid WHERE name = '因益' AND gender = '未知' AND rowid =2;表示删除目标为定位在name为因益,性别为未知的rowid为2的那一行。
(四)多字段方案
- VALUES(NULL,'戚月泺','女','10月20日',167,55,NULL,'冷白','黑渐变白','紫','血型血统未知','罗酆域','暂无组织','吸取他人修为,符剑双修阵法略通','变异雷灵根','符簨和剑','做饰品','天生炉鼎'
- ); VALUES(NULL,'商咲茗','女','4月5日',160,45,NULL,'白皙','墨青色','青色','O型、血统未知','漱月阁二师姐','漱月阁','符修,对阵法也颇有兴趣','水木灵根','符簨','看话本子、听八卦','穿越人士' ); VALUES(NULL,'茗清嘉','女','8月4日',162,49,NULL,'白皙','白发','玖红','兔族血统','灵虚境','灵虚境','主修阵法,兼攻言灵、召唤、用毒','冰灵根','暂无','调香、品茶','目盲(伪装,但视力确实不好)' );
(x1...> name TEXT, (x1...> gender TEXT, (x1...> birthday TEXT, (x1...> height REAL, (x1...> weight REAL, (x1...> bwh REAL, (x1...> skin TEXT, (x1...> hair TEXT, (x1...> eye TEXT, (x1...> ancestry TEXT, (x1...> nationality TEXT, (x1...> faction TEXT, (x1...> abilities TEXT, (x1...> attributes TEXT, (x1...> weapon TEXT, (x1...> hobbies TEXT, (x1...> specialties TEXT (x1...> );
四、具体实践
(一)项目《弱树》(ruoshu)
- 在本地文件夹(mydata)
sqlite3 ruoshu.db为项目《弱树》建立sqlite库。 - 根据单值搭建ruoshu项目的第一张表,注明:表取名“roles”
- 序号、姓名、年龄、性别、身高、样貌、爱好、教育背景、工作状况、
CREATE TABLE roles (-> 新建表格 “roles”id INTEGER PRIMARY KEY AUTOINCREMENT,-> 非手动的编号栏(1、2、3……)name TEXT NOT NULL,-> 不可以为空age TEXT,gender TEXT,-> 可以为空height TEXT,-> 可以为空appearance TEXT,hobbies TEXT,education TEXT,work TEXT,family TEXT);
- 后续又单独添加新列——房间号:
- ALTER TABLE
rolesADD COLUMNroomTEXT;
- ALTER TABLE
- 更新数据
- UPDATE
rolesSETroom= '202' WHERE name = '李知旭';`
- UPDATE
SELECT name, gender FROM roles;
修改命令行的输出模式的指令:
- .mode list
- .mode column —— 按列对齐显示,也不带引号。
- .mode markdown —— 以 Markdown 表格形式输出。
- .mode box —— 带边框显示。