• Mysql笔记


    数据库SQL分类

    • DQL 数据库查询

      • Select相关语言
    • DML 数据库操作语言

      • CRUD
    • DDL 数据库定义语言

      • create drop alter truncate
    • TCL 事物控制语言

      • 事务提交 commit
      • 实物回滚 rollback
    • DCL 数据控制语言

      • 授权grant
      • 权限撤销revoke
    • 数据导入

      • use databasexx
      • source 路径.sql
    • 常用命令

      • select version(); 查看版本号
      • select database(); 查看数据库
      • \c 终止
      • 别名 select name as 'xx xx' 有空格使用单引号或双引号,最好用单引号,也可以不用as
      • select sal * 12 from table 列乘12
    • 优先级

      • and优先级高于or
    • in 不是区间,是具体值的列表

      • select* from table where job in('1','2')
    • 排序

      • select * from table order by sal asc, ename desc
        • 按照sal一致进行排序,当一致时,使用desc进行降序
      • select sal, ename order by 2
        • 按照第二列排序
      • select * from emp where sal between 1250 to 3000 order by sal desc
    • 聚合函数

      • count
      • sum
      • avg
      • max
      • min
      • 要先进行分组,再使用。未分组默认整个表是一组
      • group by xx
      • 注意点
        • 分组函数 默认忽略null值,不需要先对null进行处理

        • count(* ) 统计所有行数 和 count每个字段,*是组合不为null,count每个字段是统计字段下不为null的总数

        • select ename from emp where sal > min(sal) 错误

        • 执行顺序

          • from
          • where
          • group by
          • select
          • order by
        • select 在分组之后执行

      • group by 字段1,字段2 会根据第一个字段先聚合,后一个字段在之前字段内聚合
      • having
        • 在分组后筛选,用于开始无法使用where的情况
    • distinct关键字

      • 要用在最前方
      • 如果有多个字段,代表联合distinct
    • 连接方式

      • 内连接 inner join
        • 等值连接
          • on xx = yy
        • 非等值链接
          • on xx > yy and yy > zz
        • 自连接
          • 查询自己的领导 内连接
      • 外连接 outer join 可读性强
        • 内连接是双方共有的就会显示,外连接是一方存在,一方不存在,内连接无法使用。
        • 外连接以一个表为主表。一个表为附表
        • 连接产生了主次关系。
        • 左外连接 左连接
          • 左边的是主表
        • 右外连接 右连接
          • 右边的是主表
      • 全连接
    • 笛卡尔积现象

      • 两张表联查,不使用连接
    • 避免笛卡尔积

      • 连接时,加条件
      • 匹配次数没有减少
    • sql92 和 sql99条件

      • select xx
      • from
      • (inner)join // 连接 inner可以省略
      • on // 连接条件
      • where // 筛选条件
    • 子查询

      • where子查询
        • select enamel,sal from emp where sal > (select min(sal) from emp)
      • from后面的子查询可以当成一张临时表
      • select 子查询
        • 要保证后面子查询只有一条
    • union字段

      • 合并结果集,在多表连接的情况下,可以优化代码。
    • limit

      • 在order by后执行
      • limit 开始索引 0开始 length长度
      • limit length 长度
      • limit pageSize * (pageNo - 1) pageSize
    • 执行顺序

      • from
      • where(join on where)
      • group by
      • having
      • select
      • order by
      • limit
    • 建表

      • DBL语句
      • table 建议 t_ tb_
      • 见名知意
      • create table(字段名 1 类型,
        字段名 2 类型,

      );

      • varchar(0-255) 自动变长,会根据实际长度,动态更新空间,速度慢。
      • char(0-255) 定长字符串,速度快,容易浪费空间
      • clob 可存4G以上字符串
      • int(0-11) java int
      • bigint java long
      • float 单精度浮点
      • double 双精度浮点型
      • blob
      • date 短日期类型
      • datetime 长日期类型
    • 插入日期类型

      • str_to_date(日期,'%Y-%m-%d')
      • %Y 年 %y 使用两位
      • %m 月
      • %d 日
      • %h 小时
      • %i 分
      • %s 秒
    • 查询日期

      • date_format(字段名birth,'%y-%m-%d')
    • mysql 默认格式

      • %Y-%m-%d 不需要使用str_to_date(),或者date_format()
      • %Y-%m-%d %h:%i:%s
    • 获取现在时间

      • now()
    • 批量插入

      • insert into t_user(id,name,birth) values('','',''),(),(),(),()
      • creat t_users select * from t_user 将查询结果当成一张表
      • insert into t_user2 select * from t_user 插入一个表 嵌套select表
    • delete 删除 DML语句

      • 比较慢,删除效率低
      • 空间不会释放
      • 优点:支持回滚,后悔可以回复数据
    • truncate 物理删除 DDL语句

      • 删除效率高,表被一次截断
      • 缺点:不支持回滚
      • 优点:快速
      • truncate table dept;
    • 约束

      • 非空约束 not null
        • 只有列级约束
      • 唯一约束 unique
        • 联合唯一约束 unique(x1,x2)
      • 主键
        • mysql中,当not null 和unique联合使用的时候,会默认成为主键
        • 开发建议单一主键,不使用复合主键
        • 列级约束只能添加一个,但是可以在表级约束上添加第二个
        • 建议int ,bigint,不建议varchar
        • 自然主键:id 1 2 3 auto_increment
        • 业务主键:身份证号,银行卡号等
      • 外键
        • 外键约束,外键字段,外键值
        • 先删子表,再删父表
        • 先创建父表再删子表
        • 先插入父,再插入子
        • foreign key(cno) references t_class(classno)
        • 外键可以为null
        • 作为外键的元素至少具有unique约束
      • check
      • 列级约束
        • 加在字段后的约束
        • x1 type not null,
      • 表级约束
        • 在建表的最后
        • unique(x1,x2)
    • 存储引擎

      • 默认存储引擎 engine = innodb

      • 默认存储方式 default charset = utf8

      • 支持的引擎 9大存储引擎
        +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
        | Engine | Support | Comment | Transactions | XA | Savepoints |
        +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
        | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
        | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
        | CSV | YES | CSV storage engine | NO | NO | NO |
        | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
        | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
        | MyISAM | YES | MyISAM storage engine | NO | NO | NO |
        | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
        | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
        | ARCHIVE | YES | Archive storage engine | NO | NO | NO |
        +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

      • myisam用三个文件表示每一个表

        • 格式文件.frm文件 表结构
        • 数据文件.myd文件 数据
        • 索引文件。myi文件 索引
          • 主键或者有unique约束的字段会自动创建索引
          • 可以缩小扫描范围
        • 优势
          • 可以被压缩、只读表来节省空间
      • 重量级存储引擎

        • 每个innodb表,以.frm格式文件保存
        • innodb表空间tablespace被用于储存表内容,以及索引
        • Innodb 默认支持事务
          • commit提交 savepoint检查点 rollback回滚,支持事务
        • Innodb 支持崩溃后自动恢复
        • 提供全acid兼容
        • 多版本mvvc和行级锁定
        • 支持外键及引用的完整性
        • 效率不高 不能压缩
      • memory存储引擎(heap引擎)

        • 数据和索引都存入内存中
        • 不能包含blob和text
        • 查询效率最高
        • 关机后数据消失
        • 索引存在内存
    • 索引

      • 全表扫描
      • 根据索引扫描
        • 机制,扫描某个区间,利用排序好的区间
        • 需要排序,索引的实现是使用 treeMap
        • B-tree
        • 采用中序遍历方式取数据
      • 结构
        • 自平衡二叉树,btree
        • mysql使用b+树,比一般的b-tree要短
      • 过程
        • 每一行数据都对应一个硬盘位置编号
        • 先去二叉树里找id对应的硬盘位置地址
        • 改写sql,直接去硬盘查
        • 找到对应的数据
        • 通过物理编号,查到结果
      • 什么适合索引
        • 条件一:数据量庞大
        • 条件二:某个字段经常出现在where后面,经常被扫描
        • 条件三:该字段的增删改少
    • 索引创建语句

      • create index [ name ] on [ table ] (字段);
      • 解释语句
        • explain sql语句
    • 索引失效

      • 使用%T,以%开头无法通过索引查询
      • or语句,一边有索引,一边没有索引,索引失效。
      • 使用复合索引,没有使用左侧的列,导致索引失效。 最左原则,和B+树有关
      • where中使用索引的列进行数学运算
      • where中的索引列使用了函数
    • 索引是优化的手段

      • 单一索引 : 一个字段添加索引
      • 复合索引 : 两个字段或者更多字段添加索引
      • 主键索引 : 主键添加索引 默认
      • 唯一索引 : unique 约束自动添加索引
    • 视图

      • dql语句,才能以view的形式创建
      • create view index_view as select * from xx;
      • drop view index_view;
      • 可以做什么
        • 对视图view的操作可以影响原表
        • 相当于创建了一个引用,指向了一个sql语句
        • update可以同时更新多个表的数据
      • view 也是文件,但是是引用
    • DBA语句

      • Create USER 'username' IDENTIFIED by 'password' 创建用户

      • GRANT all privileges on . to 'p361'@'%'identified by '123';

      • Revoke

      • 数据导出(命令行)

        • mysqldump databaseName > D:\database.sql -uroot -p123456 // 导入一张表
        • mysqldump databaseName emp > D:\database.sql -uroot -p123456 // 导出一张表
      • 数据导入(进入mysql)

        • create database databaseName;
        • use databaseName;
        • source D:\database.sql;
  • 相关阅读:
    vimrc 配置 史上最牛
    nmap 黑客 端口扫描(转)
    linux export 命令(转)
    【引用】linux下编译静态库ranlib有什么用
    vim map nmap(转)
    vim 自定义命令 自定义快捷键(转)
    vimrc初学 vim 快捷键 map(转)
    vim 取消 查找 高亮
    Java内存模型(JMM)学习总结
    Struts2和Spring整合
  • 原文地址:https://www.cnblogs.com/kobe961231/p/15561200.html
Copyright © 2020-2023  润新知