mysql(重点)
1:Mysql的安装(参考文档)
mysql卸载
- Mysql(数据库)的基本概念
- MySql常用命令以及基础操作
- MySql查询语句;
2:什么是数据库database
数据库就是一个存放数据的仓库;
存放的是什么:文字,声音,视频,图片。。。
要求:这些数据时有关联的,并且是按照一定格式来存放的;
3:数据库管理系统 dbms
databasemanagerSystem
Crud c create r read u update d delete
4:数据库系统
5:数据模型
数据库管理系统根据数据模型对数据进行存储和管理,数据库管理系统采用的数据模型主要有层次模型、网状模型和关系模型。
5.1层次模型
5.2网状模型
5.3关系模型
以excel表格形式(行和列的形式)来存储数据的模型就是关系模型;
其中每一行被称为一条记录,每一列被称为一个字段,表格的标题被称为字段名;
现在流行的数据库管理系统大多采用关系模型进行数据的组织和管理,因为按关系模型组织的数据表达方式简洁、直观,插入、删除、修改操作方便,而按层次、网状模型组织的数据表达方式复杂,插入、删除、修改操作复杂。因此关系型数据库得以广泛的应用,如Oracle、MySQL、SQLServer、DB2等。
关系型数据库的标准语言是SQL(Structured Query Language,结构化查询语言)
SQL语言的功能包括4个部分
数据查询(select)
数据操纵(delete/update/insert)
数据定义(create/alter/drop)
数据控制(grant/revoke)
:5.3.1常见的关系型数据库:
Mysql , Oracle ,sqlServer , DB2 ,
5.3.2Sql数据库 (安全可靠)
依靠sql语句进行操作的数据库 ;
5.3.3NoSql数据库 (高效)
不依赖sql语句来操作的数据库;
主要是用来做缓存的; redis mgdb
6:!!!
:7:Mysql的常用命令
7.1打开mysql
Linux上:
Mysql -u用户名 -p密码
或者:
Mysql -u用户名 -p
EntryPassword: 密码
如果是5。5的
如果是5.7的
输入密码
7.2显示已有的数据库
Mysql里面包含了多个数据库,每一个数据库里面包含了多张表;
表里面存放的是数据;
Show databases;
7.3创建一个数据库
Create database [if not exists] 数据库名;
7.4删除数据库
Drop databses 数据库名;
7.5选用一个数据库
use 数据库名
7.6显示某一个数据库的所有表
7.7显示sys数据库里面的所有表
7.8退出
exit
8MySQL数据库的命名规则
在MySQL中,给数据库、表、索引、列命名时,要遵循MySQL的命名规则
MySQL命名可用字符为:
名称可由服务器所采用字符集中任意字母、数字、“_”和“ $”组成。
名称可按上述任意字符包括数字起头。但是名称不能单独由数字组成,因为那样会使其与数值相混。
数据库、表、列和索引名称最多可由6 4个字符组成。别名最多可长达256个字符。
9 Mysql的常用数据类型
MySQL的数据类型分为以下四种:
数值型
MySQL可以处理普通十进制的数据,也可以处理十六进制的数据。
字符型
MySQL中的字符型数据是用来保存字符串的。
日期和时间类型
日期和时间是一些诸如“2006-09-10”或“12:30:43”这样的值。
NULL值
NULL是一种“无类型”的值。
10char和varchar的区别
11表的基础操作
11.1创建表
Create table 表名(
字段名1 数据类型 【约束】 ,
字段名2 数据类型 【约束】 ,
。。。
字段名n 数据类型 [约束]
);
11.2向表里面添加数据
11.2.1添加所有列的记录
Insert into 表名 values( 值 ); 值与你的列一一对应;
11.2.2添加制定的记录
Insert into 表名(列名1,列明2.。。) values(值,,,);
11.3查询某张表里面的的记录
Select * from 表名;
11.4修改表里面的数据
Update 表名 set 列名=更改后的值,列名=值,列名=值,,
[Where 条件语句];
11.5修改年龄为18的学生信息
11.6按条件删除:
Delete from 表名 where 条件;
删除年龄为18的学生;
11.7删除表里面的所有数据
delete from表名
11.8回顾:
添加 insert into 表名 values(值);
Insert into 表名(列名) values(值);
查询: select * from 表名;
修改: update 表名 set 列名=值,,, [where 条件]
删除: delete from 表名 [where 条件]
12MySQL客户端
12.1连接数据库
12.2建表
13数据库完整性
什么是数据完整性
确保数据库中包含的数据尽可能地准确和一致的数据性质
存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。
满足数据完整性的数据的特点
数据的值正确无误
数据的存在必须确保同一个表格数据之间的和谐统一
数据的存在必须确保维护不同表格之间的数据的和谐统一
MySQL使用完整性约束防止不合法的数据进入到基表中。管理员和开发人员可以定义完整性规则,限制数据表中的数据。
数据完整性的分类
域完整性的实现
实体完整性的实现
参照完整性的实现
14.约束
约束(Constraint)是在表上强制执行的数据校验规则,用于保护数据的完整性。如下:
not null 非空 check 检查 保证域完整性
unique key 唯一键 primary key 主键 (非空 唯一) 实体完整性
foreign key 外键 参照完整性
15设计一个数据库 公司员工的数据库
部门表
部门编号 | 部门名称 | 部门职责 |
1 | 教学部 | 负责教学 |
2 | 公关部 | 喝酒抽烟 |
3 | 财务部 | 负责发钱 |
员工信息表
员工编号 | 姓名 | 性别 | 年龄 | 入职日期 | 所属部门 |
15.1部门
15.2员工表
外键
16设计一个老师和学生表
17查询操作
17.1表单操作
1.查询员工表里面的所有信息;
select * from emp;
* 不建议使用
select e_id,e_name,e_age,e_date,d_id from emp;
2.查询表里面的所有的姓名和年龄信息;
select e_name , e_age from emp;
3.查询表里面的姓名和年龄 并且使用别名;
列名 [as] 别名
select e_name as 姓名 , e_age as 年龄 from emp;
where 条件
where 条件里面可以使用 > < = >= <= <>不等于
4.查询出年龄大于12的员工
select * from emp where e_age>12;
5.查询出年龄在11-13之间的员工
and 表示并且
select * from emp where e_age>11 and e_age<13;
between ... and ... 在。。。到。。。直接
select * from emp where e_age between 11 and 13;
6.查询出年龄等于11的员工
select * from emp where e_age=11;
7.查询出年龄为 11 或者 12 的学生
or 或者
select * from emp where e_age=11 or e_age=12;
in(x,y,z) 或者 x 或者 Y ...
select * from emp where e_age in(11,12);
模糊查询
where 字段名 like xxx;
%小 以小结束的
小% 以小开头的
%小% 只要包含小的
_小% 第二位是小的
_ _ 小% 第三位是小耳朵
8.查询出名字里面含有小的所有员工
select * from emp where e_name like "%小%";
9.查询出名字里面不含小的
select * from emp where e_name not like "%小%";
聚合函数
count() 统计
sum() 求和
avg() 求平均数
max() 最大的
min() 最小的
10.统计出一共有多少个学生;
select count(e_id) from emp;
11.求出emp的平均年龄
select avg(e_age) from emp;
12.求出最大的年龄
select max(e_age) from emp;
13.查询出最大年龄的员工信息;
select * from emp where e_age=(select max(e_age) from emp);
子查询
一个查询语句的结果是另一个查询语句的条件
1.查询出最大的年龄
select max(e_Age) from emp
2.查这个年龄的员工的信息
select * from emp where e_age=(select max(e_age) from emp)
14.查询出d_id=1的一共有多少人?
select count(e_id) from emp where d_id=1;
15.查询出教学部一共有多少人?
1、首先查询教学部的id
select count(e_id) from emp where d_id=(select d_id from dept where d_name='教学部')
16.查询出每一个部门有多少人;
部门: java组 大数据组 ui组 py组
分组查询: group by 列名
select d_id,count(e_id) from emp group by d_id;
17.查询出部门人数大于1个人的部门;
select d_id,count(e_id) from emp group by d_id having count(e_id)>1;
where 和 having后面都是条件
where 后面的条件里面不是使用函数 ,having里面只能是函数
having一般和group by 一起使用;
18.查询出所有的员工信息,并且按年龄从大到小排序;
排序函数: order by 列名 desc 降序
order by 列名 [asc] 升序
select * from emp order by e_age desc;
19.查询从表里面第2条第3条记录;
limit x,y x表示从第几条开始 从0开始 y 表示查询多少条记录
select * from emp limit 1,2
查询第10到--第16条 limit 9,7
查询的语法:
select */列名 [as 别名] from 表名 [as 别名]
[where 条件]
[group by 列名]
[having 条件]
[order by 列名 desc/asc]
[limit ?,?]
20.查询出所有的部门信息以及员工信息;
select * from emp,dept;
这样查查出来员工笛卡尔集
{A B} {1 2}
{A1 A2 B1 B2}
21.查询出所有的与员工信息 (员工的所有信息和他所属部门的信息)
select * from emp e,dept d where e.d_id=d.d_id;
等值连接
22.查询出所有的与员工信息 (员工的所有信息和他所属部门的信息)
左连接
左表 left join 右表 on 条件
左外连接
左表 LEFT OUTER JOIN 右表 on 条件
查询出来的是左表里面的所有数据以及右表里面符合条件的数据;
select * from emp e left join dept d on e.d_id=d.d_id;
右连接
查询出来的是右表的所有数据和左表里面符合条件的数据
select * from emp e right join dept d on e.d_id=d.d_id;
23.如果3张表
select * from b1 left join b2 on b1.xxx=b2.xxx left join b3 on b1.xxx=b3.xxx left join ...
24.查询出小明的所属信息
select * from emp e left join dept d on e.d_id=d.d_id where e.e_name="小明"
25.查询出小明的姓名,年龄以及部门名称;
select e.e_name ,e.e_age ,d.d_name from emp e left join dept d on e.d_id=d.d_id where e.e_name="小明"