数据库大概原理: 数据按树型结构存储,查找数据时只需比对几次就能查出来。数据量增大时,查询时间成对数慢速增长。
1. 为什么使用数据库?
- 持久化。内存中的变量当程序重启和电脑断电时丢失数据,而硬盘可以长时间、持久的存储数据。数据存储到硬盘上的过程叫持久化。
- 数据库更加专业强大。 远比纯文本文档、excel表格强大,增删改查和统计数据
库(scheme)、表(table)、字段(field)、值(value)、主键(primary key)、外键(foreign key)。
2. 常见数据库介绍
- sqlite:轻量级数据库。功能基础简单,在数据较少情况下性能并不比重型数据库低。优点 python解释器内置驱动,无需安装直接使用,适合初学数据库。手机应用使用的就是它。
- mysql:最流行的数据库。中型。开源、php流行推动了mysql的流行
- PostgreSQL:大象数据库,号称最先进的数据库。从大学兴起的开源数据库、架构优秀、功能前卫,数据量很大的时候,性能衰减不明显。消耗相同硬件资源的情况下性能和稳定性优于mysql数据库。django odoo等python框架官方推荐使用此数据库。但是目前市场占有率还不高。
- oracle:地位很高的商业数据库。昂贵、稳定、功能强大,常与java配合使用。
- DB2 sybase MSSQL等,其他的商用数据库。
- access:微软office套件中包含,轻量,由于数据库门槛,使用者不多。
no-sql(no only sql)型数据库:
- mongodb 存储单位是文档,json(类似后端dict)结构整个存进去。数据常放在内存中以获得查询性能,定期把数据持久化到硬盘上。
- redis 键值对“name”=“小明”,
- 常见的数据库字段类型
- 数值、整数
INT INTEGER 占4个字节,2**32,可以表示常用范围整数。
(不常用)TINYINT(1字节) SMALLINT(2字节) MEDIUMINT(3字节) BIGINT(8字节) 适用身份证号、VIP号码比较长的编号。 - 浮点数
FLOAT(4字节) 单精度小数
DOUBLE(8字节) 双精度小数
场景 金钱计算 轨道计算 - 字符串
CHAR char(10)可以存储长度(字节长度)不超过10的字符串。例如:“hello”。但由于长度按照字节判断,存unicode编码的中文只能存3个。
(常用) VARCHAR 0-65535字节,variable char 可变字符串。VARCHAR(5)可以存储5个中文或5个英文字母。场景 用户名、家庭住址。
TEXT TINYTEXT medium longtext,场景 大文本存储,书籍文章、用户反馈。
BLOB medium longblob,二进制文件,场景 图片、视频。但一般不再数据库中存储图片和视频,因为会增加数据库的计算压力和宽带传输压力和备份还原的难度和用户信息静态资源耦合到一起,解决方案是 图片视频存到普通文件目录下,数据库中存储文件路径。 - 日期
DATE 日期,形如"2018-11-08"
DATETIME(常用) 日期时间,形如"2018-11-08 16:52:30"
TIMESTAMP(常用) 时间戳,1541667270 1541667270。7252207 1541667270725
- 数值、整数
sqlite的字段比较简化:
INTEGER 整数
REAL 浮点数
TEXT 字符串
NULL 什么都不存
SQL
structured query language 结构化查询语言。专门对数据库进行查找、增加、修改、删除、统计的操作语言。
CURD增删查改 create update retrieve delete
风格:关键字大小写都行,建议大写。表名大小写都行,但是在一些数据库中不区分大小写,建议小写。
(重要)基本语法:
import sqlite3
connect = sqlite3.connect("student.db")
cursor = connect.cursor()
1. 创建表
CREATE TABLE student{
id INT PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
}
2. 添加
INSERT INTO student(id, name) VALUES (1, "小红")
3. 修改
UPDATE student SET name="小红" WHERE id=12;
UPDATE student SET name="小红" ---如果没有限定条件,会修改整个name的名字
4. 查询
SELECT * FROM student WHERE name="小红"; --返回某一学生
SELECT * FROM student WHERE id=2; --返回某一学生
select id,name from student;==SELECT "id","name" FROM student;
5. 删除
DELETE FROM student WHERE --删除数据库的某一项
DELETE FROM student; --删除student数据库
drop table student; --- 删除所有数据库
connect.commit()
cursor.close()
connect.close()
-
一张表一般都有一列主键,主键primary key一般名叫 id,字段类型一般为自增整数。当主键不能重复。主键好处是确保数据一致性、方便查询。如果一列为主键,那么必然非空not null 和唯一unique。
-
如果工作中一个数据库连接实例下有多个库,那么表名要带上命名空间,例如 main.student.
-
字段被双引号括住,形如SELECT “id”, “name” FROM student;, 结果一样。好处是避免数据库关键字导致的错误。当数据库解释器遇到引号时,会认为引号里的名字就是用户自定义的字段名 而不是内置关键字,平时省事不需加引号
-
丢弃表 drop。跟delete关键字相比更为严重,delete删除某行或清空表内容 表结构还在.而drop是完全删除,丢弃整个表,内容和结构都删除。 drop table [表名]。
-
cursor.fetchall() 取回结果集,形如[(1, ‘小明’),(2, ‘小红’)] 大列表,列表每一项是元组、是一行,元组里的每一项对应每一列的值。结果空返回[]。
-
cursor.fetchone() 取出一条数据,形如(1,‘小明’)。结果空返回None类型。 如果select符合多条,返回多条结果里的第一条。
cursor.fetchxxx() 方法为了节省内存和速度采用了 生成器结构,只能取一次
数据库图像管理工具
常用数据库图像管理工具:
1. navicat系列 — > navicat for sqlite
优点:navicatForMysql用户多,表多的时候界面方便,缺点:1. 付费 2.体验一般
2. datagrip —> jetbrains出品,
优点:一个软件连接多个数据库;操作习惯跟pycharm类;pycharm pro集成。缺点:用户少 优点:一个软件连接多个数据库;操作习惯跟
3. pycharm类; —> pycharm pro集成。
缺点:用户少
(了解)datagrip操作方法(pycharm集成database工具为例子):
- pycharm左下角图标调出工具栏,打开pycharm右侧Database工具。
- 点加号-DataSource数据源-sqlite。
- 弹出的对话框选择 drivers-sqlite(Xerial)
- 点击download sqlite -jdbc[latest]
- 如果网速不好的话 下载sqlite-jdbc-3.20.1.jar。对话框+号-custom jars 从本地安装
- 驱动安装成功后点击apply应用
- 点击对话框project data source,开始配置连接数据库的实例
- File路径点击…图标,选择要连接的.db文件,
- 点test connection, seccessful 为成功
- 点击ok退出。看到连接的数据库实例下有表。
database工具使用:
展开目录,找到 表。
schemas 模型,理解为大的仓库,默认有一个仓库main,main仓库下是我们建的表。
sqlite masters是数据库系统内置表,不用关注,不能删除。
不用关注collations文件夹。
双击表 查看表数据。
图形化界面 加减号增加修改数据,注意修改完需要submit提交。
点击console图标,打开sql命令行工具,可以在里面写sql语句,点击execute按钮执行,得到结果集。
选中库,右键new-table,可视化界面的创建表。
工具是会自动提交