首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

比CRUD多一点儿(一):MySQL常用命令

这是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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180104G0VXNY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券