登录mysql: 修改密码的常见方法: set password命令: 登录mysql 例如: 用mysqladmin 用Update直接编辑user表 忘记root密码的情况下修改密码:(以window为例) 表是数据库的基本组成单元,是一个结构化文件。其包括 查询一个字段: tips: 所有的sql语句都要以 查询多个字段: 查询全部字段: 给字段起别名: 字段进行简单运算: 对重复字段进行去重: tips:当参与运算的字段为NULL时,计算的结果始终为NULL。 格式: 执行顺序:from–>where–>-select 查询工资等于5000的员工名字: 查询工资在3000~5000的员工名字: 查找没有津贴的员工名字: 找出工资大于1000且编号是20或30的员工: tips:当运算符不确定时,加个小括号 找出岗位是MANAGE和SALESMAN的员工: 模糊查找: 格式: asc:表示升序排序。desc表示降序排序。如不指定则默认升序排序 **tips:**上面格式的执行顺序为: 分组函数又叫多行处理函数、聚合函数。 分组函数都是对某一组数据进行操作 分组函数的特点: 使用: 思考1:count(*)和count(某个字段)的区别: 思考2: 执行顺序:from –> where –> group by –> having –> select tips: 案例: 思考下面这条语句是否正确: 解决分组函数部分留下的问题: 一个完整的sql语句格式: 根据语法来分: 根据表的连接方式来分: 在表的连接查询方面有一种现象被称为笛卡尔积现象。即两张表连接的时候没有进行条件限制,导致最终结果是两张表记录条数的乘积。 说白了就是第一张表的每条数据会跟第二张表的每条数据连接,然后形成一张大表。 查询每个员工的部门名称,显示员工名和部门名。 找出员工的工资等级,显示员工名、工资、工资等级 找出每个员工的上级领导,显示员工名和对应的领导名 找出每个员工的上级领导,显示员工名和对应的领导名 找出没有员工的部门 找出每个员工的部门名称、工资等级以及上级领导 sql语句中可以嵌套select语句,嵌套的select语句就是子查询。 子查询可以出现在哪里: 在from中嵌套子查询 找出每个部门平均工资的薪水等级 union作用:可以将两个不相干的表的查询结果集相加。 语法: 通用的标准分页sql: 结论:设每页显示Size条数据,则第N页要显示的数据为: 格式: 如创建学生表(学号,姓名,班级,班级编号,生日) 格式: 字段的数量跟值得数量要相等,且类型要对应相同。 若不指定具体字段则表示全部字段。 格式: tips:若不指定条件则对整张表的数据全部更新 格式: tips:没有条件则全部删除 删除大表(不可恢复) 通过delete的方式删除数据后还可以恢复。但如何永久删除数据呢? 常见约束: 给某一列添加unique(列级约束) 给多列分别添加unique 给多列添加unique(表级约束) 一般一张表就一个主键,不建议多个。 主键的作用:作为每条记录的唯一标识。 主键分类: **自增主键:auto_increment ** A表的 tips: 外键值可以为null。 被引用值不一定是主键,但一定要唯一。 外键值 必须 跟 被引用字段中的 其中一个的值 相等。 格式: 在建表的时候可以指定存储引擎和字符集。如 mysql默认使用的存储引擎是 mysql常见存储引擎: 一个事务是一个完整的业务逻辑,不可再分。 事务的存在使数据更加的安全,完整。 例如:银行账户转账,从A账户向B账户转账1000,需要执行两条DML语句 tips: 事物的 tips: 索引就相当于书目录,通过它可快速查找到数据。 添加索引是只给某个或某些字段添加索引。 数据库查找数据有两种检索机制: 创建索引对象: 删除索引对象: tips: 那什么时候考虑加索引呢: 索引分类: 索引底层采用的数据结构: 索引实现原理: 通过B+树缩小扫描范围,底层会对 索引什么时候会失效?当模糊查找且第一个位是通配符时。 此部分在另一篇博客写的比较详细,就不在此重复了。 另外,过几天会放一些我做的练习题跟答案上来。
1.安装Mysql
1.1 关于密码的一些事
mysql -uroot -p
set password for 用户名@localhost = password(‘新密码’);
set password for root@localhost = password(‘123’);
mysqladmin -u用户名 -p旧密码 password 新密码
use mysql;
update user set password=password(‘新密码’) where user=‘root’ and host=‘localhost’;
flush privileges;
mysqld --skip-grant-tables
,–skip-grant-tables代表启动Mysql服务的时候跳过权限表认证。mysql
use mysql;
update user set password=password(‘新密码’) where user=‘root’;
flush privileges;
1.2 卸载mysql
2. Mysql概述
2.1 sql、DB、DBMS分别是什么?
2.2 表
2.3 sql分类
select
的都是DQLinsert、delete、update
create、drop、alter
2.4 Mysql常见命令
mysql -uroot -p密码
show datebases;
create database 数据库名字;
drop database 数据库名字;
use 数据库名字;
show tables;
source 文件路径;
mysqldump 数据库名;
musqldump 数据库名 表名;
desc 表名;
exit
2.5 查询操作
2.5.1 简单查询
select 字段名 from 表名;
;
结尾。并且sql不区分大小写。
select 字段名1,字段名2... from 表名
;
select * from 表名;
select 字段名 as 别名 from 表名;
select 字段名 别名 from 表名;
(以空格分隔其别名)
select money*10 from wages;
使用distinct关键字
select dinstinct job from emp; tips: 1、dinstinct只能放在所有字段的最前面。代表将select的字段看成一组再进行过滤。 2、可以跟分组函数一起使用。
补充:空处理函数 ifnull(可能为null的数据,被当做什么处理) 如:ifnull(ewage,0) 表示当ewage为null时结果变成0
2.5.2 条件查询
select 字段,字段,字段... from 表名 where 条件;
比较操作符:
= , < , > , >= , <= , <>或!=
字符串比较:
LIKE , NOE LIKE
逻辑操作符:
AND , OR , NOT
值的域:
BETWEEN , NOT BETWEEN
值的列表:
IN , NOT IN
未知的值:
IS NULL , IS NOT NULL
select ename from emp where ewage=5000;
select ename from emp where ewage>=3000 and ewage<=5000;
select ename from emp where ewage between 3000 and 5000;
select ename from emp where comm is null;
select ename from emp where ewage>1000 and (eno=20 or eno=30);
select ename from where job in ('MANAGE','SALESMAN');
like 、not like
%
:匹配任意多个字符_
:匹配单个字符
select ename from emp where ename like ‘%O%’;
select ename from emp where ename like ‘_A%’;
_
是有特殊含义的,需要使用转义)
select ename from emp where ename like ‘%_%’;
2.6 排序数据
select 字段名 from 表名 [where 条件] order by 要排序字段1,字段2,字段3... [asc|desc];
from --> where --> select --> order by
select * from emp order by ewage;
升序select * from emp order by ewage asc;
升序select * from emp order by ewage desc;
降序
select * from emp where job='SALESMENT' order by ewage desc,ename asc;
2.7 分组函数
count
计算数据条数
sum
求和
avg
求平均值
max
求最大值
min
求最小值
select sum(ewage) from emp;
select max(ewage) from emp;
select count(*) from emp;
count(*) 是统计记录总条数 count(某个字段) 是统计这个字段不为null的数据总数
如果要找出工资大于平均工资的员工:可否使用下面这个语句 select ename from emp where ewage > avg(ewage); 答案是不可以。因为分组函数不能用在where后面。为什么呢?在分组查询那里揭晓。
2.8 分组查询
select 字段名1,字段名2... from 表名 [where 条件] group by 要分组的字段 [having 分组后过滤的条件];
select max(ewage) from emp group by job;
select depino,job,max(ewage) from emp group by deptno,job;
select deptno from emp group by deptno having max(ewage)>2900;
select deptno from emp where ewage>2900 group by deptno;
select deptno,avg(ewage) from emp group by deptno having avg(ewage)>2000;
select ename,max(ewage),job from emp group by job; 答案:错误。因为ename没有进行分组。
找出工资大于平均工资的员工 select ename from emp where ewage > (select avg(ewage) from emp);
2.9 小结
执行顺序 select 字段 5 from 表名 1 where 条件 2 group by 要分组字段 3 having 再次过滤的条件 4 order by 排序字段; 6
3.0 连接查询
from A,B where A.字段=B.字段
from B join A on 表的连接条件 where 数据筛选条件
inner
outer
如何避免笛卡尔积? 答:增加条件限制 避免了笛卡尔积现象会减少匹配次数吗。 答:不会,因为两张表的每条数据还是要带着条件一一匹配,匹配成功则显示。
内连接跟外连接的区别
:
内连接
:假设A表和B表进行内连接,凡是AB表同时匹配上的记录都会被查询出来。外连接
:假设A表和B表进行外连接,那么AB表中有一个是主表,有一个是副表,而查询主要查主表内容,捎带着查询B表而已。即A表中的数据全部会显示,B表中的数据只有跟A表中的数据匹配上时才会显示,否则为null。3.0.1 等值连接—案例:
// SQL92写法: select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
// SQL99写法:推荐 select e.name,d.dname from emp e [inner] join dept d on e.deptno=d.deptno;
3.0.2 非等值连接—案例:
select e.name,e.ewage,e.range from emp e join erange r on e.ewage>=r.lowwage and e.ewage < r.highwage
3.0.3 自连接—案例
select e.ename,e.boss from emp a join emp b on a.boss = b.eno; //弊端就是当此员工没有上级领导时不显示
3.0.4 左连接—案例
select e.ename,e.boss from emp a left [outer] join emp b on a.boss = b.eno; //好处是当此员工没有上级领导时正常显示
3.0.5 右连接—案例
select d.* from emp e join dept d on e.deptno = d.deptno where e.ename!=null;
3.0.6 多表联查
select e.ename,d.dname,w.range,e.boss from emp e join dept d on e.deptno=d.deptno join wage w on e.ewage between w.lowwage and w.highwage left join emp e1 on e.boss = e1.empno;
3.1 子查询
select ..(select) from ..(select) where ..(select)
select t.*,w.range from (select deptno,avg(ewage) as sal from emp group by deptno) as t join wage w on t.sal between w.lowwage and w.highwage;
3.2 union
select ename from emp union select dname from dept;
3.3 limit — Mysql特有
limit startIndex,length
startIndex
代表起始位置(不指定默认为0)。length
代表长度。
select ename from emp order by ewage desc limit 5;
select ename from emp order by ewage desc limit 0,5;
select ename from emp order by ewage limit 3,6;
设每页显示 5条数据 第一页:limit 0,5 第二页:limit 5,5 第三页:limit 10,5 第四页:limit 15,5 。。。。。。
limit (N-1)*Size,Size
3.4 创建表
create table 表名( 字段名1 数据类型 [约束条件], 字段名2 数据类型 [约束条件], 字段名3 数据类型 [约束条件], .... );
drop table if exists t_student; //t_student存在的话就删除 create table t_student( sno bigint, name varchar(255), sex char(1) );
3.5 插入数据
insert into 表名(字段1,字段2...) values(值1,值2...);
insert into t_student values(1,'codekiang','1');
insert into t_student(sno,name,sex) values(1,'codekiang','1');
insert into t_student values(2,'hang','1'),(3,'meinv','0');
insert into t_student(name) values('hhh');
3.6 修改数据
update 表名 set 字段1=值1,字段2=值2... where 条件;
update dept set loc='shanghai' where deptno=10;
3.7 删除数据
delete from 表名 where 条件;
delete from dept where deptno=10;
truncate table 表名;
表给截断,不可回滚delete table 表名;
3.8 约束
not null
:非空约束,表示该字段不能为空unique
:唯一约束,表示该字段不能重复primary key
:主键约束,表示该字段不能为空也不能为重复foreign key
:外键约束,3.8.1 非空约束 not null
drop table if exists t_user; create table t_user( id int not null, name varchar(255), );
3.8.2 唯一约束 unique
drop table if exists t_user; create table t_user( id int unique, name varchar(255), );
drop table if exists t_user; create table t_user( id int unique, sno int unique, name varchar(255) ); //每个id不可以重复,每个sno不可以重复
drop table if exists t_user; create table t_user( id int, sno int, name varchar(255), unique(id,sno), );//id跟sno联合起来不可以重复,如id=1,sno=2跟id=1,sno=3是不违背unique的。
3.8.3 主键约束 primary key
drop table if exists t_user; create table t_user( id int primary key, name varchar(255), );
单一主键
:就一个主键。(推荐)复合主键
:多个字段联合起来形成一个主键。(违背三范式)
自然主键
:主键值不跟业务挂钩。(推荐使用)业务主键
:主键值跟业务挂钩,如身份证,银行卡。drop table if exists t_user; create table t_user( id int auto_increment, //该字段自动维护一个自增的数字,从1开始,每次递增1 name varchar(255), )
3.8.4 外键约束 foreign key
a
字段参考B表的某个唯一
字段,则a字段
被称为外键
address表
user表(dno为外键,参考address的id字段)
id address
sno name dno
101 广州
1 李四 208
正确
,dno = 208 = id
208 深圳
2 张三 555
不正确
,dno = 555 != id
304 梅州
3 王五 208
正确
,dno = 208 =id
401 佛山
4 杭杭 304
正确
,dno = 304 = idcreate table student( sno int, sname varchar(255), classno int, foreign key(classno) references t_class(cno) );
3.9 存储引擎(了解)
存储引擎
:mysql存储表的机制。create table s (id int) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
InnoDB
,默认字符集是UTF8
。
MyISAM
.frm
文件(存储表的结构).MYD
文件(存储表的数据).MYI
文件(存储表的索引)InnoDB
.frm
文件**MEMORY
.frm
文件中4.0 事务 (Transaction)
update t_act set money=money-1000 where actno='A';
跟update t_act set money=money+1000 where actno='B';
。此时需要保证这两条更新语句必须同时成功或同时失败。
事务
。事务执行流程
:
commit;
提交事务。缓存区的内容更新到文件,清空缓存区rollback;
回滚事务。清空缓存区。
事务的特性:ACID
隔离性
分为4
个等级:
oracle
默认使用的隔离级别是:读已提交
mysql
默认使用的隔离级别是:可重复读
start transaction;
可关闭自动提交机制。4.1 索引
create index 索引名 on 表名(字段名);
drop index 索引名 on 表名;
单一索引
、复合索引
、主键索引
、唯一索引
B+树
索引字段
**(携带着该字段在表中的物理位置)**进行排序分区(可能是按大小,也可能按字母),当索引检索到数据之后获取到该数据的物理位置,通过物理位置直接定位到表中的数据。4.2 视图 、范式、E-R图
详情可看另一篇博客:数据库原理紧急复习
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算