1. 数据库
- 概念
DataBase
(简称DB
)- 用于存储和管理数据的仓库
- 特点
- 持久化存储数据的文件系统
- 方便存储和管理数据
- 使用了统一的方式操作数据库:
SQL
- 常见的数据库软件
- MySQL
- Oracle
- SQL Server
- DB2
2. MySQL
- 安装
- 略
- 卸载
- 在MySQL的安装目录下找到
my.ini
文件 - 打开此文件,复制其中的
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
(为第步做准备) - 在应用程序中卸载MySQL
- 删除第2步中
C:/ProgramData
目录下的MySQL
文件夹即可完全卸载
- 在MySQL的安装目录下找到
- 配置
- MySQL服务启动
-
cmd输入
services.msc
,打开服务窗口,然后即可启动/停止/更改启动方式(自动/手动),如下图 -
以管理员方式打开cmd:
- 输入
net start mysql
:启动mysql服务 - 输入
net stop mysql
:关闭mysql服务
- 输入
-
- MySQL登录
- cmd:
mysql -uroot -p密码
mysql -h*ip* -uroot -p密码
mysql --host=*ip* --user=root --password=连接目标的密码
- cmd:
- MySQL退出
- cmd:
exit
quit
- cmd:
- MySQL目录结构
- 配置文件:
my.ini
- MySQL安装目录:
basedir="..."
(my.ini文件中) - MySQL数据目录:
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
- 数据库:MySQL安装目录下的data文件夹下的文件夹
- 表:数据库文件夹下的文件
- 数据:表中的数据
- 配置文件:
- MySQL服务启动
3. SQL
- 概念
- Structured Query Language:结构化查询语言
- 定义了操作所有的关系型数据库的规则,但是每一种具体的数据库的操作方式存在不同点
- SQL通用语法
- 每一条SQL语句可以单行或多行书写,以分号结尾
- 可以使用空格或缩进以增强代码的可读性
- MySQL数据库的SQl语句不区分大小写,但是关键字建议用大写
- 注释
- 单行注释:
# 注释内容
(MySQL特有)或-- 注释内容
- 多行注释:
/* 注释内容 */
- 单行注释:
- SQL分类
DDL
(Data Definition Language):数据定义语言- 定义数据库对象:数据库,表,列等
- 关键字:
CREATE
,DROP
,ALTER
等
DML
(Data Manipulation Language):数据操作语言- 对数据库中表的数据进行增删改
- 关键字:
INSERT
,DELETE
,UPDATE
等
DQL
(Data Query Language):数据查询语言- 对数据库中表的数据(记录)进行查询
- 关键字:
SELECT
,WHERE
等
DCL
(Data Control Language):数据控制语言- 定义数据库的访问权限,安全级别和创建用户
- 关键字:
GRANT
,REVOKE
等
1. DDL:操作数据库和表
- CRUD
- C:Creat(创建)
- R:Retrieve(查询)
- U:Update(修改)
- D:Delete(删除)
- 操作数据库:CRUD
- C
- 创建数据库:
CREATE database 数据库名称;
- 先判断数据库是否存在,不存在则创建:
CREATE database if not exists 数据库名称;
- 创建数据库,并同时指定字符集:
CREATE database 数据库名称 character set 字符集;
- 创建数据库:
- R
- 查询所有数据库的名称:
SHOW databases;
- 查询某个数据库的字符集,即查询某个数据库的创建语句:
SHOW CREATE database 数据库名称;
- 查询所有数据库的名称:
- U
- 修改数据库的字符集:
ALTER database 数据库名称 character set 新字符集;
- 修改数据库的字符集:
- D
- 删除数据库:
DROP database 数据库名称;
- 先判断数据库是否存在,存在则删除:
CREATE database if exists 数据库名称;
- 删除数据库:
- 使用数据库
- 使用数据库:
USE 数据库名称;
- 查询当前使用的数据库名称:
SELECT database();
- 使用数据库:
- C
- 操作表:CRUD
- C
- 语法:
CREATE table 表名( 列名1 数据类型1, 列名2 数据类型2, ... 列名n 数据类型n ); 复制代码
注意:最后一列不需要加逗号
- 数据类型
int
:整数类型double(共有几位,小数点后保留几位)
:小数类型,date
:日期,只包含年月日,yyyy-MM-dddatetime
:日期,包含年月日时分秒,yyyy-MM-dd HH:mm:sstimestamp
:时间戳类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss- 如果不为此字段赋值或赋值为null,则默认使用当前系统时间自动赋值
varchar(最大字符数)
:字符串类型
- 复制表:
CREATE table 表名 like 被复制的表名;
- 语法:
- R
- 查询某个数据库中所有表的名称:
SHOW tables;
- 查询某个表的结构:
desc 表名;
- 查询某个数据库中所有表的名称:
- U
- 修改表名:
ALTER table 表名 rename to 新表名;
- 修改表的字符集:
ALTER table 表名 character set 字符集;
- 添加一列:
ALTER table 表名 add 列名 数据类型;
- 修改列名称和数据类型
- 只修改数据类型:
ALTER table 表名 modify 列名 新数据类型;
- 修改列名和数据类型:
ALTER table 表名 change 列名 新列名 新数据类型;
- 只修改数据类型:
- 删除列:
ALTER table 表名 DROP 列名;
- 修改表名:
- D
- 删除表:
DROP table 表名;
- 先判断表是否存在,存在则删除:
DROP table if exists 表名;
- 删除表:
- C
2. DML:增删改表中的数据
- 添加数据:
insert into 表名(列名1,列名2,...,列名n) values(值1,值2,...,值n);
- 列名和值需要一一对应
- 如果表名后不定义列名,则默认为所有列添加值:
insert into 表名 values(值1,值2,...,值n);
- 除了数字类型的列,其他类型需要使用引号(单引号或双引号)包含
- 删除数据:
delete from 表名 where 条件;
- 如果不加where 条件,则删除表中所有数据
- 删除表中所有数据
delete from 表名;
不推荐使用,有n条记录就会执行n此删除操作,效率较低truncate table 表名;
推荐使用,先删除表,再创建一张同样的空表,效率较高
- 修改数据:
update 表名 set 列名1=值1, 列名2=值2,...,列名n=值n where 条件;
- 如果不加where 条件,那么会修改表中每一行的数据
3. DQL:查询表中的记录
- 语法
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后的条件列表 order by 排序依据 limit 分页限定 复制代码
- 基础查询
- 多个字段的查询
- 查询多个字段:
select 字段1,字段2,... from 表名;
- 查询所有字段:
select * from 表名;
- 查询多个字段:
- 查询结果去重
- 在需要去重的字段前加
distinct
- 在需要去重的字段前加
- 计算列
- 可以使用四则运算计算一些数据类型为数值型的列的值
- 可以使用
ifnull(表达式1,表达式2)
将表达式1中值为null的数据替换为表达式2
- 起别名
as
,也可以省略
- 多个字段的查询
- 条件查询
- where子句后跟条件
- 运算符
>、>=、<、<=、=、<>(!=)
between...and...
(包括左右边界)in(集合)
like
:模糊查询- 占位符
_
:单个任意字符%
:多个任意字符
- 占位符
is null
and(&&)
or(||)
not(!)
- 排序查询:
order by 排序依据1 排序方式1, 排序依据2 排序方式2,...
- 排序方式
asc
:升序(默认)desc
:降序
- 只有当排序依据1相同时,才会判断排序依据2
- 排序方式
- 聚合函数:将一列数据作为一个整体,进行纵向的计算
count(计数字段)
:计算个数- 一般选择非空的字段进行计数,如:主键
- count(*):只要行内至少有一个字段不为空就计数
max
:计算最大值min
:计算最小值sum
:计算和avg
:计算平均值
- 聚合函数的计算不考虑null
- 解决方案
- 选择值都不为null的字段进行计算
- 使用
ifnull(表达式1,表达式2)
将表达式1中值为null的数据替换为表达式2
- 解决方案
- 分组查询:
group by 分组字段;
- 分组之后查询单个字段并无意义,建议分组后查询分组字段或聚合函数
- where与having的区别
where
:在分组前进行条件限定,如果不满足条件,则不进行分组having
:在分组后进行条件限定,如果不满足条件,则不会被查询- 因为where还未进行分组,所以where后不能使用聚合函数,having之后可以使用聚合函数
- 示例代码:
SELECT sex , AVG(math),COUNT(id) count FROM student WHERE math > 70 GROUP BY sex HAVING count > 2;
- 分页查询:
limit 开始的索引, 每页查询的条数
- 开始的索引 = (当前的页码 – 1)* 每页显示的条数
- limit是MySQL所独有的子句
- 多表查询
- 内连接查询
- 隐式内连接:使用where条件消除无用数据
select 字段列表 from 表名列表 where 条件列表
- 显式内连接:使用on条件消除无用数据
- `select 字段列表 from 表名1 [inner] join 表名2 on 条件列表
- 先写表名列表,再写条件列表,最后写字段列表 `
- 隐式内连接:使用where条件消除无用数据
- 外连接查询
- 左外连接:
select 字段列表 from 表名1 left [outer] join 表名2 on 条件列表
- 查询的数据为左表所有数据以及满足条件的交集部分
- 右外连接:
select 字段列表 from 表名1 right [outer] join 表名2 on 条件列表
- 查询的数据为右表所有数据以及满足条件的交集部分
- 左外连接:
- 子查询
- 概念:查询中嵌套查询,称嵌套查询为子查询
- 分类
- 子查询的结果为单行单列
- 子查询作为条件,使用运算符(>,>=,<,<=,=,!=)判断
- 子查询结果为多行单列
- 子查询作为条件,使用运算符in判断
- 子查询结果为多行多列
- 子查询作为一张虚拟表参与查询
- 子查询的结果为单行单列
- 内连接查询
4. DCL:管理用户以及权限管理
- 管理用户
- 查询用户:
USE mysql; SELECT * FROM USER; 复制代码
- 创建用户:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
- 删除用户:
DROP USER '用户名'@'主机名';
- 修改用户密码:
UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
- 查询用户:
- 权限管理
- 查询权限:
SHOW GRANTS FOR '用户名'@'主机名';
- 授予权限:
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
- 授予所有权限,在任意数据库的任意表:
GRANT ALL ON *.* TO '用户名'@'主机名';
- 授予所有权限,在任意数据库的任意表:
- 撤销权限:
revoke 权限列表 on 数据库名.表名 from
用户名.
主机名;
- 查询权限:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END