MySQL命令 (0%)
交互式CLI工具
服务端命令
mysqld服务器程序
数据类型
DDL语句 (40%)
数据库操作
表操作
DML语句 (60%)
插入:INSERT
删除:DELETE
更新:UPDATE
检索:SELECT
单表查询
多表查询
子查询
MySQL命令
1、mysql:交互式CLI工具;命令化运行;
2、客户端命令:于客户端执行;
3、服务端命令:SQL语句,需要一次性完整地发往服务端;语句必须有结束符;
交互式CLI工具
交互式CLI工具:mysql [options] db_name |
|
-h host_name,–host=host_name |
服务端地址,默认为localhost; |
-u user_name,–user=user_name |
用户名,默认为root; |
-p[password],–password[=password] |
用户密码,默认为空密码; |
-P port_num ,–port=port_num |
服务端端口,默认为3306; |
–protocol={TCP|SOCKET|PIPE|MEMORY} |
本地通信:基于本地回环地址进行请求,将基于本地通信 协议;Linux:SOCKET;Windows:PIPE,MEMORY 非本地通信:使用非本地回环地址进行的请求 TCP协议; |
-S path,–socket=path |
SOCKET路径 |
-D db_name ,–database=db_name |
指明连接到服务器后,默认进入的数据库 |
-C,–compress |
数据压缩传输 |
-e statement,–execute=statement |
非交互模式执行SQL语句; |
-E,–vertical |
查询结果纵向显示; |
服务端命令
1、服务端命令:SQL语句,需要一次性完整地发往服务端;语句必须有结束符;
服务端命令:SQL语句,需要一次性完整地发往服务端;语句必须有结束符 |
? (\?) Synonym for `help'. |
clear (\c) Clear the current input statement. |
connect (\r) Reconnect to the server. Optional arguments are db and host. |
delimiter (\d) Set statement delimiter. |
edit (\e) Edit command with $EDITOR. |
ego (\G) Send command to mysql server, display result vertically. |
exit (\q) Exit mysql. Same as quit. |
go (\g) Send command to mysql server. |
help (\h) Display this help. |
nopager (\n) Disable pager, print to stdout. |
note (\t) Don't write into outfile. |
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER. |
print (\p) Print current command. |
prompt (\R) Change your mysql prompt. |
quit (\q) Quit mysql. |
rehash (\#) Rebuild completion hash. |
source (\.) Execute an SQL script file. Takes a file name as an argument. |
status (\s) Get status information from the server. |
system (\!) Execute a system shell command. |
tee (\T) Set outfile [to_outfile]. Append everything into given outfile. |
use (\u) Use another database. Takes database name as argument. |
charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets. |
warnings (\W) Show warnings after every statement. |
nowarning (\w) Don't show warnings after every statement. |
2、mysql命令的使用帮助:
# man mysql # mysql --help --verbose
3、sql脚本运行:
mysql [options] [DATABASE] < /PATH/FROM/SOME_SQL_SCRIPT
mysqld服务器程序
mysqld服务器程序:工作特性的定义方式
1、服务器参数/变量:设定MySQL的运行特性;
mysql> SHOW [GLOBAL | SESSION] VARIABLES [like_or_where];
2、状态(统计)参数/变量:保存MySQL运行过程中的统计数据或状态数据;通常不能修改;
mysql> SHOW [GLOBAL | SESSION] STATUS [like_or_where];
3、显示单个变量设定值的方法:
mysql> SELECT @@[global.|session.]system_var_name
%:匹配任意长度的任意字符;
_:匹配任意单个字符;
4、变量/参数级别:
全局:global,为所有会话设定默认;
会话:session,跟单个会话相关;会话建立会从全局继承;
5服务器变量的调整方式:
运行时修改:
global:仅对修改后新建立的会话有效;
session:仅对当前会话有效,且立即生效;
通过配置文件修改,重启后生效;
6、运行时修改服务器变量值操作方法:
mysql> HELP SET SET [GLOBAL | SESSION] system_var_name = expr SET [@@global. | @@session. | @@]system_var_name = expr
7、安装完成后的安全初始化:
#mysql_secure_installation
8、运行前常修改的参数:
innodb_file_per_table=ON 修改InnoDB为独立表空间模式 skip_name_resolve=ON 禁止MySQL对外部连接进行DNS解析 sql_safe_updates=ON 阻止不带条件更新操作
数据类型
MySQL的数据类型:字符型、数值型、日期时间型、内建类型
SQL中的字符类型: 通过mysql> help 'Data Types'命令可获取帮助 |
||
字 符 型 |
定长字符型: |
|
CHAR(#) 不区分字符大小写 |
BINARY(#) 区分字符大小写 |
|
变长字符型: |
||
VARCHAR(#) 不区分字符大小写,需要在字符长度加1,最多65536个字符 |
VARBINARY(#):不区分字符大小写,需要在字符长度加1,最多65536个字符 |
|
对象存储: |
||
TEXT:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT |
BLOB:TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB |
|
数 值 型 |
精确数值型: |
|
INT(TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT)整型 |
DECIMAL十进制数据 |
|
近似数值型: |
||
FLOAT 单精度浮点型 |
DOUBLE 双精度浮点型 |
|
REAL |
BIT |
|
日期时间型 |
DATE 日期型 |
TIME 时间型 |
DATETIME 日期时间型 |
TIMESTAMP 时间戳 |
|
YEAR(2) 2位年数 |
YEAR(4) 4位年数 |
|
内建类型 |
SET 集合 |
|
ENUM 枚举 |
||
类型修饰符 |
字符型:NOT NULL,NULL,DEFALUT 'STRING',CHARACET SET 'CHARSET',COLLATION 'collocation' |
整型:NOT NULL, NULL, DEFALUT value,AUTO_INCREMENT,UNSIGNED |
日期时间型:NOT NULL, NULL, DEFAULT |
SQL MODE:定义mysqld对约束等违反时的响应行为等设定;
常用的MODE: |
|
TRADITIONAL |
严格模式,保证错误数据不能插入,报error错误。 |
STRICT_TRANS_TABLES |
如果给定的值非法,则放弃该语句,返回错误并继续执行剩余的行。 |
STRICT_ALL_TABLES |
如果给定的值非法,则放弃该语句,返回错误并忽视剩余的行。 |
修改方式: |
|
mysql> SET GLOBAL sql_mode='MODE'; |
|
mysql> SET @@global.sql_mode='MODE'; |
MySQL中字符大小写
1.SQL关键字及函数不区分大小写
2.数据库、表及视图名称的大小写区分与否取决于底层OS和FS
3.存储过程、存储函数及时间调度器的名字不区分大小写,但触发器区分大小写
4.表别名区分大小写
5.对字段中的数据,如果字段类型为binary类型,则区分大小写,非binary不区分大小写
DDL语句
DDL:Data Defination Language,数据库定义语言
mysql> HELP Data Definition CREATE, ALTER, DROP DATABASE, TABLE INDEX, VIEW, USER FUNCTION, FUNCTION UDF, PROCEDURE, TABLESPACE, TRIGGER, SERVER
数据库操作
新建数据库:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name CHARACTER SET [=] charset_name COLLATE [=] collation_name;
修改数据库:
ALTER {DATABASE | SCHEMA} [db_name] CHARACTER SET [=] charset_name COLLATE [=] collation_name;
删除数据库:
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;
表操作
1、创建新表:CREATE
(1)、直接创建表:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] [partition_options]; CREATE TABLE [IF NOT EXISTS] tble_name (col_name data_typ|INDEX|CONSTRAINT);
(2)、直接创建表,并将查询语句的结果插入到新创建的表中;
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [partition_options] select_statement;
(3)、复制某存在的表的结构来创建新的空表;
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_tbl_name | (LIKE old_tbl_name) };
2、删除表:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name];
3、修改表:
ALTER TABLE tbl_name [alter_specification [, alter_specification] ...];
可修改内容:
(1) table_options
(2) 添加定义:字段、字段集合、索引、约束
ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ];
(3) 修改字段:
修改字段名称,并设置字段的位置:
CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name];
修改字段类型及属性及位置:
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name];
(4) 删除操作:字段、索引、约束
DROP [COLUMN] col_name;
表重命名
RENAME [TO|AS] new_tbl_name
4、表查看
查看表结构定义:
DESC tbl_name;
查看表定义:
SHOW CREATE TABLE tbl_name
查看表属性信息:
SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
各参数详解: |
【IF NOT EXISTS】:如果不存在则执行操作,,用于避免mysql报错; |
【IF EXISTS】:如果存在则执行操作,用于避免mysql报错; |
【CHARACTER SET [=] charset_name】:设置默认的字符集; |
【COLLATE [=] collation_name】:设置默认的排序方式; |
【TEMPORARY】:创建临时表; |
【create_definition】:这是表的列属性部分,创建表时,表要至少包含一列; |
【(create_definition,…)】参数:定义字段、字段集合、索引、约束等; col_name type [NOT NULL|NULL] [DEFAULT] [UNIQUE] [AUTO_INCREMENT] [PRIMARY KEY][FOREIGN KEY] [reference_definition] col_name:表示表中字段的名称 type:表示字段的数据类型 NOT NULL|NULL:指出该列是否允许是空值,系统一般默认允许为空值,所以当不允许为空值时,必须使用NOT NULL; DEFAULT:为该字段设置默认值 UNIQUE:表示该字段的值是唯一的 AUTO_INCREMENT:表示该字段的值是自动编号(自动增加),每个表只能有一个AUTO_INCREMENT列,并且必须被索引; PRIMARY KEY:设置该字段为的主键,如果没设定,而某些应用程序需要,MySQL会将第一个没有任何NULL列的唯一键,作为主键; FOREIGN KEY:表示该字段为该表的外键,是与之联系的某表的主键; reference_definition:为字段添加注释; |
【table_options】参数:定义表的特性参数 ENGINE [=] engine_name:定义存储引擎;从5.5开始默认为InnoDB,版本小于5.5默认为MyISAM; 查看支持的所有存储引擎:mysql> SHOW ENGINES; 查看指定表的存储引擎:mysql> SHOW TABLE STATUS LIKE clause; AUTO_INCREMENT [=] VALUE :指定AUTO_INCREMENT的起始值 [DEFAULT] CHARACTER SET [=] charset_name :指定字符集 CHECKSUM [=] {0 | 1} :是否使用校验值,不建议使用 [DEFAULT] COLLATE [=] collation_name:指定排序规则 COMMENT [=] 'string':表的注释信息 DELAY_KEY_WRITE [=] {0 | 1} :是否启用间延迟写入 TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}] 定义表空间 ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}:定义表的格式 DEFAULT默认,DYNAMIC动态,FIXED静态,COMPRESSED压缩,REDUNDANT冗余,COMPACT紧致 |
【select_statement】:SELECT语句,用于快速创建表 |
【AS】:别名 |
索引:数据结构
创建:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name,...);
查看:
SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr];
删除:
DROP INDEX index_name ON tbl_name
索引类型:
聚集索引、非聚集索引:索引是否与数据存在一起;
主键索引、辅助索引
稠密索引、稀疏索引:是否索引了每一个数据项;
BTREE(B+)、HASH、R Tree、FULLTEXT
BTREE:左前缀;
EXPLAIN:分析查询语句的执行路径;
视图:VIEW
虚表:存储下来的SELECT语句;
创建:
CREATE VIEW view_name [(column_list)] AS select_statement;
修改:
ALTER VIEW view_name [(column_list)] AS select_statement;
删除: DROP VIEW [IF EXISTS] view_name [, view_name] ...;
DML语句
DML: Data Manipulation Language,数据库操纵语言
查看所有DML语句:
mysql> HELP Data Manipulation INSERT/REPLACE,DELETE,UPDATE,SELECT
插入:INSERT
单行插入
批量插入
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] Or: INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] Or: INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]
删除:DELETE
DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
注意:一定要有限制条件,否则将清空整个表;
限制条件:
[WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
更新:UPDATE
UPDATE table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
注意:一定要有限制条件,否则将修改整个表中指定字段的数据;
限制条件:
[WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
注意:sql_safe_updates变量可阻止不带条件更新操作;
检索:SELECT
Query Cache:缓存查询的执行结果;
key:查询语句的hash值;
value:查询语句的执行结果;
SQL语句的编写方式:
SELECT name FROM tbl2; select name from tbl2;
查询执行路径:
请求–>查询缓存:命中后返回;
请求–>查询缓存–>解析器–>预处理器–>优化器–>查询执行引擎–>存储引擎–>缓存–>响应
默认不缓存,非确定结果不缓存 大于或小于某范围不缓存
SELECT语句的执行流程:
FROM –> WHERE –> Group By –> Having –> Order BY –> SELECT –> Limit
单表查询
SELECT [ALL | DISTINCT | DISTINCTROW ] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}]
用法:
SELECT col1, col2, ... FROM tble_name; SELECT col1, col2, ... FROM tble_name WHERE clause; SELECT col1, col2, ... FROM tble_name [WHERE clause] GROUP BY col_name [HAVING clause];
分组的目的在于聚合计算:avg, max, min, count, sum,
DISTINCT:数据去重;
SQL_CACHE:显式指定缓存查询语句的结果;
SQL_NO_CACHE:显式指定不缓存查询语句的结果;
query_cache_type服务器变量有三个值:
ON:启用;
SQL_NO_CACHE:不缓存;默认符合缓存条件都缓存;
OFF:关闭;
DEMAND:按需缓存;
SQL_CACHE:缓存;默认不缓存;
字段可以使用别名 :
col1 AS alias1, col2 AS alias2, ...
WHERE子句:指明过滤条件以实现"选择"功能;
过滤条件:布尔型表达式;
[WHERE where_condition]
WHERE操作符: [WHERE where_condition] |
|||
算术操作符: |
"+"、 "-"、 "*"、 "/"、 "%" |
||
比较操作符: |
"="、 "<>"、 "!= "、 "<=>"、 ">"、 ">="、 "<"、 "<=" 注:"<>"、"!= "均为不等于; "<=>"类似"=",用于与空值比较 |
||
逻辑操作符 |
"AND"; "OR"; "NOT"; "XOR" |
||
IS NULL |
是否为空 |
IS NOT NULL |
是否不为空 |
BETWEEN min AND max |
指定区间 |
IN |
给定条件列表 |
LIKE |
模糊比较,"%"、"_" |
RLIKE或REGEXP |
使用正则匹配 |
GROUP BY:根据指定的字段把查询的结果进行"分组"以用于"聚合"运算;
聚合运算:GROUP BY |
|||
avg() |
平均值 |
max() |
最大值 |
sum() |
求和 |
min() |
最小值 |
count() |
计数 |
||
ASC |
升序 |
DESC |
降序 |
HAVING |
对分组聚合后的结果进行条件过滤 |
LIMIT:对输出结果进行数量限制
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
offset:偏移的行数; row_count:显示行数;
多表查询
连接操作:
交叉连接:笛卡尔积;
内连接:
等值连接:让表之间的字段以等值的方式建立连接;
不等值连接:
自然连接
自连接
外连接:
左外连接:
FROM tb1 LEFT JOIN tb2 ON tb1.col = tb2.col
右外连接:
FROM tb1 RIGHT JOIN tb2 ON tb1.col = tb2.col
子查询
子查询:在查询中嵌套查询;
用于WHERE子句中的子查询;
(1) 用于比较表达式中的子查询:子查询仅能返回单个值;
(2) 用于IN中的子查询:子查询可以返回一个列表值;
(3) 用于EXISTS中的子查询:
用于FROM子句中的子查询;
SELECT tb_alias.col1, ... FROM (SELECT clause) AS tb_alias WHERE clause;
联合查询:将多个查询语句的执行结果相合并;
UNION SELECT clause UNION SELECT cluase;
本文完【返回页首】
原创文章,作者:Jev Tse,如若转载,请注明出处:http://www.178linux.com/68929