黑帽联盟

 找回密码
 会员注册
查看: 1623|回复: 0
打印 上一主题 下一主题

[mysql] mysql快速复习整理笔记(一)

[复制链接]
yun 黑帽联盟官方人员 

920

主题

37

听众

1364

积分

超级版主

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2019-10-18 11:20
  • 签到天数: 678 天

    [LV.9]以坛为家II

    本帖最后由 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、索引的列一般用条件判断时所用的列(经常用的列)

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部