操作命令集

  • cd C:\Program Files\MySQL\MySQL Server 5.7\bin   进入到Mysql的bin目录
  • mysql -h localhost -u root -p     输入密码后进入mysql>命令行模式
  • mysql> show databases[\G];       显示数据库列表    
  • mysql> create database test123;      创建数据库名为test123的数据库
  • mysql> drop database test123;       删除数据库名为test123的数据库(不可恢复,谨慎操作)
  • mysql> show engines[\G];    显示当前数据库支持的存储引擎
  • mysql> use sys;    mysql> show tables;   切换到某个数据库,然后显示该数据库下的全部表
  • mysql> select * from bs_field [ limit 1];     显示某个表的数据【一条】
  • mysql> desc bs_field;    查看某个表的结构
  • mysql> show create table bs_field[ \G];   查看表的详细信息
  • mysql> select version();     查询服务器版本号
  • mysql> select connection_id();    查询当前连接数
  • mysql> show processlist;    输出当前用户的连接信息
  • mysql> select database();   显示当前使用的数据库
  • mysql> show index from table [\G];    查询table表的索引情况
  • mysql> CREATE USER 'james'@'localhost' IDENTIFIED BY 'tiger'; 创建用户james,密码tiger

存储引擎

1)支持的存储引擎

  • InnoDB
  • MyISAM
  • MEMORY
  • ARCHIVE
  • CSV
  • BLACKHOLE

InnoDB:

①Mysql5.5.5版本之后默认引擎;②支持事务,支持行锁定,支持外键;③创建3个文件,ibdate1(10M自动拓展的数据文件),ib_logfield0、ib_logfield1(5M大小的日志文件)

 MyISAM:

①Mysql5.5.5版本之前默认引擎;②不支持事务;③拥有较高的查询和插入速度;④每张表最大索引数64,每个索引最大列数16;⑤索引可以作用在BLOB和TEXT上;⑥创建数据库产生三个文件,frm文件存储定义表,数据文件拓展名为.MYD,索引拓展名为.MYI;

MEMORY:

①将表中的数据存储到内存中;②存储引擎执行HASH和BTREE;③不支持TEXT和BLOB;

其他

数据类型

1)INT(11)中数字11表示该数据类型指定的显示长度,其实际长度最长可到取值范围最大数值;

2)金钱存储用DECIMAL,浮点数(FLOAT和DOUBLE)和定点数(DECIMAL)类型都可以用(M,N)表示,M为精度,N为标度;DECIMAL和DOUBLE取值范围一样,DECIMAL以串的形式存放,

3)TIMESTAMP和DATETIME显示格式相同,宽度固定在19个字符,TIMESTAMP的取值范围小于DATETIME,取值范围是1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC,UTC为世界标准时间;TIMESTAMP存储的时候按照世界标准时间(UTC)进行存储,存储时对当前时区进行转换;检索时会转换会当前时区;

4)CHAR和VARCHAR后者时可变字符,检索的时候,CHAR会将首位空格去掉再返回,VARCHAR则不会;

5)BLOB是二进制字符串,可以存储图片、音频等信息,TEXT只能存储纯文本;

运算符

运算符优先级

 

mysql在线语法检查 mysql5.7语法_mysql

sql语句

1)IFNULL(V1,V2)    如果V1不为空,返回V1,否则返回V2

2)between  A and B , 该查询条件包含开始值和结束值

3)and的优先级大于or的优先级

4)多列排序  ... order by  A  desc  ,  B  desc

5)group by 子句中使用  with rollup   显示记录数 (select lan,count(*) from tableA group by lan with rollup;最后一行显示总记录数),注

:使用rollup时不能使用order by

6)count(*)和count(字段名)区别,count(*)计算空值,后者不计算空值,空值即显示null的值

7)limit  [m,] n 

  • limit 2 ;  显示前两条数据
  • limit   3,5;  从第3+1条数据开始,一共显示5条

8)max(字符串)  比较字符串的ASCII码

9)exists拓展(后续补充)

10)合并查询,union:去重、排序,union all:全集

11)条件更新:update person set info='学生' where age between 19 and 26;

完整查询语句

SELECT DISTINCT <select_list>
FROM <left_table>
<join_type> JOIN <right_table>
ON <join_condition>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
ORDER BY <order_by_condition>
LIMIT <limit_number>

执行顺序

1)FORM: 对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1。
2)ON: 对虚表VT1进行ON过滤,只有那些符合<join-condition>的行才会被记录在虚表VT2中。
3)JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3。
4)WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。
5)GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5。
6)HAVING: 对虚拟表VT5应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT6中。
7)SELECT: 执行select操作,选择指定的列,插入到虚拟表VT7中。
8)DISTINCT: 对VT7中的记录进行去重。产生虚拟表VT8.
9)ORDER BY: 将虚拟表VT8中的记录按照<order_by_list>进行排序操作,产生虚拟表VT9.
10)LIMIT:取出指定行的记录,产生虚拟表VT10, 并将结果返回。

 索引

索引是一个单独的、存储在磁盘上的数据库结构,包含着对数据库表里所有记录的引用指针;

  • 优点:①加快查询速度;②分组和排序子句进行查询时,可以显著减少查询中分组和排序的时间;
  • 缺点:①创建和维护索引耗费时间;②索引占用磁盘空间,如果有大量索引,索引文件可能比数据文件更快达到最大尺寸;③增加、删除和修改的时候要维护索引,降低数据的维护速度;

分类:

  • 普通索引和唯一索引
  • 单列索引和组合索引
  • 全文索引
  • 空间索引

全文索引:只有MyISAM引擎支持,可以作用在char、varchar、text上,类型为FULLTEXT;

空间索引:只有MEMERY引擎支持,空间索引数据类型有4种GEOMETRY、POINT、LINESTRING和POLYGON。使用SPATIAL进行拓展,创建空间索引的列必须声明为NOT NULL;

设计原则

1)索引不是越多越好,影响增删改性能,占磁盘空间

2)避免对经常更新的表增加过多索引

3)数据量小的表最好不要使用索引

4)在经常分组排序的列上面创建索引

5)尽量选择较少数量的列作,减少磁盘空间和维护的开销

6)尽可能让一个索引覆盖较多的查询

7)尽量采用短索引,能用10个长度的索引不要用30长度的索引

创建索引sql

  • 普通索引:建表语句,index(列)
  • 唯一索引:建表语句,unique index(列)
  • 单列索引:建表语句,index SingleIdx(name(20));对name列前20字母索引
  • 组合索引:建表语句,index MultiIdx(id,name,age(100))  命中原则:最左前缀原则

关键字 explain  

查看索引是否命中

句法:explain + DQL

视图

语法:CREATE VIEW view_name as SELECT lie_a,lie_b,lie_c FROM table;

查看表是否是视图:SHOW TABLE STATUS LIKE '视图名';如果Comment:VIEW;即为视图

查看视图字段来自哪张表:SHOW CREATE VIEW view_name [\G];

修改视图语句:ALTER VIEW view_name AS SELECT ....FROM table_name;

说明:视图的增删改查和正常表一样,修改和新增的内容直接作用在源表,可以在视图中创建索引;

权限管理

权限表说明

user表:Mysql最重要的权限表,记录允许连接到服务器的账号信息,里面的权限是全局的;

db表:存储了用户对某个数据库的操作权限,决定用户能从哪个足迹存取哪个数据库;

host表:存储了某个主机对数据库的操作权限,配合db表对给定主机上数据库级的操作权限做更细致的控制;

tables_priv表:用来对表设置操作权限;

columns_priv表:用来对表的某一列设置权限;

proces_priv表:对存储过程和存储函数设置操作权限;

请求核实过程

用户向mysql发出操作请求==》user表==》db+host表==》tables_priv表==》columns_priv表==》全通过后方可进行操作;

 操作用户sql

查看用户权限:SHOW GRANTS FOG 'username'@'localhost';

删除指定用户:DEOP USER  'username'@'localhost';

创建用户:mysql> CREATE USER 'james'@'localhost' IDENTIFIED BY 'tiger';

数据的备份与恢复

数据备份:mysqldump

对表备份语法:mysqldump -u用户名 -p密码 -h地址 -P端口号  dbname [tbname [,tbname...]] > 路径+文件名

示例:mysqldump -uroot -proot -h192.168.200.128 -P3306  bookDB  book > C:/db/book_20201010.sql

对库备份语法:mysqldump -u用户名 -p密码 -h地址 -P端口号  --databases [dbname [,dbname]] > 路径+文件名

示例:mysqldump -uroot -proot -h192.168.200.128 -P3306  --databases  bookDB  , bookDB2 > C:/db/book_20201010.sql

示例2备份系统中所有数据库:mysqldump -uroot -proot -h192.168.200.128 -P3306  --all-databases  > C:/db/book_20201010.sql

语法:mysqldump --opt -u用户名 -p密码 -hIP地址 -P端口号 --default-character-set=utf8  -B 数据库名 > 文件地址+文件名称

将host1上的sourceDb复制到host2的targetDb,前提是host2主机上已经创建targetDb数据库:mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb

注意:只有安装Mysql Client端才能执行命令

参数说明

--opt:①建表语句包含drop table if exists tableName;② insert之前包含一个锁表语句lock tables tableName write,insert之后包含unlock tables

--all-databases:备份某个MySQL主机上的所有数据库

数据恢复:mysql

语法:mysql -u用户名 -p密码 -hIP地址 -P端口号 --default-character-set=utf8  -B 数据库名 < 文件地址+文件名称

示例:mysql -uroot -proot -h192.168.200.128 -P3306 --default-character-set=utf8  -B  testuser < ./conf_sql/recover_db/conf.sql

Mysql日志

mysql>show variables like 'log_%';   查看是否启用了日志

mysql> show variables like 'log_error';   获取错误日志的详细位置

mysql> show variables like 'log_bin';      确认你日志是否启用了二进制日志

mysql> show binary logs;       查看二进制日志文件名

mysql> show binlog events;     回放日志事件

bin> mysqlbinlog d:\programfiles\mysql\logbin.000001;      二进制日志查看,日志里面记录的所有的DDL和DML语句,但select语句除外

慢查询日志

mysql> show variables like 'long%';   查看慢查询时间设定, long_query_time变量是定义慢于多少秒的才算“慢查询”

mysql> set long_query_time=1;   设置慢查询时间,注: 设置1, 也就是执行时间超过1秒的都算慢查询。

mysql> show variables like 'slow%';      慢查询设置详情

mysql> set global slow_query_log='ON'   开启慢查询日志记录,执行完立即开启


Mysql优化

查看sql性能:explain/desc +查询语句;