数据库的由来
数据库的本质就是存储数据的,之前程序写入数据都是放到文件中,放在文件中的数据格式和类型各有各的定义方法,导致后续取数据比较困难,素以衍生了一种处理数据的软件,数据库软件是一种cs架构,客户端和服务端通信依赖于网络传输,客户端也可以是各种语言编写的,为了使server端能够处理客户端发来的数据,所以定义了统一的语言sql
数据库的分类
关系型数据库:一般是以表格的形式,数据之间有依赖关系,mysql、oracle、access、sqlite
非关系型数据库:一般是以k\v键值对的形式,redis、mongodb、memcache
常用的数据库及其安装
it界一个不成文的规定是:不用最新的软件,可能会出现不兼容问题
大部分企业使用的是mysql 5.X
数据库的基础概念和使用
概念
库:对应于文件夹
表:对应于文件夹中的文件
记录:文件中一行行数据
字段:每列数据的含义
使用(客户端和服务端主机字符编码和变量的配置)
- 登陆(游客登陆和用户登陆)
mysql -h 127.0.0.1 -P 3306 -uroot -p123456 - 忘记密码
mysqld --skip-grant-tables #重启mysql服务端
update mysql.user set password=password(‘123456’) where user=‘root’ and host ‘localhost’ ; - 修改密码
mysqladmin -uroot -p原始密码 password
- 数据库的增删改查
create database db1 charset=‘utf-8’;
drop database db1;
show databases; show create database db1;
alter database db1 charset=‘gbk’ - 表的增删改查
select database();
create table t1(id int,name char(4));
show create table t1; show tables;
describe t1; 查看表头
alter table t1 modify name char(6);
drop table t1; - 数据的增删改查
insert into t1 value(1,‘jason’);
insert into t1 value(1,‘jason’),(1,‘jason’),(1,‘jason’);
select * from t1;
update t1 set name=‘ssss’ where id>1;
delete from t1 where id >1; delete from t1;
mysql的存储引擎(show engines)
存储引擎就是为了处理不同种类数据的存储机制
- innodb: 具备处理事务、锁、索引的功能,速度比myisam快,mysql5.6以上版本的默认引擎
- myisam:功能同innodb,mysql5.6以下版本的默认引擎
- memory:数据存储在内存中,数据容易丢失
- backhole:数据不会保存,直接丢进黑洞中
创建表的完整语法
create table t1(
字段名1 字段类型(宽度) 约束条件,
字段名2 字段类型(宽度) 约束条件
)
mysql数据库的数据类型
- 整型
int,tinyint,bigint—整型的大小表示的是宽度 - 浮点型
float,double,decimal—每种浮点型表示的精度不通 - 字符型
char,varchar —根据是否存储固定长度的字符串分类 - 日期型
date,datetime,year,time - 枚举和集合
enum,set
约束条件
- not null
- assigned
- default
- unique (单列唯一,联合唯一)
- primary key
- foreign key
表之间的关系(需要换位思考分析)
- 一对一
- 一对多
- 多对多(另外创建一张表格保存两表之间的关系)
修改表和复制表
修改表:
alter table t1 rename 旧name 新name
alter table t1 modify
复制表(只是复制表的基本内容,键的属性不会被复制):
create table t2 select * from t1 where id >1000;
最常用的查询关键字
sql语句的执行顺序和书写顺序不同
- where 支持and、or、in、between …and,
- group by 分组查询,可以和聚合函数(max、min、avg、sum、count)、group_concat()联合使用
- having 类似于 where之后的判断,只不过用于分组后的判断过滤
- limit 限制打印出来的记录,limit 5,9 代表打印第6个开始的后9条记录
- distinct 去重
- order by 排序显示,默认是升序 asc,降序是desc
连表查询
- inner join on
- right join on
- left join on
- union
子查询
将sql语句的查询结果当作另一个sql语句的查询条件
navicat工具的使用
pymysql模块的基本使用
视图(view)
将经常使用的链表保存下来,这个保存下来的表格就是视图 create view name as
触发器(trigger)
将满足某个条件的语句记录到另一张log日志表中
delimiter
临
时
修
改
结
束
符
为
临时修改结束符为
临时修改结束符为
事务(AICD)
多条sql语句一起组成事务,其中一条sql语句执行失败,则这个事务失败
- 原子性
- 一致性
- 持久性
- 隔离性
存储过程(procedure)
存储过程类似于函数,在调用存储过程的时候类似于函数调用,并且可以传参。
存储过程内部存在多条sql语句
三种开发模式
函数
此处函数指的是内置函数,如data_format(),now()
索引
索引是一种数据结构,作用类似于书的目录,为的是快速的查询到所需要的记录
索引是一种键,它将随机概率事件的查询转为顺序查询事件
primariy key
unique key
index key
为什么索引要使用id?
B+树的工作原理:一次次缩小目标字段的查询范围