这是MySQL系列笔记的第一部分,本系列笔记希望能按照笔者自己学习MySQL技术的经历来记录,避免纯粹按照内容一块一块总结,也就是不同于一般按内容分配章节的书籍的结构,有一个平滑的阅读曲线。内容比较丰富的技术点会按照专题在多个学习笔记中逐渐深入。
首先,请如果还完全为接触过MySQL的读者先阅读w3c的SQL教程,再来读本篇内容。
这部分的标题叫比CRUD多一丁点儿,比起最基础的w3c的SQL教程之外,只多一点的扩展,满足应付从纯粹阅读入门资料到可以上手完成一个简单的工作的需求。
第一篇的主要内容会是最常用的一些mysql命令。因为虽然有很多图形化的工具,但在实际的工作中因为需要去线上服务查看数据,处理问题,字符界面的命令行工具是必不可少的。
客户端程序mysql:连接交互式终端
mysql -h$host-P$port-u$user-p$passsword$database_name
例如用户root使用密码mydb@xxx用链接到地址为192.168.1.99,端口为3306的数mysql进程,并默认使用上名为testdb的数据库(即自动执行use testdb)。
mysql -h 192.168.1.99 -P 3306 -u"root"-p"mydb@xx"testdb
各参数如果有@,&等bash的关键字,则需要用""引起来。
非交互式的执行SQL
有时候需要在命令行执行某句SQL,则建议使用-Bse参数。-B参数的含义是执行多条语句(batch)这样可以执行多条,-e即是执行(execute),-s参数意思是静默执行(silent)可以让输出格式精简一些。
mysql -h$host-P$port-u$user-p$passsword-Bse"command1;command2;....;commandn"
例如,常见的将执行结果导出到文件中方便留存和阅读。
mysql -h 192.168.1.99 -P 3306 -u"root"-p"mydb@xx"-Bse"select id,name from testdb.Account;"> result.txt
导出程序mysqldump
mysqldump是做数据导出的命令行工具,也是mysql安装后默认会带的。作用是将mysql数据库中的数据导出出来。
导出特定的表的内容
mysql -h$host-P$port-u$user-p$passsword$database_name$table1$table2...
例如
mysqldump -h 192.168.1.99 -P 3306 -u"root"-p"mydb@xx"mydb table1 table2 > result.sql
只导出表结构
使用--no-data参数只导出表结构,
mysqldump -h 192.168.1.99 -P 3306 -u"root"-p"mydb@xx"--no-data mydb > result.sql
比较表结构mysqldiff
在开发实践中难免会遇到校验数据表结构不同,或者根据开发环境和目标环境的表结构不同来生成对应的表结构修改语句。mysql在5.7版本就提供了一个自带的mysqldiff工具。参数比较多,直接举例说明生成difftype=sql的ALTER语句的命令写法,如下:
mysqldiff --server1=root@host1 --server2=root@host2 \
--show-reverse --difftype=sql \
db1.table1:dbx.table3
ALTER TABLE db1.table1
ADD COLUMN notes char(30) AFTER a,
CHANGE COLUMN misc misc char(55);
具体看mysql的官方文档:https://dev.mysql.com/doc/mys...
如果在mysql5.7版本以下就使用mysqldump命令参数输出简洁的表结构,随后diff文件然后自行编写ALTER语句吧。
mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql
内建?,\s命令
心急火燎的进入mysql终端处理线上问题,这时候一个语法拼不对,还得切出去查手册?万一环境是内网不能上网就更是麻烦,其实mysql内建了帮助手册,可以直接在终端查询。
?是交互式mysql终端内建的帮助命令。可以按照此帮助查阅文档等。其输出如下
For information about MySQL products and services, visit:
For developer information, including the MySQL Reference Manual, visit:
To buy MySQL Enterprise support, training, or other products, visit:
https://shop.mysql.com/
List of all MySQL commands:
Note that all text commands must be first on line andendwith';'
? (\?)Synonymfor`help'.
\s可查看当前状态,版本,客户端ip,QPS等,\!可以在mysql终端中执行shell命令。在是很多处理问题的时候终端界面一进入mysql的交互式终端,就找不到ip、端口等在bash中的信息了又需要频繁切出,这两个命令都非常有用。\s输出如下:
mysql Ver 14.14 Distrib 5.7.12, for osx10.11 (x86_64) using EditLine wrapper
Connection id: 2
Current database: rizhiyi_system
Current user: root@localhost
SSL: Not inuse
Currentpager:less
Usingoutfile:''
Usingdelimiter: ;
Server version: 5.7.12 MySQL Community Server (GPL)
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 21 sec
Threads: 1 Questions: 74 Slow queries: 0 Opens: 171Flushtables:1Opentables:164Queries persecondavg:3.523
? contents可以看内建的帮助手册
mysql> ? contents
You asked forhelpabouthelpcategory:"Contents"
Formore information,type'help ',whereisoneofthefollowing
categories:
AccountManagement
Administration
CompoundStatements
DataDefinition
DataManipulation
DataTypes
Functions
FunctionsandModifiersforUsewithGROUPBY
Geographic Features
HelpMetadata
LanguageStructure
Plugins
Procedures
StorageEngines
TableMaintenance
Transactions
User-Defined Functions
Utility
然后就可以继续查看子菜单帮助手册的内容,比如? Functions
mysql> ? Functions
You asked forhelpabouthelpcategory:"Functions"
Formore information,type'help ',whereisoneofthefollowing
categories:
BitFunctions
Comparison operators
Control flow functions
DateandTimeFunctions
Encryption Functions
Information Functions
Logicaloperators
Miscellaneous Functions
NumericFunctions
StringFunctions
? insert帮助命令还可以直接按关键字进行模糊查询,如:
mysql> ?insert
Name:'INSERT'
Description:
Syntax:
INSERT[LOW_PRIORITYDELAYEDHIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION(partition_name,...)]
[(col_name,...)]
{VALUESVALUE} (,...),(...),...
[ONDUPLICATEKEYUPDATE
col_name=expr
[, col_name=expr] ... ]
Or:
INSERT[LOW_PRIORITYDELAYEDHIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION(partition_name,...)]
SETcol_name=, ...
[ONDUPLICATEKEYUPDATE
col_name=expr
[, col_name=expr] ... ]
Or:
INSERT[LOW_PRIORITYHIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION(partition_name,...)]
[(col_name,...)]
SELECT...
[ONDUPLICATEKEYUPDATE
col_name=expr
[, col_name=expr] ... ]
INSERTinsertsnewrowsintoan existing table. TheINSERT...VALUES
andINSERT...SETformsofthestatementinsertrowsbasedon
explicitly specified values. TheINSERT...SELECTforminsertsrows
selectedfromanothertableortables.INSERT...SELECTisdiscussed
furtherin[HELPINSERTSELECT].
Wheninsertingintoa partitionedtable, you can control which
partitionsandsubpartitionsacceptnewrows. ThePARTITIONoption
takes a comma-separatedlistofthenamesofoneormorepartitionsor
subpartitions(orboth)ofthe table.Ifanyoftherowstobe inserted
bya givenINSERTstatementdonotmatchoneofthepartitionslisted,
theINSERTstatementfailswiththeerrorFoundarownotmatching the
givenpartitionset. See
http://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html,for
more informationandexamples.
InMySQL5.7, theDELAYEDkeywordisaccepted but ignoredbythe
server. See [HELPINSERTDELAYED],forthe reasonsforthis.
URL:http://dev.mysql.com/doc/refman/5.7/en/insert.html
领取专属 10元无门槛券
私享最新 技术干货