MySQL®软件提供了十分快速的多线程、多用户、牢靠的SQL(结构化查询语言)数据库服务器。 MySQL服务器定位于任务关键型、重负荷生产系统,并能嵌入在大量部署的软件中。
安装
mysql8下载
mysql5.7下载
navicat下载
sqlyog下载
可以下载最新版的MySQL或者MySQL5.7,可以使用navicat或者sqlyog管理数据库。
SQL92和SQL99语法均为SQL语法,即structured query language,结构化查询语音,其中92和99分别对应不同的年份
File 类是文件和目录的操作类,主要用于文件和目录的创建、查找和删除等操作。
SQL92/【99】标准的四大分类 :
(A)DML(数据操纵语言):select,insert,update,delete 操作我的数据的。
(B)DDL(数据定义语言):create table,alter table,drop table,truncate table 。。。
(C)DCL(数据控制语言):grant 权限 to scott,revoke 权限 from scott 。。。
(D)TCL(事务控制语言):commit,rollback,rollback to savepoint 。。。
insert
# DML 添加删除修改数据
# 添加数据 ``
# 语法 INSERT INTO 表名称 (字段1,字段2...)values(字段的值1,字段的值1..);
# 共 1 行受到影响
INSERT INTO `user` (username,`password`) VALUE ("小明","789");
INSERT INTO `user` (username) VALUE ("小明");
update
# where 条件
# 修改语句 update 表名称 set 字段1 = 修改的值,字段二 = 修改的值.... [where]
# 修改id为4的 把username 改成小明明
# 当修改不加条件时 , 就是修改全部记录
UPDATE `user` SET `username` = '小明明', `password` = 'abc' WHERE `id` = 4;
UPDATE `user` SET `username` = '小明明', `password` = 'abc'
\```
delete
# delete
# 语法: DELETE FROM 表名称 [where]
# 强制: 你们删除的时候必须加条件
# 需求: 删除账号为小明明的用户
DELETE FROM `user` WHERE `username` = '小明明';
# DQL 查询数据
# 查询语句: select 列名称列表 from 表名称列表 [where] ...
# 需求:查询 user 所有记录
SELECT id,`username`,`password` FROM `user`;
# 排序: 降序和升序 asc desc
# 需求: 根据id排序查询所有的用户
# * 代表所有
# 默认是升序 (asc) desc : 降序
SELECT * FROM USER ORDER BY id DESC
# limit 分页查询
# 每页3条数据
# 查询第二页数据 4 5 6
# LIMIT 起始行数 , 查询的条数
# 如果limit 是一个值的时候 第一个数默认是0
# 当前页数 (2-1)*10 10,10 20,20
SELECT * FROM USER LIMIT 6,3;
# SELECT * FROM USER LIMIT 4;
# 别名 as 可以省略!!
SELECT id,username 用户名称 FROM USER ;
# 条件查询
-- > 、< 、<= 、>= 、 、<> (不等于)
-- =
SELECT * FROM USER WHERE TYPE = '失效';
# 查询id 大于等5的所有用户
# <> != 这个2个都是不等于
SELECT * FROM USER WHERE id <> 5;
# in 查询 id 为 2 5 7 的用户 IN( 集合)
SELECT * FROM USER WHERE id IN(2,5,7);
SELECT * FROM USER WHERE id = 2 OR id = 5 OR id = 7;
# LIKE 模糊查询 % 任意的数
# 查询用户名称为1开头的所有用户
SELECT * FROM USER WHERE username LIKE "1%";
# 查询用户名称包含1的所有用户
SELECT * FROM USER WHERE username LIKE "%1%";
# 查询用户名称为3位数的所有用户 _ : 站的位数
SELECT * FROM USER WHERE username LIKE "___";
max(列名) 求这一列的最大值
min(列名) 求这一列的最小值
avg(列名) 求这一列的平均值
count(列名) 统计这一列有多少条记录
sum(列名) 对这一列求总和
前端:传递当前页码,每页显示的记录数固定(后端写死)
后端:当前页数据 总记录数量 可以计算总页数
查询当前页数据,查询总记录数
获取第一页的记录
limit start(开始查询的下标 0) pagesize(当前页的个数)
SELECT * FORM stu LIMIT 0,2
获取第二页的记录
SELECT * FORM stu LIMIT 2,2
如果查询的记录数不足pagesize,那就按照当前记录为主
计算总记录数
SELECT COUNT(id) FROM student
一对多
多对多
一对一
内连接
显式内连接
多表查询: 查询多个表的数据
查询语句语法:
select 列名称列表 from 表名称列表 where ...
SELECT * FROM dept
SELECT * FROM emp
单表不能满足条件
连表查询:需要消除无用的数据(消除笛卡尔乘积)
通过where 条件消除无用的数据
SELECT * FROM emp , dept WHERE emp.dept_id
=dept.id
;
连表查询分类
1.内连接
1.1 隐式内连接
需求: 查询所有用户信息,并且需要显示用户所在部门的名称
隐式内连接: 通过where条件消除无用的数据叫做隐式内连接
SELECT * FROM emp,dept WHERE emp.`dept_id` =dept.`id`;
#查出来发现有多处查询数据的字段名称一致时,可以使用别名区分
SELECT * FROM emp e,dept d WHERE e.`dept_id` =d.`id`;
SELECT e.id AS e_id ,e.name AS emp_name ,e.`gender`,
d.`id` AS d_id,d.name AS dept_name
FROM emp e,dept d WHERE e.`dept_id` =d.`id`;
在实际开发中,如果连表查询有相同的字段一定要使用别名。
1.2 显式内连接
显式内连接和隐式内连接实现的功能是一样的。只是写法不一样
显式内连接 inner join … on
SELECT e.id AS e_id ,e.name AS emp_name ,e.`gender`,
d.`id` AS d_id,d.name AS dept_name
FROM emp e INNER JOIN dept d ON e.`dept_id` =d.`id`;
隐式内连接和显式内连接只是写法不一致而已,实现功能没有什么区别,在实际开发中可以随便选择一种
推荐使用隐式内连接
当外键id没有赋值时,使用内连接查询,这条记录就不存在。内部默认认为没有外键的时使用连表查询时
这条记录是不合法的
但是实际开发这种有些记录是没有外键。
2.外连接
2.1 左外连接 left join … on
SELECT e.id AS e_id ,e.name AS emp_name ,e.`gender`,
d.`id` AS d_id,d.name AS dept_name
FROM emp e LEFT JOIN dept d ON e.`dept_id` =d.`id`;
左外连接 : 以左表为基准查询结果集。会查询左表的所有记录
SELECT e.id AS e_id ,e.name AS emp_name ,e.`gender`,
d.`id` AS d_id,d.name AS dept_name
FROM dept d LEFT JOIN emp e ON e.`dept_id` =d.`id`;
SELECT 字段 FROM 表 WHERE 某字段 Like 条件
第一范式就是原子性,字段不可再分割;
第二范式就是完全依赖,没有部分依赖;
第三范式就是没有传递依赖。