导图社区 初识MySQL
MySQL的简单学习笔记,整理MySQL的基础知识点和简单的操作命令。
编辑于2019-11-14 07:53:58数据库
定义
是以一定方式存储在一起,能与多个用户共享,具有尽可能小的冗余度,与应用程序彼此独立的数据集合
可操作行为
新增、截取、更新、删除等
类型
关系型数据库
特点
主要用来存储表格类数据
有表的概念,每个表是单独的个体
包含
MySQL
MariaDB
一般MySQL可以实现的功能MariaDB都可以实现
Oracle
用来存储大型的数据库,一般大型电商网站会使用
付费工具,价格昂贵
SQL Server
PostgreSQL
Sybase
非关系型数据库
特点
用来存储一些需要经常修改和读取的数据
没有表的概念,所有数据是堆积在一起的
包含
Redis
主要用来存储网站点击量之类
MongoDB
存储的数据类型是json数据,适合用来存储爬虫爬取的数据
BigTable
CouchDB
MySQL
用来存储比较小的数据库,一般小型网站后台会使用
MySQL数据库
定义
优势
体积小
速度快
总体拥有成本低
开放源码
版本
Community Server
开源免费,但不提供官方支持
Enterprise Edition
有官方支持,需要付费,可以试用30天
Cluster
集群版,开源免费,可以将几个MySQL Server封装成一个Server
Cluster CGE
高级集群版,需付费
MySQL在终端的的命令
登录MySQL
打开cmd终端
输入mysql -uroot -p
启动MySQL服务
net start mysql
停止MySQL服务
net stop mysql
子主题
组成结构
一个MySQL数据库下可以包含多个数据库(dadabase)
每个database下可以包含多个数据表(table)的工作簿(workbook)
每个工作簿下可以包含多个工作表(sheet)
MySQL的操作与数据类型
操作
MySQL数据库命令的特点:以;分号结尾
管理数据库
数据库的创建与删除
创建数据库:create database 「数据库名」;
创建数据库的时候指定数据库编码
create database 数据库名称 character set utf8 collate utf8_general_ci;
删除数据库:drop database「数据库名」;
使用与查看数据库
使用数据库
use 「数据库名」;
查看所有数据库
show databases;
查看当前使用的数据库
select dadabase();
数据库编码
创建数据库并制定编码
create database 「数据库名」 charset =“utf8”;
修改数据库编码
alter database 「数据库名」charset=gbk;
常用数据类型
整数
tinyint
-2的7次方到2的7次方-1
常用
3位数
占一个字节
smallint
-2的15次方到2的15次方-1
5位数
占2个字节
mediumint
-2的23次方到2的23次方-1
7位数
占3个字节
int
-2的31次方到2的31次方-1
常用
10位数
占4个字节
bigint
-2的63次方到2的63次方-1
19位数
占8个字节
小数
定点数
decimal(m,d)
需要传递两个参数
m:总位数
数字超过总长度m,会根据四舍五入保存
d:小数位
数字小数位小于d,会用0填充
浮点数
float(m,d)
8位精度,总位数<m,小数位=d
double(m,d)
16位精度,总位数<m,小数位=d
浮点数保证最多8或16位的准确性,其余数字随机填充
字符串
char(n)
固定字符串长度n
字符串长度小于n,会用空格填充
varchar(n)
最大字符串长度n
字符串长度<n,空的位置会被去除
日期
datetime
YYYY-MM-DD HH:MM:SS
date
YYYY-MM-DD
time
HH:MM:SS
布尔
boolean
true
false
本质是tinyint
0是false
1是true
PyCharm操作MySQL数据库
创建表结构
create table表名(字段名 字段类型 字段约束, 字段名 字段类型 字段约束,...);
字段名、类型和约束之间空格隔开,多个字段之间用逗号分隔
主键设定
一般设定id为主键,每行必须要有值,且值为唯一值
常用字段约束
主键自增
primary key auto_increment
不能重复
unique
不能为空
not null
默认值
default
MySQL的增删改操作
插入数据
用途:往数据库中的数据表插入新数据
语法
insert into 表名 value(数据1, 数据2,....);
insert into 表名 (字段名1, 字段名2...) value (数据1, 数据2...);
insert into 表名(字段1,字段2...) values (数据1,数据2...),(数据1,数据2...),...;
注意:多条数据插入尽量用一条SQL语句,减少与数据库交互的频率
修改数据
用途:更改数据库中数据表的某些数据
语法
update 表名 set 字段1=值,字段2=值... where 条件;
删除数据
用途:删除数据库中数据表内的指定行数据
语法
delete from 表名 where 条件;
更改表结构
alter
表内新增字段,指定新增字段的类型和约束
alter table 表名 add 字段名 类型 约束;
表内修改字段,指定被修改的字段和修改后的名字、字段类型与约束
alter table 表名 change 原字段名 新字段名 类型 约束;
表内删除字段
alter table 表名 drop 字段名;
更改表名字
rename
rename table 原表名 to 新表名;
删除表
drop table 表名;
删除整个表,可以恢复
truncate 表名;
删除表内所有数据,速度快,不可恢复
表的结构会保留下来
查看
查看表内所有数据
select * from 表名;
*表示所有字段
查看指定字段
select 字段1,字段2 from 表名;
条件查询
比较条件查询
select * from 表名 where 条件;
模糊条件查询
select * from 表名 where 字段 like “表达式”;
关键字%匹配任意多的字符
关键字_匹配一个字符
范围查询
select * from 表名 where 字段 in (可能1,可能2...);
select * from 表名 where 可能1 and 可能2;
select * from 表名 where 可能1 or 可能2;
分组
select * from 表名 where 条件 group by 字段1,字段2...;
按照哪个字段分组,这个字段就不会重复
group by要写在where的后面
对分组的条件
select * from 表名 where 条件 group by 字段1,字段2... having 条件;
排序
select * from 表名 where 条件 group by 字段1,字段2... having 条件 order by 字段1 asc|desc, 字段2 asc|desc;
asc升序排列,没有写明就默认升序
desc降序排列
先按字段1进行排序,如果字段1相同,按字段2排序
MySQL多表操作
多表间的关系
一对多
利用外键引用多张表的字段
多对多
一般需要创建一个中间表,中间表是一对多
中间表命名一般用两个关联表的表名用下划线连接
一对一
应用场景较少
单张表内字段数太多
敏感信息分离
外键的约束
外键关系
on delete restrict
默认值,抛异常
on delete cascade
如果主表被引用的外键删除,相关联的表的记录也被删除
on delete set null
如果主表被引用的外键删除,相关联的表的外键设置为空
on delete no action
什么也不做
引用和被引用的字段类型必须一致
constraint 约束名 foreign key (本表中的字段名) references 引用表名(引用字段名) on delete CASCADE;
MySQL优化
插入语句优化
尽可能通过一段语句一次性插入数据,减少与数据库的交互
尽量用values来插入数据
insert into 表名 (字段名) values (单行数据), (单行数据)....;
索引
建立索引
create index 索引名 on 表名 (字段名(索引长度));
删除索引
drop index 索引名 on 表名;
索引的用法??