黑帽联盟

标题: mysql快速复习整理笔记(一) [打印本页]

作者: yun    时间: 2016-11-27 20:43
标题: mysql快速复习整理笔记(一)
本帖最后由 yun 于 2016-11-27 20:45 编辑

1Mysql数据库默认有三个数据库:

Information_schema:这个数据库是一个虚拟数据库,跟视图有些类似。主要用来存储其它数据库的信息,比如数据库名称和表的名称,以及列的数据类型等等
                                 实质是:存储数据的结构

Mysql:主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和
理信息。不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里
的表信息。
Performance_schema:主要用于收集数据库服务器性能参数(版本5.5之后就多出来了)
Test:这是一个测试数据库,mysql刚安装好的就有,里面没有表,可以删除


2、数据库类型

Int 整形     char  varchar varchar2 字符型    text 文本
Data time datatime 日期时间类型   时间戳 timestamp



3、数据库类型属性

Null 数据列可包含空值
Not null 数据列不允许出现null
Default xxx   插入记录的时候,将取默认值
Primary key 主键
Auto_increment  插入记录的时,没有指定值,在上一条记录值上自动加1,仅适整数类型
Character set name  指定表中所使用的字符集,不指定就是用数据库默认的字符集



4、数据语言的分类:

数据定义语言:Data definition language,简称DDL,其包括createdrop alter等语句
Create table/database 表名/数据库名;
Drop table 表名;(记录和结构都被删除)
Alter table 表名 add column 新增加的列名 类型;
Alter table 表名 modify 列名 类型;(修改表当中列的属性)
Alter table 表名 change column(可以省略) 旧列名 新列名 类型;


数据操纵语言:Data manipulation language,简称DML,其包括insertupdate delete语句
Insert into 表名(列名,列名,values(值1,值2);
Update 表名 set 列名=新值,列名=新值 where 列名=值;
Delete from 表名 where 列名=值;(只删除记录,不删除结构)

数据查询语言:Data retrieval language,简称DRL,其包括select语句
Dual 是一个虚表,可用来计算,例如:select 1+3 ‘sum’ from dual


查询可分为:模糊查询、排序查询,分组查询,多表联合查询
模糊查询 like
Select * from 表名 where 列名 like ‘%c’;(查询列名中值当中最后一个字母为c 的记录)


数据排序查询
select * from teacher_tab where name like'%l%' order by createDate desc,age desc
(先按照createDate进行降序排序,如果出现日期相同的话,在按照age对其进行降序排序)


分组查询
Select gendercount(gender) from teacher_tab group by gender
(查询男女各多少人),切忌:查询语句中如果有group by语句,那就必须有聚合函数,比如count()now()

Select gendercount(gender) from teacher_tab group by gender having gender=’m’
或者
Select gendercount(gender) from teacher_tab where gender=’m’ group by gender;这种写法效率比较低
(查询性别为女的总人数)


分页查询
Select * from teacher_tab limit 0,3;(查询表前三条记录)
第一个数字:代表的是从哪筛选,这个数字代表的是索引值,索引默认从0开始的,也就相当于表当中的第一条记录。
第二个数字:代表的是帅选几条记录出来



事务控制语言:transaction control language,简称TCL,其包括commitrollback等语句。

事务的定义:对数据库的多步操作,每一步操作就相当于一个事务

事务默认的提交方式是自动提交的,即autocommit=true

事务保存点:savepoint  前提:必须设置手动提交set autocommit=false
Update teacher_tab set gender=’m’ whereid=2;
Delete from teacher_tab where id=8;
Savepoint p1;

Delete from teacher_tab where id=7;

此时如果认为id=7的那条记录是属于误删,想恢复的话,就可以使用rollback进行回滚,即 rollback to p1;记录就恢复了。
如果直接使用rollback,则之前的所有操作就全部恢复了。


Mysql第三方客户端管理工具:navicat


Mysql聚合函数:

Avg count sum min max
Count(*),其结果包含null
Count(字段),其不包含null值。



Mysql条件控制语句:

Case语句:
语法:case when 条件判断 then when 条件判断 then else end
Select case …


If语句:
语法:Ifexp1exp2exp3),如果条件表达式exp1成立的话,返回exp2;否则返回exp3


Ifnull语句:
语法:ifnullexp1exp2)如果exp1部位空的话,返回exp1;否则返回exp2


Nullif语句:
语法:nullifexp1exp2),如果exp1=exp2,则返回null值;否则返回exp1



Mysql字符函数


Mysql日期时间函数


Mysql外键

定义:另一张表的主键,用来与其它表进行关键。

外键语法:foreignkey(字段)references表名(字段)

Alter table emp add foreign key(dept_id)references dept(id)

查看外键的名称:showcreate table emp



Mysql表的连接
内连接
语法:select …from 1 inner join 2 where 条件
select * from emp e join dept d wheree.dept_id=d.id;


外连接
分为:左外连接(leftjoin)和右外连接(rightjoin
select e.name,d.name from emp e left joindept d on e.dept_id=d.id;(左外连接:显示左表全部)

select e.name,d.name from emp e right joindept d on e.dept_id=d.id;(右外连接:显示右表全部)


交叉连接
select e.name,d.name from emp e cross joindept d ;(交叉连接:相当于下面的语句)
或者
select e.name,d.name from emp e,dept d;


自连接

select e1.name from emp e1 right join empe2 on e1.id=e2.gmr;

select e1.name from emp e1 left join emp e2on e1.id=e2.gmr;



mysql子查询

select name,salary from emp wheresalary=(select max(salary) from emp);
查询最高工资的员工姓名

select avg(salary),dept_id from emp wheredept_id is not null group by dept_id;
查询每个部门的平均工资

select name,salary from emp where salary>(selectavg(salary) from emp);
查询工资大于平均工资的员工



Mysql数据库索引

语法:create index索引名 on 表名(列名)

作用:主要用来提高查询的速度,优化mysql查询性能。

唯一索引:和普通索引的区别:该唯一索引上所有列值都是唯一的,不能重复

语法:createunique index 索引名 on 表名(列名)

删除索引:dropindex 索引名 on 表名;

主键索引:当创建表的时候,添加主键的时候,主键索引就被自动添加上了。

禁用索引:altertable 表名 disablekeys

开启索引:altertable 表名 enable keys

设计索引的原则:1、最适合索引的列是出现在where字句中的列,或连接字句中的列,即on后面的列。而不是出现在爱select后面的列。
                2、索引列的值越多不相同的,索引的效果越好。

                3、索引的列一般用条件判断时所用的列(经常用的列)






欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) Powered by Discuz! X2.5