一、mysql 登录命令

-h 指定主机名 【默认为localhost】
-P MySQL服务器端口 【默认3306】
-u 指定用户名 【默认root】
-p 指定登录密码 【默认为空密码】
此处mysql为指定使用的数据库
-e 接SQL语句
-C, --compress //在客户端和服务器端传递信息时使用压缩
-s -r 就不显示原来的边框,方便下一步处理结果

eg:
mysql -h192.168.5.240 -P 3306 -u root -p123 mysql -e ‘select user,host from user’

二、msyql用户管理

1、用户管理

语法:

1、创建与授权用户
	#创建用户
	create user 'username'@'host' identified by 'password';
	#用户授权
	grant 权限 on database.table to 'username'@'host';
	#刷新权限
	FLUSH PRIVILEGES;

eg:
	 create user 'li'@'%' identified by 'Litaimin@123';
	 grant all privileges on *.* to 'li'@'%';
	 FLUSH PRIVILEGES;

2、删除用户
	DROP USER 'username'@'host';

3、查看用户情况
	#查看用户的user,host
	mysql>select user,host from mysql.user; 
	#查看用户授权
	mysql>show grants for slave@192.168.3.215 \G;

2、 密码管理

root修改其他用户密码

SET PASSWORD FOR 'username'@'host'='new_password'

普通用户修改自己密码

SET password=password('new_password');

查看现有的密码策略

SHOW VARIABLES LIKE 'validate_password%';

1).validate_password_dictionary_file 指定密码验证的文件路径;
2).validate_password_length 密码最小长度
3).validate_password_mixed_case_count 密码至少要包含的小写字母个数和大写字母个数;
4).validate_password_number_count 密码至少要包含的数字个数
5).validate_password_policy 密码强度检查等级,对应等级为:0/LOW、1/MEDIUM、2/STRONG,默认为1
    0/LOW:只检查长度;
    1/MEDIUM:检查长度、数字、大小写、特殊字符;
    2/STRONG:检查长度、数字、大小写、特殊字符字典文件。
6).validate_password_special_char_count密码至少要包含的特殊字符数

三、sql使用

1、操作数据库

1、创建数据库(两种方式)
mysql> create DATABASE RUNOOB;
mysqladmin -u root -p create RUNOOB

2、删除数据库(谨慎操作)
mysql> drop database RUNOOB;
mysqladmin -u root -p drop RUNOOB

3、使用数据库
mysql> use RUNOOB;

4、查看
mysql> show databases;

2、操作表

1、创建
mysql>CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、删除
mysql> DROP TABLE runoob_tbl;

3、改
	3.1 增加字段
	ALTER TABLE testalter_tbl ADD i INT;
	3.2 删除字段
	ALTER TABLE testalter_tbl  DROP i;
	3.3 修改字段
	ALTER TABLE testalter_tbl MODIFY c CHAR(10); 
	ALTER TABLE testalter_tbl CHANGE i j BIGINT;
	ALTER TABLE testalter_tbl RENAME TO alter_tbl;
		#modify 只能修改字段类型
		#change 可修改字段类型和名字
		#rename to 修改表名
	3.4 查询字段
	SHOW COLUMNS FROM testalter_tbl;
	
4、查看
mysql> show tables;

3、操作数据

3.1 增
INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

eg:
INSERT INTO student(name, class) VALUES("lisi", "103");
3.2 删
DELETE FROM table_name [WHERE Clause]

eg:
DELETE FROM runoob_tbl WHERE runoob_id=3;
3.3 更改
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]

eg:
UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;
3.4 查询
语法:
SELECT column_name,column_name FROM table_name 
[WHERE Clause] 
[LIMIT N][ OFFSET M]


- where : 查询条件 
- limit : 设定返回的记录数
- offset : 指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0
3.4.1 union

UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)

UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];


DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。

ALL: 可选,返回所有结果集,包含重复数据。


eg:
SELECT country FROM Websites
UNION
SELECT country FROM apps
3.4.2 排序
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]

ASC:升序(默认)
DESC:降序

eg:
SELECT * from test ORDER BY score DESC;
3.4.3 分组

GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

eg:
SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
3.4.4 连表

join可以实现多表查询

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

3.5 where
语法:
[WHERE condition1 [AND [OR]] condition2.....]

eg:
SELECT * from runoob_tbl WHERE binary runoob_author='RUNOOB.COM';

# binary 区分大小写(不带该参数,默认不区分大小写)
3.5.1 like

模糊匹配

eg:
SELECT * from runoob_tbl  WHERE runoob_author LIKE '%COM';

LIKE 通常与 % 一同使用,类似于一个元字符的搜索
3.5.2 null值处理

4、show

show  databases;                          #查看所有数据库
show tables;                                          #查看当前库的所有表
SHOW TABLES FROM                        #查看某个指定库下的表
show create database world                #查看建库语句
show create table world.city                #查看建表语句
show  grants for  root@'localhost'       #查看用户的权限信息
show  charset;                                   #查看字符集
show collation                                      #查看校对规则
show processlist;                                  #查看数据库连接情况
show index from                                 #表的索引情况
show status                                         #数据库状态查看
SHOW STATUS LIKE '%lock%';         #模糊查询数据库某些状态
SHOW VARIABLES                             #查看所有配置信息
SHOW variables LIKE '%lock%';          #查看部分配置信息
show engines                                       #查看支持的所有的存储引擎
show engine innodb status\G               #查看InnoDB引擎相关的状态信息
show binary logs                                    #列举所有的二进制日志
show master status                                 #查看数据库的日志位置信息
show binlog evnets in                             #查看二进制日志事件
show slave status \G                             #查看从库状态
SHOW RELAYLOG EVENTS               #查看从库relaylog事件信息
desc  (show colums from city)               #查看表的列定义信息
http://dev.mysql.com/doc/refman/5.7/en/show.html

四、事务

事务由多个操作数据库命令组成

一般来说,事务是必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

原子性:一个事务中的所有操作,要么全部完成,要么全部不完成。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交

五、索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列

```sql
1、增
CREATE INDEX indexName ON table_name (column_name)

2、删
DROP INDEX [indexName] ON mytable; 

3、改
ALTER table tableName ADD INDEX indexName(columnName)

4、查
SHOW INDEX FROM table_name\G