全文核心内容思维导图

第三部分:从入门到精通 | MySQL知识整理(下)
四、客户机和工具
命令行客户机程序
1.这几个客户机都必须运行mysqld服务器程序,客户机才能访问数据库;
2.mysql是通用的命令行客户机,用于向服务器发送SQL语句,其中包括用于管理的SQL语句;
3.mysqladmin是可帮助管理服务器的管理命令行客户机;
4.mysqlimport为LOAD DATA INFILE语句提供了命令行界面;使用该客户机可以将数据文件装入表中,而无需手动发出LOAD DATA INFILE语句;之后讲导入导出数据时会具体再讲;
5.mysqldump是用于转储数据库和表中内容的命令行客户机;使用它可备份数据库或将其复制到其他计算机;
调用命令行客户机
两种常见的选项语法格式:
1.长选项(–):双横线选项后面加等号和参数;
2.短选项(-):单横线选项后加空格和参数; mysql -V;
连接参数选项
1.-h:后跟给定主机的主机名或IP地址,用于连接到服务器(默认为localhost);
2.-C:压缩客户机和服务器之间发送的所有信息(如果两者都支持压缩);
3.–protocol:后跟用于连接到服务器的连接协议:
{TCP|SOCKET|PIPE|MEMORY};
4.-P:后跟端口号,用于代替默认值(3306);
5.-S:用于设置UNIX套接字文件或在Windows上使用的命名管道的名称;
6.–shared-memory-base-name:(仅Windows)通过共享内存连接到本地服务器时所使用的共享内存的名称;此选项仅在服务器支持共享内存连接时适用;
调用mysql客户机
1.在命令行中提供凭证:
u选项后面可带或不带空格;-p选项后面不带空格,如果对该选项使用空值,则系统会提示您输入口令;
mysql –login-path=admin -e “SELECT VERSION()”;
可以使用[ > | < ]重定向流,用来运行脚本或者批处理文件;
文件必须为纯文本格式,其中每个语句都有语句终结符;
文件必须位于运行 mysql 客户机的主机上;
<和-e是互斥的,不能同时使用
mysql 客户机:安全更新
例子:
# mysqlmysql> use db1;mysql> SELECT * FROM t1;mysql> UPDATE t1 SET id = id + 1;mysql> COMMIT;# mysql -uroot -p –safe-updatemysql> use db1;mysql> UPDATE t1 SET id = id + 1;ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
mysql 客户机:输出格式
–table(或 -t):生成表格输出格式,即使在以批处理模式运行时也是如此,这是交互模式的默认格式;
–batch(或 -B):生成批处理模式(用制表符分隔的)输出(即使在以交互模式运行时也是如此),且不使用历史文件,这是批处理模式的默认格式;
–html(或 -H):生成 HTML 格式的输出;
–xml(或 -X):生成 XML 格式的输出;
mysql 客户机:MySQL客户机命令
1.?与help一样,获得帮助信息;2.clear:清除当前输入的语句,在错误的语句后面输入\c即可;3.connect:重新连接服务器,可以指定主机名和服务器,输入connect dbname host或或者\r dbname host即可;4.delimiter:语句分隔符,设置执行语句的符号,执行delimiter $$即可;5.edit:调用vi修改sql语句,在要修改的语句后面输入\e即可;6.go:发送命令到mysql服务器;7.pager:查询内容太多,分页显示,设置:>pager less,禁止:>nopager;8.tee:把查询结果输入到一个文件中:>tee tmp/rst.txt,禁止notee,主要用于数据库的备份脚本输出;9.prompt:改变提示符,如:prompt royalwzy>;则每次输入命令是提示符变为royalwzy>字符串(可以在配置文件中定义,prompt=xxx);10.quit/exit:都是退出客户端,输入quit,exit和\q都行;11.source:执行一个sql脚本文件,文件名为参数,source tmp/sql.txt;12.system:执行操作系统的命令,用法:system ls -l tmp 或者\! ls -l tmp;13.status:查看服务器信息的状态,输入status或者\s即可;14.use:改变使用的数据库,后面跟数据库的名称,eg:use mysql;15.charset:修改字符集,可以通过status查看当前使用的字符集,eg:charset latin1;16.warnings:开启警告信息,当输入的sql语句出错时,可以通过show warning或者show errors来打印警告或者错误信息,设置:warning或者\W,关闭:nowarning或者\w;17.rehash:设置客户端自动补全功能;1).在服务器的配置文件中[mysql]节点下,默认使用no-auto-rehash选项;2).注释no-auto-rehash选项,添加auto-rehash选项,reboot;
mysql> \s;
tee my_tee_file.txt;
mysql 客户机:SQL语句
1.CREATE DATABASE/TABLE:用于创建具有给定名称的数据库或表;2.ALTER DATABASE/TABLE:可更改数据库或表的整体特性;3.DROP DATABASE/TABLE:用于删除数据库中的所有表并删除该数据库,或者用于删除特定的表;
1.SELECT:用于从一个或多个表中检索所选的行;2.INSERT:用于在现有表中插入新行;3.DELETE:用于删除现有表中的行;4.UPDATE:用于使用新值更新指定表中现有行的列;5.JOIN:组合使用多个表以用于SELECT,多表DELETE和UPDATE语句;
mysql 客户机:有关SQL语句的帮助
>help contents;
>help administration;
>help data types;
help show; ? show;
打印系统变量,类似oracle中的show parameter;
show variables like ‘%buffer%’;
set global|session key=value;
HELP STATUS;
mysql 客户机:SQL语句终结符
mysql 客户机:特殊语句终结符
mysql 客户机:重新定义提示符
eg:prompt (\u@\h)[\d]\>
mysql 客户机:使用脚本文件
mysqladmin客户机
1.create databasename:创建数据库;2.debug:把bug信息写入日志文件;3.drop databasename:删除数据库;4.extended-status:列出服务器的附加信息;5.flush-hosts:刷新主机缓存;6.flush-logs:刷新所有的日志;7.flush-status:清空状态变量;8.flush-tables:刷新表;9.flush-threads:刷新线程缓存;10.flush-privileges:重新加载授权表,相当于reload;11.kill id,id,…:杀掉mysql的进程;12.password [new-password]:以当前格式修改密码;13.old-password [new-password]:以旧的格式修改密码;14.ping:检查mysqld是否活动;15.processlist:列出所有活动的进程;16.reload:重新加载授权表;17.refresh:刷新所有的表,并重新打开日志文件;18.shutdown:关闭Server;19.status:查看服务器的状态信息;20.start-slave:启动slave;21.stop-slave:停止slave;22.variables:打印变量状态;23.version:查看服务器版本信息;
MySQL工具
一个可视化的下一代数据库设计应用程序,可用于高效设计,管理和记录数据库结构;它有开源和商业两种版本;
一个位于客户机与MySQL服务器之间的简单程序,可监视,分析或传输客户机与服务器之间的通信;MySQL Proxy 的灵活性使其具有多种用途,包括负载平衡/故障转移/查询分析/查询过滤和修改以及其他操作;该工具当前尚不可用于生产;
MySQL的可视化企业监视系统,可用于检测MySQL服务器,通知潜在问题并就如何修复这些问题提供建议;
使用该工具可以执行联机非阻塞“热”备份,从完整备份恢复数据,还支持创建压缩的备份文件;
通过自动执行常见的管理任务来简化MySQL Cluster Carrier Grade Edition数据库的创建和管理;
MySQL Enterprise Monitor
MySQL Enterprise Monitor:系统信息显示板;
MySQL Enterprise Monitor:访问;
MySQL Workbench;
MySQL Workbench:GUI窗口;
MySQL Workbench:访问;
MySQL Proxy
MySQL连接器;
第三方API;
数值;
字符;
二进制;
时间;
Appropriate(适当):需要以最适合数据所代表的项的类型来表示数据;
Brief(简洁):选择所用存储空间最少的数据类型。这可节省资源并提高性能;
Complete(完整):选择的数据类型应分配有可存储特定项的最大可能值的充足空间;
整数:整数没有小数部分;即,没有小数位的单个整数值;
浮点数(FLOAT/DOUBLE):表示包含整数部分,小数部分或同时包括二者的近似值数值;此类数据类型使用服务器主机的CPU所用的本机二进制浮点格式(IEEE 754)来表示值;该数据类型用于存储和计算会很高效,但值会存在舍入误差;如果列可为空,则默认值为NULL;如果列不可为空,则默认值为0(数值零);
定点数(DECIMAL):包含整数部分,小数部分或同时包括二者;DECIMAL列中的所有值均包含相同的小数位数,并且完全按给定方式进行存储;DECIMAL值存储起来不如浮点数值高效,但DECIMAL值没有舍入误差,因此更加精确;通常用于存储货币值(其中每个值的精度比其存储大小更加重要);
BIT:BIT列规范规定了一个宽度,指明每个值的位数(1至64位);
精度:有效位数;
范围:小数点右侧的位数;
数据是以固定长度格式还是可变长度格式存储;
可存储的最大长度;
该类型是否支持非结构化字符串值;
文本:用于表示真实的字符串数据类型;可以使用此类型存储非结构化且格式自由的字符串(如果其长度符合已定义的空间量);
整数(枚举/集合):用于表示结构化字符串类型;称为“结构化”的原因是,存储在这些类型的列中的值必须通过您所提供的值列表构建,从而定义数据类型;
序列由特定字符集中的字符组成;
多字节字符集中的每个字符所需的字节数可能是固定的,也可能是可变的;
比较基于对字符串所关联的字符集的排序;
多字节字符比较以字符而不是字节为单位执行;
排序将验证字符的大写版本和小写版本是否等效;
排序将决定同一个字符的不同重音标记是否等效;
排序可以为二进制,其中基于数值字符值进行比较;
其范围为从1970-01-01 00:00:00.000000至2038-01-19 03:14:07.999999;
TIMESTAMP列值的范围比DATETIME列值的范围小,因此存储每个值所需的字节数更少;
通过为不允许出现NULL的TIMESTAMP指定NULL值,可以将其设置为当前日期和时间;
CREATE TABLE t_time(id INT NOT NULL,t1 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,t2 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,t3 TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP);mysql> INSERT INTO t_time(id) VALUES(1);mysql> COMMIT;mysql> SELECT * FROM t_time;+—-+———————+———————+———————+| id | t1 | t2 | t3 |+—-+———————+———————+———————+| 1 | 2015-08-19 14:00:42 | 2015-08-19 14:00:42 | 0000-00-00 00:00:00 |+—-+———————+———————+———————+mysql> UPDATE t_time SET t1 = ‘2000-01-01 00:00:00’ WHERE id = 1;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> COMMIT;Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM t_time;+—-+———————+———————+———————+| id | t1 | t2 | t3 |+—-+———————+———————+———————+| 1 | 2000-01-01 00:00:00 | 2015-08-19 14:00:42 | 2015-08-19 14:01:43 |+—-+———————+———————+———————+1 row in set (0.00 sec)
GEOMETRY:层次结构的根类,任何类型的值;
POINT:坐标空间中的单个位置;
CURVE:一维几何体,由点组成的序列;
LINESTRING:点之间具有线性内插的曲线;
SURFACE:二维几何体;
(6)POLYGON:表示多边几何体的平面;
MULTIPOINT:Point元素;
MULTICURVE:Curve元素;
MULTILINESTRING:LineString元素;
MULTISURFACE:Surface元素;
MULTIPOLYGON:Polygon元素;
GEOMETRYCOLLECTION:任意类型的几何体;
最常见的情况即该列为主键时;
另一个例子是:当列必须包含值时,数据库设计才有意义;
NULL值不保存到索引中;
NFORMATION_SCHEMA:
MySQL服务器包含一个被实现为名为INFORMATION_SCHEMA的数据库(模式)的数据字典,其中包含许多显示为表的对象;
SHOW语句:
用于获取服务器统计信息,模式和模式对象的相关数据的专用语法;
SHOW DATABASES和SHOW TABLES:返回包含数据库和表名的列表;SHOW COLUMNS:生成表中列的定义;SHOW COLUMNS FROM table等于DESC table;需要有SELECT特权才能使用SHOW语句;
DESCRIBE:可用于检查表结构和列属性的SQL语句快捷方式;
mysqlshow:用作指向一些SHOW语句的命令行前端的客户机程序;
INFORMATION_SCHEMA数据库INFORMATION_SCHEMA表;
1.表信息
• COLUMNS:表和视图中的列• ENGINES:存储引擎• SCHEMATA:数据库• TABLES:数据库中的表• VIEWS:数据库中的视图
2.分区
• PARTITIONS:表分区• FILES:存储 MySQL NDB 磁盘数据表的文件
3.特权
• COLUMN_PRIVILEGES:MySQL 用户帐户所拥有的列特权• SCHEMA_PRIVILEGES:MySQL 用户帐户所拥有的数据库特权• TABLE_PRIVILEGES:MySQL 用户帐户所拥有的表特权• USER_PRIVILEGES:MySQL 用户帐户所拥有的全局特权
• CHARACTER_SETS:可用的字符集• COLLATIONS:每个字符集的排序• COLLATION_CHARACTER_SET_APPLICABILITY:适用于特定字符集的排序
• KEY_COLUMN_USAGE:关键列的约束• REFERENTIAL_CONSTRAINTS:外键• STATISTICS:表索引• TABLE_CONSTRAINTS:表的约束
• KEY_COLUMN_USAGE:约束• GLOBAL_STATUS:所有 MySQL 连接的状态值• GLOBAL_VARIABLES:用于新的 MySQL 连接的值• PLUGINS:服务器插件• PROCESSLIST:指示哪些线程正在运行• SESSION_STATUS:当前 MySQL 连接的状态值• SESSION_VARIABLES:当前 MySQL 连接的生效值
• EVENTS:预定事件• ROUTINES:存储过程和功能• TRIGGERS:数据库中的触发器• PARAMETERS:存储过程和功能参数以及存储函数
• INNODB_CMP 和 INNODB_CMP_RESET:对压缩的 InnoDB 表的相关操作的状态• INNODB_CMPMEM 和 INNODB_CMPMEM_RESET:InnoDB 缓冲池中压缩页面的状态• INNODB_LOCKS:InnoDB 事务所请求和持有的每个锁• INNODB_LOCK_WAITS:每个阻塞的 InnoDB 事务的一个或多个行锁• INNODB_TRX:当前正在 InnoDB 内部执行的所有事务• TABLESPACES:活动的表空间
下一步是将此输出存储在一个可在shell命令行中执行的批处理文件中,这通过添加子句INTO OUTFILE来完成:
SELECT CONCAT(“mysqldump -uroot -pmysql “, TABLE_SCHEMA, ” “, TABLE_NAME, ” >> “,TABLE_SCHEMA, “.sql”)FROM TABLESWHERE TABLE_NAME LIKE ‘Country%’ INTO OUTFILE ‘\tmp\Country_Dump.sh’
shell> \tmp\Country_Dump.shshell> \tmp\mysqldump -uroot -pmysql world_innodb Country >> world_innodb.sqlshell> \tmp\mysqldump -uroot -pmysql world_innodb Country_Language >> world_innodb.sql
–silent命令在输出中删除列标题;
–skip-column-names命令删除输出中的格式(使输出类似于表的格式);
这两个命令用来确保对命令自身的解释是正确的,没有任何干扰执行的外部格式或标题行问题;
shell>mysql -uroot -pmysql –silent –skip-column-names -e “SELECTCONCAT(‘CREATE TABLE ‘, TABLE_SCHEMA, ‘.’, TABLE_NAME, ‘_backup LIKE ‘,TABLE_SCHEMA, ‘.’, TABLE_NAME, ‘;’) FROM INFORMATION_SCHEMA.TABLES WHERETABLE_SCHEMA = ‘world_innodb’;” | mysql -uroot -pmysql
- SHOW DATABASES:列出可用数据库的名称- SHOW TABLES:列出默认数据库中的表- SHOW TABLES FROM <database_name>:列出指定数据库中的表- SHOW COLUMNS FROM <table_name>:显示表的列结构- SHOW INDEX FROM <table_name>:显示表中有关索引和索引列的信息- SHOW CHARACTER SET:显示可用的字符集及其默认排序- SHOW COLLATION:显示每个字符集的排序
mysql> SHOW DATABASES;mysql> SHOW TABLES;mysql> SHOW TABLES FROM mysql;mysql> SHOW TABLES FROM INFORMATION_SCHEMA;mysql> SHOW COLUMNS FROM CountryLanguage;mysql> SHOW FULL COLUMNS FROM CountryLanguage\G
但是,SHOW COLUMNS支持可选的LIKE和WHERE子句,而DESCRIBE不支持;
mysql> EXPLAIN table_name;
mysqlshow客户机;
例如–host或–user;如果默认连接参数不适合,则必须提供选项;
mysqlshow也接受特定于其自身运行的选项;




