文章目录
1. 数据库的基本概念
数据库是用于存储和管理数据的仓库。本质上是一个文件系统,还是以文件的方式存在服务器的电脑上的。
2. 数据库的特点
- 持久化存储数据
- 方便存储和管理数据
- 使用了统一的方式操作数据库(SQL 语句)
3. 常见的数据库软件
- MySQL:开源免费的数据库,小型的数据库,已经被 Oracle 公司收购了。MySQL6.x 版本也开始收费。
- Oracle:收费的大型数据库,Oracle 公司的产品。
- SQL Server: MicroSoft 公司收费的中型的数据库。
- DB2 :IBM 公司的数据库产品,收费的。常应用在银行系统中。
- SQLite:嵌入式的小型数据库,应用在手机端,如:Android。
4. MySQL 的基本使用
-
MySQL 服务启动(如果是设置自动启动,就不用每次手动启动了)
启动 mysql 服务:net start mysql 关闭 mysql 服务:net stop mysql
-
MySQL 环境变量配置
变量名:MYSQL_HOME 变量值:C:\Program Files\MySQL\MySQL Server 5.7
变量名:Path 变量值:%MYSQL_HOME%\bin
-
MySQL 登录
mysql -u root -p Enter password:password
-
MySQL 退出
exit
5. SQL 简介
-
SQL 的概念
SQL(Structured Query Language),结构化查询语言。它是所有关系型数据库的标准操作语言,所有的关系型数据库都支持 SQL。
-
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 等
-
-
MySQL 的语法
-
MySQL 语句可以单行或多行书写,要以分号结尾。
-
MySQL 语句关键字不区分大小写,关键字建议大写。
-
MySQL 注释
-- 单行注释 /* 多行注释 */
-
6. DDL 数据定义语言
-
操作数据库
-
创建数据库
-- 创建数据库 create database 数据库名; -- 创建数据库,并判断是否存在,再创建 create database if not exists 数据库名; -- 创建数据库,指定字符集 create database 数据库名 character set 字符集名;
-
查询数据库
-- 查询所有数据库的名称 show databases; -- 查询某个数据库的创建语句(可查询该数据库的字符集) show create database 数据库名;
-
修改数据库
-- 修改数据库的字符集 alter database 数据库名 character set 字符集名;
-
删除数据库
-- 删除数据库 drop database 数据库名; -- 判断数据库是否存在,再删除 drop database if exists 数据库名;
-
使用数据库
-- 查询当前正在使用的数据库名 select database(); -- 使用数据库 use 数据库名;
-
-
操作表
-
创建表
-- 创建一张表 create table 表名( 列名1 数据类型1, 列名2 数据类型2, .... 列名n 数据类型n ); -- 复制一张表 create table 表名 like 被复制表名;
注意:创建表的最后一列不加逗号
-
查询表
-- 查询某个数据库中所有的表的名称 show tables; -- 查询表结构 desc 表名; -- 查看创建表的 SQL 语句(可查询该表的字符集) show create table 表名;
-
修改表
-- 修改表名 alter table 表名 rename to 新的表名; -- 修改表的字符集 alter table 表名 character set 字符集名称; -- 添加一列 alter table 表名 add 列名 数据类型; -- 修改列的名称,数据类型 alter table 表名 change 列名 新列别 新数据类型; -- 修改列的数据类型 alter table 表名 modify 列名 新数据类型; -- 删除列 alter table 表名 drop 列名;
-
删除表
-- 删除表 drop table 表名; -- 判断表是否存在,再删除 drop table if exists 表名;
-
-
常用的数据类型
类型名称 类型说明 int(integer) 整数类型 double(m,n) 小数类型 varchar(m) 可变长度的字符串类型 date 日期类型,包含年月日 datetime 日期和时间类型,包含年月日时分秒 timestamp 时间戳类型,包含年月日时分秒(如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值)
7. DML 数据操作语言
-
添加数据(插入一行记录)
-- 给指定列添加值 insert into 表名(列名1,列名2...) values(值1,值2...); -- 给所有列添加值 insert into 表名 values(值1,值2...);
注意:除了数字类型,其他类型需要使用引号(单双引号都行)引起来
-
删除数据
-- 删除符合条件的记录 delete from 表名 where 条件; -- 删除所有记录(先删除表,然后再创建一张一样的表) truncate table 表名;
注意:如果不加条件,则会删除所有记录
-
修改数据
-- 修改符合条件的记录 update 表名 set 列名1 = 值1, 列名2 = 值2,... where 条件;
注意:如果不加条件,则会修改所有记录。
8. DQL 数据查询语言
-
基础查询
-- 查询所有字段 select * from 表名; -- 查询多个字段 select 字段名1,字段名2... from 表名; -- 查询多个字段,并去除重复数据 select distinct 字段名1,字段名2... from 表名; -- 别名 select 字段名 as 别名 from 表名;
-
条件查询
-- 条件查询 select 字段名1,字段名2... from 表名 where 条件;
实例:
-- 查询年龄大于20岁 SELECT * FROM student WHERE age > 20; -- 查询年龄等于20岁 SELECT * FROM student WHERE age = 20; -- 查询年龄不等于20岁 SELECT * FROM student WHERE age != 20; SELECT * FROM student WHERE age <> 20; -- 查询年龄在20岁到30岁 SELECT * FROM student WHERE age >= 20 AND age <= 30; SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 查询年龄为18岁,22岁,25岁 SELECT * FROM student WHERE age = 18 OR age = 22 OR age = 25; SELECT * FROM student WHERE age IN (18,22,25); -- 查询英语成绩为 null SELECT * FROM student WHERE english IS NULL; -- 查询英语成绩不为 null SELECT * FROM student WHERE english IS NOT NULL; -- 查询名字中姓“马”的(模糊查询) SELECT * FROM student WHERE NAME LIKE '马%'; -- 查询名字中有“马”的(模糊查询) SELECT * FROM student WHERE NAME LIKE '%马%'; -- 查询名字中最后一个字是“腾”的(模糊查询) SELECT * FROM student WHERE NAME LIKE '%腾'; -- 查询名字中第二个字是“化”的(模糊查询) SELECT * FROM student WHERE NAME LIKE "_化%"; -- 查询姓名是3个字的人 SELECT * FROM student WHERE NAME LIKE '___';
-
排序查询
-- 排序查询 select 字段名1,字段名2... from 表名 order by 字段1 排序方式1 , 字段2 排序方式2...;
实例:
-- 按照数学成绩排序(默认排序方式为升序) SELECT * FROM student ORDER BY math; -- 按照数学成绩排序,升序 SELECT * FROM student ORDER BY math ASC; -- 按照数学成绩排序,降序 SELECT * FROM student ORDER BY math DESC; -- 按照数学成绩排序,升序,如果数学成绩一样则按英语成绩排序,升序 SELECT * FROM student ORDER BY math ASC , english ASC;
-
聚合函数
聚合函数的作用是将一列数据作为一个整体,进行纵向的计算。
实例:
-- 查询学生表记录的个数 SELECT COUNT(*) FROM student; -- 查询学生表记录的个数(一般选择主键列) SELECT COUNT(id) FROM student; -- 查询数学成绩的最大值 SELECT MAX(math) FROM student; -- 查询数学成绩的最小值 SELECT MIN(math) FROM student; -- 查询数学成绩的和 SELECT SUM(math) FROM student; -- 查询数学成绩的平均分 SELECT AVG(math) FROM student;
注意:聚合函数的计算,会排除 null 值。
-
分组查询
-- 分组查询 select 字段名1,字段名2... from 表名 GROUP BY 分组字段 HAVING 条件;
注意:
- 分组之后能查询的字段:分组字段、聚合函数
- where 和 having 的区别?
- where 在分组之前进行限定,如果不满足条件,则不参与分组。having 在分组之后进行限定,如果不满足结果,则不会被查询出来。
- where 后不可以跟聚合函数,having 可以进行聚合函数的判断。
实例:
-- 分别查询男,女同学的数学平均分,按照性别分组 SELECT sex,AVG(math) FROM student GROUP BY sex; -- 分别查询男,女同学的数学平均分,按照性别分组,分组后人数要大于两人 SELECT sex,AVG(math) FROM student GROUP BY sex HAVING COUNT(id) > 2;
-
分页查询
-- 分页查询 select 字段名1,字段名2... from 表名 limit 开始的索引,每页查询的条数;
实例:
-- 第1页 SELECT * FROM student LIMIT 0,3; -- 第2页 SELECT * FROM student LIMIT 3,3; -- 第3页 SELECT * FROM student LIMIT 6,3;
公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
9. DCL 数据控制语言
-
管理用户
-
添加用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
注意:主机名,localhost 表示只能在本地使用用户登录数据库,% 表示可以在任意主机使用用户登录数据库
-
删除用户
DROP USER '用户名'@'主机名';
-
修改用户密码
-- DML 方式修改用户密码 UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名'; -- DCL 方式修改用户密码 SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
-
查询用户
-- 1. 切换到mysql数据库 USE myql; -- 2. 查询user表 SELECT * FROM USER;
-
-
权限管理
-
查询权限
SHOW GRANTS FOR '用户名'@'主机名';
-
授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
实例:
-- 给张三用户授予所有权限,在任意数据库任意表上 GRANT ALL ON *.* TO 'zhangsan'@'localhost';
-
撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
实例:
-- 撤销张三用户更新权限,在 db 数据库 account 表上 REVOKE UPDATE ON db.account FROM 'zhangsan'@'localhost';
-
10. 忘记密码的解决办法
-
以管理员身份运行 cmd
-
停止 mysql 服务
net stop mysql
-
使用无验证方式启动 mysql 服务
mysqld --skip-grant-tables
-
打开新的 cmd 窗口,直接输入 mysql 命令,敲回车
-
然后修改用户密码
UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
-
关闭两个 cmd 窗口
-
打开任务管理器,手动结束 mysqld.exe 的进程
-
启动 mysql 服务
-
使用新密码登陆