数据库
2019-06-25 16:29:02 0 举报
AI智能生成
mysql数据库
作者其他创作
大纲/内容
基础知识
数据库管理系统(DBMS):专门用来管理数据文件
关系型数据库
mysql 开源的
sql server
oracle
非关系型数据库
redis
mongodb
数据:data
文件件:数据库database
数据库管理员:DBA
安装
安装流程
官网下载、解压
在当前目录下复制my-default.ini,将里面内容替换成
将MySQL的bin目录(D:\MySQL\bin)添加到系统的环境变量
以管理员的身份开启cmd终端
mysqld install
net start mysql
mysql -uroot -p
遇到password直接回车
安装问题
路径
不能有空格
不能有中文
不能带着有转义的特殊字符开头的文件夹名,如(/tool等)
配置问题:在安装过程中如果修改配置,往往不能生效
卸载之后在重新安装
mysqld remove
把所有的配置、环境变量修改到正确的样子
重启计算机、清空注册表
在重新安装
mysql
mysql的CS架构
mysqld install:安装数据库服务
net start mysql:启动数据库的server端
net stop mysql:停止数据库的server端
客户端可以是Python代码也可以是一个程序
mysql -uroot -p
mysql中的用户和权限
在安装数据库之后,有一个权限最高的用户root
我们的mysql客户端不仅可以连接本地的数据库,也可以连接网络上的某一个客户端:mysql -uroot -p123 -h192.168.12.87
select user():查看当前用户是谁
set password = password('123'):设置密码
create user 'piggy'@'192.168.12.%' identified by '123':创建账号
show databases:查看文件夹
create database 库名:创建文件夹
grant all on 库名.* to 'alex'@'192.168.12.%' identified by '123':授权并创建用户
flush privileges:刷新使授权立即生效
mysql语言
DDL:数据库定义语言:创建库、表
DML:数据库操纵语言:存数据、删除数据、修改数据
DCL:控制权限语言:grant revoke(取消权限)
库
create database 数据库名:创建库
show databases:查看数据库
select database():查看当前使用的数据库是什么
use 数据库的名字:切换到这个库下面
drop database 数据库的名字:删除库
show create table 库的名字:查看库的信息
表
表的存储引擎
存储方式一:myisam 5.5以下默认的存储方式
存储文件的个数:表结构、表中的数据、索引
支持表级锁
不支持行级锁,不支持事务,不支持外键
存储方式二:innodb 5.6以上默认的存储方式
存储文件的个数:表结构、表中的数据
支持行级锁
支持事务
支持外键
存储方式三:memory内存
存储文件的个数:表结构
优势:增删改查都很快
劣势:重启方式数据消失、容量有限
引擎相关操作
show variables like '%engine%':查看配置项
engine=myisam/memory:指定引擎
面试:用什么数据库,设么版本的?都用这个版本的吗?什么存储引擎?为什么要用这个存储引擎?
查看表的结构
show create table 表的名字:查看标的信息
dsec 表名:查看表结构
表的数据类型
整数
int:它能表示的范围不受宽度约束
小数
浮点数
float
double
定点数
decimal
日期和时间
year:年
date:年月日
time:时分秒
datetime:年月日时分秒
timestamp:年月日时分秒
字符串
char:定长的单位,一般用于手机号码、身份证号码、密码
varchar:变长的单位,一般用于评论、微博、说说
enum和set类型
enum('male','female'):只能选一个
set('jump','sing','basketball'):多选
建表时的约束
not null:某一个字段不能为空
default:给某个字段设置默认值
unique:设置某一个字段不能重复
auto_increment:设置某一个int类型的字段自动增加
alter table 表名 add 字段名 数据类型 约束 after 字段名:修改字段排列顺序,在增加的时候指定字段位置
自增字段必须是数字且必须是唯一的
primary key:设置某一个字段非空且不重复:主键
一张表只能设置一个主键,且最好设置一个主键
foreign key:外键,涉及到两张表
foreign key(字段名) references 表名(字段名)
修改表结构
什么时候会修改表结构?
创建项目之前
项目开发、运行过程中
alter
alter table 表名 rename 新表名:修改表名
alter table 表名 add 字段名 数据类型 约束:增加字段
alter table 表名 drop 字段名:删除表名
alter table 表名 modify 字段名 数据类型 约束:修改字段
alter table 表名 change 旧字段名 新字段名 数据类型 约束:修改字段
alter table 表名 add 字段名 数据类型 约束 first:修改字段排列顺序,在增加的时候指定字段位置
alter table 表名 change 旧字段名 新字段名 数据类型 约束 first:修改字段排列顺序/在增加的时候指定字段位置
alter table 表名 change 旧字段名 新字段名 数据类型 约束 after:修改字段排列顺序/在增加的时候指定字段位置
表与表之间的关系
多对多
三张表
多对一
foreign key永远设置在多的那张表中
一对一
需要加unique约束
表的数据操作
增加
insert into 表名 values(值)
insert into 表名(字段名,字段名) values (值),(值)
删除
delete from 表 where 条件
修改
update 表 set 字段=新的值 where 条件
单表查询
简单查询:select id name age from 表名
避免重复:select distinct name from 表名
通过四则运算查询:select salary*12 from 表名
定义显示格式:select concat ('姓名:',name,'年薪:',salary*12) from 表名
where 语句
比较运算:> < >= <= <> !=
范围筛选:in
模糊范围查询
between and
like '李%'
正则匹配:regexp '^j[a-z]{5}'
逻辑运算
and
or
not
分组聚合
分组group by
聚合函数
count:计数
sum:求和
avg:平均
max:最大
min:最小
having条件,过滤组,总是和group by一起用
order by排序
asc,默认
desc:从大到小
limit
limit n:取前n个
limit m,n == limit n offset m:分页展示
多表查询
连表查询
交叉连接
内连接:inner join
外连接
左外连接:left join
右外连接:right join
子查询
数据、表、库的备份
语法:mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
单库备份:mysqldump -uroot -p123 day40 > D:\code\s21day41\day40.sql
单库里的表备份:mysqldump -uroot -p123 db1 table1 table2 > D:\code\s21day41\day40.sql
多库的备份:mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql
备份所有的库:mysqldump -uroot -p123 --all-databases > all.sql
索引
索引原理
什么是索引?建立起的一个存在表阶段就有的一个存储结构,能够在查询的时候加速
block磁盘预读原理
Linux:4096个字节
oracle:两个block块
mysql:四个block块
读硬盘的IO操作时间非常的长,比CPU执行指令的时间长很多,尽量减少IO次数才是读写数据的主要要解决的问题
数据库的存储方式
b树(balance tree):分支节点和根节点存储数据
b+树:分支节点和根节点都不在存储数据了,让分支节点和跟节点能存储更多的索引信息,就降低了树的高度,所有的实际数据都存储在了叶子里,在叶子节点之间加入了双向的链式结构,方便在查询中的范围条件
b+树中的索引方式
聚集索引:只有主键,速度快
优点一:它对主键的排序查找和范围查找速度非常快,叶子节点的数据就是用户所要查询的数据,b+树索引是双向链表
优点二:范围查询,如果要查找主键某一范围内的数据,通过叶子节点的上层中间节点就可以得到页的范围,之后直接读取数据即可
辅助索引(有一个回表的过程):除了主键之外所有的索引都是辅助索引,速度稍慢,数据不直接存在树中
索引的种类
primary key:主键,自动创建聚集索引,约束的作用:非空 + 唯一。联合主键
unique 自带索引 且是辅助索引,约束的作用:唯一。联合唯一
index:辅助索引 ,没有约束作用。联合索引
正确的使用索引
索引不生效的原因(同如何提高效率)
1.要查询的范围大: > < >= <= !=,
2.between and
3.like
4.如果一列内容的区分度不高,索引也不生效
5.索引列不能再条件中参与计算
6.对两列内容进行条件的查询
联合索引
create index ind_mix on s1(id,email)
在联合索引中如果使用了or条件索引就不生效
最左前缀原则:在联合索引中,条件必须含有在创建索引的时候的第一个索引列
什么时候用联合索引:只对a,对abc条件进行索引,而不会对b,对c进行单列的索引
覆盖索引
使用索引作为条件查询,查询完毕之后,不需要回表查,覆盖索引
执行计划
如果你想在执行sql之前就知道sql语句的执行情况,那么就可以使用执行计划
explain select count(*) from buy_log;
索引合并
对两个字段分别创建索引,由于sql的条件让两个索引同时生效了,那么这时候,这两个索引就是合并索引
pymysql
sql注入
输入用户名,输入密码,用户名和面到数据库里查询数据,如果能查到数据,说明用户名密码正确,如果查不到,说明用户名和密码不对
0 条评论
下一页