MySQL学习笔记

141 阅读3分钟
  • MySQL相关学习笔记,在此稍作记录。
启动服务:
    service mysql start
重启服务:
    service mysql restart
关闭服务:
    service mysql stop
SQL分类:
    DDL(数据定义语言)>: create、drop、alter
    DML(数据操纵语言)>: insert、delete、update
    DCL(数据控制语言)>: grant、revoke
修改数据库密码:
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; #更新一下用户的密码 
1.Mysql数据库安装说明文档 http://blog.csdn.net/mchdba/article/details/53618276
PS:若是docker,则先进入命令行
    docker exec -it mysql /bin/bash
2.连接远程数据库
    mysql -h ip -u root -p
3.连接本地数据库
    mysql -u root -p
4.连接数据库指定某个库
    mysql -D databaseName -u root -p
5.修改数据库密码
    mysqladmin -u root -p oldpwd newpwd
DDL相关命令:
    show databases;查看所有数据库
    create database test;创建名为test的数据库
    user test;进入并使用 test 数据库
    show tables;查看当前库所有的表名列表
    drop database test;删除数据库 test
    desc tablename;查看表定义
    drop tablename;删除表
    alter table emp modify ename varchar(20);修改表字段信息
    alter table emp drop column age;删除表emp中的age字段
    alter table emp change age age1 int(4);修改字段名称并且修改字段类型
    alter table emp add birth date after ename;在字段ename后添加类型为date的字段birth
    alter table emp modify age int(3) first;将 age 字段挪到最前面
    alter table emp rename emp1;修改表名
DML 相关语句:
    select distinct ename from emp;查询结果去重
    order by id asc(默认)正序,desc 倒序
    select - from - where - group by - order by-with rollup-having
优化:
    1、如果条件查询记录唯一,用=替代in
    2、如果子查询可以改为表连接则使用表连接
union 去重、union all 不去重
DCL相关语句:
创建一个数据库用户 z1,具有对 sakila 数据库中所有表的 SELECT/INSERT 权限:
    grant select,insert on sakila.* to 'z1'@'localhost' identified by '123';
由于权限变更,需要将 z1 的权限变更,收回 INSERT,只能对数据进行 SELECT 操作:
    revoke insert on sakila.* from 'z1'@'localhost';
InnoDB引擎支持事务、行锁、支持集群、数据缓存、索引缓存
MyISAM 引擎不支持事务、表锁,不支持集群、不支持数据缓存、不支持索引缓存
InnoDB不区分固定长度和可变长度列,所以尽量使用自动varchar代替char
BLOB可以存储二进制,入图片视频等,TEXT 大文本
  • MySQL优化:
1、软优化:
    1.1、查询语句优化
        使用 DESC 命令分析一条查询语句的执行信息
        DESC select * from users
    1.2、优化子查询
        在 MySQL 中尽量使用 JOIN 来代替子查询,因为子查询需要嵌套查询会建立临时表,临时表的创建和删除	  都会消耗较大的系统开销,连接查询不会创建临时表,因此效率比嵌套查询高
    1.3、使用索引
        索引是提高数据库查询速度的重要方法之一,需要注意的是:
        LIKE关键字匹配'%'开头的字符串,不会使用索引;
        OR关键字的两个字段必须都是用了索引,该查询才会使用索引;
        使用多列索引必须满足最左匹配。
    1.4、分解表
        对于字段较多的表,如果某些字段使用频率较低,应当将其分离出来形成新的表
    1.5、中间表
        对于大量连接查询的表可以创建中间表,从而减少在查询时造成的连接耗时
    1.6、增加冗余字段
        适当增加冗余字段可以减少连接查询的频率
2、硬优化
    2.1、硬件优化
    2.2、数据库参数优化
    2.3、分库分表
    2.4、使用缓存集群