MySQL的启动和连接&数据模型
MySQL的启动和停止
1.services.msc
2.命令行启停
启动:net start mysql80
停止:net stop mysql80
(命令行窗口以管理员权限打开,否则无访问系统服务权限)
MySQL数据库客户端连接
1.MySQL提供的客户端命令行工具
(先确保mysql正在运行中),否则会出现输入密码命令行窗口闪退的情况
mysql正常运行中,在windows开始菜单下找到:
单击打开命令行窗口后输入MySQL密码,即可进入访问(密码输入错误会闪退命令行窗口):
2.系统自带的命令行执行指令
(使用此方法必须提前配置系统的path环境变量)
mysql -u root -p[回车] -password
MySQL数据模型
1.在清楚MySQL数据模型前,需要先了解一个概念:关系型数据库(RDBMS).
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库
特点:
- 使用表存储结构,格式统一,便于维护
- 使用SQL语言操作,标准统一,便于操作
2.数据模型
SQL通用语法及分类
1.SQL通用语法
- SOL语句可以单行或多行书写书写,以分号结尾
- SQL语句可以使用空格和缩进来增强程序的可读性
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
- 注释:
单行注释:--注释内容 或者 #注释内容(MySQL特有)
多行注释:/*注释内容*/
2.SQL分类
分类 |
全称 |
说明 |
DDL |
Date Definition Language |
数据定义语言,用来定义数据库对象(数据库,表,字段,索引) |
DML |
Date Manipulation Language |
数据库操作语言,用来对数据库表中的数据进行增删改 |
DQL |
Date Query Language |
数据库查询语言,用来查询数据库中表的记录 |
DCL |
Date Control Language |
数据库控制语言,用来创建数据库用户,控制数据库访问权限 |
Data Definition Language
DDL - 数据库操作
查询数据库
创建数据库
删除数据库
使用数据库
使用上述指令进行整体操作
DDL - 表操作
表操作 - 创建&&查询 创建表
(创建表的最后一条语句不加逗号,整条语句以分号结束)查询当前数据库的所有表
查询表结构
查询特定表的建表语句
使用上述指令进行整体操作
表操作 - 数据类型
MySQL中主要有数值类型、日期类型和字符串类型。
数值-整数类型
类型名称 |
说明 |
存储需求 |
有符号(SIGNED) |
无符号(UNSIGNED) |
TINYINT |
很小的整数 |
1byte |
-128 - 127 |
0 - 255 |
SMALLINT |
小的整数 |
2byte |
-32768 - 32767 |
0 - 65535 |
MEDIUMINT |
中等大小的整数 |
3byte |
-8388608 - 8388607 |
0 - 16777215 |
INT(INTEGER) |
普通大小整数 |
4byte |
-2147483648 - 2147483647 |
0 - 4294967295 |
BIGINT |
大整数 |
8byte |
-9223372036854775808 - 9223372036854775807 |
0 - 18446744073709551615 |
dd
类型名称 |
说明 |
存储需求 |
有符号(SIGNED) |
无符号(UNSIGNED) |
TINYINT |
很小的整数 |
1byte |
-128 - 127 |
0 - 255 |
SMALLINT |
小的整数 |
2byte |
-32768 - 32767 |
0 - 65535 |
MEDIUMINT |
中等大小的整数 |
3byte |
-8388608 - 8388607 |
0 - 16777215 |
INT(INTEGER) |
普通大小整数 |
4byte |
-2147483648 - 2147483647 |
0 - 4294967295 |
BIGINT |
大整数 |
8byte |
-9223372036854775808 - 9223372036854775807 |
0 - 18446744073709551615 |
数值-小数类型
DECIMAL中的M:精度、D:标度
精度M:整个数的长度
标度D:小数的位数
日期与时间类型
类型名称 |
日期格式 |
日期范围 |
存储需求 |
YEAR |
YYYY |
1901-2155 |
1byte |
TIME |
HH:MM:SS |
-838:59:59-835:59:59 |
3byte |
DATE |
YYYY-MM-DD |
1000-01-01~9999-12-31 |
3byte |
DATETIME |
YYYY-MM-DD HH:MM:SS |
1000-01-01 00:00:00~9999-12-31 23:59:59 |
8byte |
TIMESTAMP |
YYYY-MM-DD HH:MM:SS |
1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC |
4byte |
字符串类型
文本字符串数据类型
类型名称 |
说明 |
存储需求 |
CHAR(M) |
定长文本字符串 |
M字节,1 - 255 |
VARCHAR(M) |
变长文本字符串 |
length +1字节 |
TINYTEXT |
非常小的文本字符串 |
length +1字节 |
TEXT |
小的文本字符串 |
length +2字节 |
MEDIUMTEXT |
中等大小的文本字符串 |
length +3字节 |
LONGTEXT |
大的文本字符串 |
length +4个字节 |
EUNM |
枚举类型,只能有一个枚举字符串值 |
1或2byte,取决于枚举字符串的树木 |
SET |
一个设置,字符串对象可以有一个或多个set成员
|
1,2,3,4或8,取决于集合成员的数量 |
二进制字符串类型
类型名称 |
说明 |
存储需求 |
BIT(M) |
位字段类型 |
(M+7)/8 byte |
BINARY(m) |
定长二进制字符串 |
Mbyte |
VARBINARY(M) |
变长二进制字符串 |
M+1byte |
TINYBLOB(M) |
非常小的BLOB |
L+1 byte
|
BOLB(M) |
小的BLOB |
L+2byte |
MEDIUMBLOB(M) |
中等大小的BLOB |
L+3byte |
LONGBLOB(M) |
非常大的BLOB |
L+4byte |
表操作-修改&&删除
添加字段
修改字段数据类型
修改字段名和字段类型
删除表中的字段
修改表名
删除表
格式化表(删除表中的数据并重新创建)
使用上述指令进行整体操作
DDL总结
DDL数据库操作
- show databases;
显示当前的所有数据库
- create database [if not exists] 数据库名;
创建数据库
- use 数据库名;
使用/进入当前数据库
- select database();
查询当前所在数据库
- drop database [if exists] 数据库名;
删除当前数据库
DDL表操作
- show tables;
显示当前数据库中的所有表
- create table 表名(字段 字段类型 [comment '注释'], 字段 字段类型 [comment '注释'] ...) [coomment '注释'] ;
在当前数据库中新建一张表
- desc 表名;
查询当前表的结构
- show create table 表名;
显示创建该表时的语句
- alter table add/modify/change/drop/rename to
添加字段,修改字段类型,修改字段,删除字段,重命名表
- drop table 表名;
删除当前表
(可视化工具 - dataTrip)????
Data Manipulation Language
DML - 插入数据insert
1
2
|
insert into 表名(字段,字段...) values(值1,值2...);
-- 表中的字段和值一一对应
|
1
2
|
insert into 表名(字段1,字段2...) values(值1,值2...),(值1,值2...);
-- 一次添加多组数据,字段值和值要一一对应
|
1
2
3
4
5
|
insert into 表名 values(值1,值2...);
-- 值要和表中的字段一一对应
insert into 表名 values(值1,值2...),(值1,值2...);
-- 一次添加多组数据,数据要和表中的字段一一对应
|
插入数据的注意事项
- 插入的数据应当与表中的字段一一对应
- 插入数据如果类型是字符串或者日期,应当用引号修饰
- 添加的数据应当在定义的数据类型的范围内
DML - 更新数据update
1
2
|
update 表名 set 字段1=值1,字段2=值2...[where 条件];
-- update是针对字段来进行操作的
|
DML - 删除数据delete
1
2
|
delete from 表名 [where 条件];
-- delete针对的操作对象是表中的一整条数据
|
使用上述SQL命令整体进行表的数据操作:
使用insert向表中添加数据:
使用update更新表中的数据:
使用delete删除表中的数据:
Data Query Language
DQL --- 基础查询
查询多个字段
1
2
3
4
5
|
select 字段1[as 别名],字段2[as 别名],字段3[as 别名]...from 表名;
//as可以省略
select * from 表名;
//返回表中的所有字段中的信息
|
查询多个字段去重
1
|
select distinct 字段列表 from 表名; -- 去重查询
|
DQL --- 条件查询
1
|
select 字段列表 from 表明 where [条件列表];
|
使用上述查询进行整体操作:
DQL - 聚合函数
函数 |
作用 |
avg() |
返回某列的平均值 |
sum() |
返回某列值的和 |
count() |
返回某列的行数 |
max() |
返回某列的最大值 |
min() |
返回某列的最小值 |
select 聚合函数(字段列表) from 表名;
使用聚合函数进行查询时,null不参与聚合函数的运算,如果统计表的行数,使用count(*)即可。
使用上述查询进行整体操作:
DQL - 分组查询
select 字段列表 from 表名 [where条件] group by 分组字段名 [having分组后的过滤条件];
where和having的区别:
- where是对分组前的数据进行过滤,不满足分组条件的数据不参与分组,而having是对分组之后的数据进行过滤
- where不能对聚合函数进行判断,having可以
使用上述查询:
DQL - 排序查询
1
2
3
4
|
select 字段列表 from 表名 order by 字段名 排序方式,字段名,排序方式;
//当按照第一个字段排序时顺序相同时,就按照第二个字段及其规则进行排序返回
//asc 升序排列(默认值,可以省略)
//desc 降序排列
|
DQL - 分页查询
1
2
3
|
select 字段列表 from 表名 limit 起始索引,每页查询的数据条数;
-- 起始索引为: (页数 - 1) * 每页数据的条数
-- 第一页的起始索引可以省略
|
DDL - 语句执行顺序
- from -- 找到对应的表
- where -- 根据条件进行筛选
- group -- 筛选后分组
- select -- 选出处理后的数据
- order by -- 进行数据的排序
- limit -- 数据分页
DQL总结
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
-- 基础查询
select 字段列表 from 表名;
-- 条件查询
select 字段列表 form 表名 where 条件;
-- 分组查询
select 字段列表 from 表名 [where条件] group by 分组字段名 [having过滤条件];
-- 排序查询
select 字段列表 from 表名 [where条件] order by 字段名 排序方式,字段名 排序方式;
--分页查询
select 字段列表 from 表名 [where条件] limit 起始索引,每页查询的信息条数;
|
Data Control Language
DCL - 用户管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
-- 使用管理员账号进入mysql数据库下
-- 查询用户
use mysql;
select * from user;
-- 创建用户
create user '用户名'@'主机名' identified by '密码';
-- 修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '密码';
-- 删除用户
drop user '用户名'@'主机名';
|
DCL - 权限控制
1
2
3
4
5
6
7
8
|
-- 查询权限
show grants for '用户名'@'主机名';
-- 授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
-- 撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
|
|