如何获取mysql帮助信息

如何获取mysql帮助信息,第1张

获取mysql有关的帮助信息,直接在mysql提示符下输入help即可获得有关在mysql客户端相关的帮助信息。

这个方式与Oracle SQL*plus下的help 是类似的。

mysql>help

For information about MySQL products and services, visit:

http://www.mysql.com/

For developer information, including the MySQL Reference Manual, visit:

http://dev.mysql.com/

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 and end with ''

? (\?) Synonym for `help'.

clear (\c) Clear the current input statement. --清除当前输入的语句

connect (\r) Reconnect to the server. Optional arguments are db and host. --重新连接,通常用于被剔除或异常断开后重新连接,SQL*plus下也有这样一个connect命令

delimiter (\d) Set statement delimiter. --设置命令终止符,缺省为;,比如我们可以设定为/来表示语句结束

edit (\e) Edit command with $EDITOR. --编辑缓冲区的上一条SQL语句到文件,缺省调用vi,文件会放在/tmp路径下

ego (\G) Send command to mysql server, display result vertically. --控制结果显示为垂直显示

exit (\q) Exit mysql. Same as quit. --退出mysql

go(\g) Send command to mysql server. --发送命令到mysql服务

help (\h) Display this help.

nopager (\n) Disable pager, print to stdout.--关闭页设置,打印到标准输出

notee (\t) Don't write into outfile. --关闭输出到文件

pager (\P) Set PAGER [to_pager]. Print the query results via PAGER. --设置pager方式,可以设置为调用more,less等等,主要是用于分页显示

print (\p) Print current command.

prompt(\R) Change your mysql prompt. --改变mysql的提示符

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.

--上面的所有命令,扩号内的为快捷操作,即只需要输入“\”+ 字母即可执行

For server side help, type 'help contents'--注意这里的描述help contents将获得服务器端的相关帮助信息

--演示部分,演示常用命令

--connect命令

mysql>connect chardb localhost

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Connection id:5

Current database: chardb

--设置分页,在多余一个页面显示时会不停的翻滚,用该命令可以设置分页,设置为调用系统命令

mysql>pager more --设置为more方式

PAGER set to 'more'

mysql>select table_name,table_type,engine from information_schema.tables --该查询会超出一屏显示后按空格键会自动翻滚到下一屏

mysql>pager tail -5 --设置输出尾部5行

PAGER set to 'tail -5'

mysql>select table_name,table_type,engine from information_schema.tables

| setup_timers | BASE TABLE | PERFORMANCE_SCHEMA |

| threads | BASE TABLE | PERFORMANCE_SCHEMA |

| animals | BASE TABLE | InnoDB |

| shop | BASE TABLE | InnoDB |

+----------------------------------------------+-------------+--------------------+

92 rows in set (0.02 sec)

mysql>pager --查看当前的pager设置

PAGER set to 'tail -5'

mysql>nopager --切换到标准(缺省)pager方式

PAGER set to stdout

--tee命令,输出日志文件

mysql>tee /tmp/query.log--开启输出到文件,相当与SQL*plus下的spool

Logging to file '/tmp/query.log'

mysql>select table_name,table_type,engine from information_schema.tables

+----------------------------------------------+-------------+--------------------+

| table_name | table_type | engine |

+----------------------------------------------+-------------+--------------------+

| CHARACTER_SETS | SYSTEM VIEW | MEMORY |

| COLLATIONS | SYSTEM VIEW | MEMORY |

.............

mysql>notee --关闭输出到文件,相当于SQL*Plus下的spool off

Outfile disabled.

mysql>system tail /tmp/query.log--查看输出的日志文件

| setup_consumers | BASE TABLE | PERFORMANCE_SCHEMA |

| setup_instruments| BASE TABLE | PERFORMANCE_SCHEMA |

| setup_timers | BASE TABLE | PERFORMANCE_SCHEMA |

| threads | BASE TABLE | PERFORMANCE_SCHEMA |

| animals | BASE TABLE | InnoDB |

| shop | BASE TABLE | InnoDB |

+----------------------------------------------+-------------+--------------------+

92 rows in set (0.02 sec)

--改变mysql提示符

mysql>prompt SessionA>

PROMPT set to 'SessionA>'

--恢复到缺省提示符

SessionA>prompt

Returning to default PROMPT of mysql>

--执行sql脚本文件

mysql>system more query.sql --注意,此时为当前目录

use chardb

select * from tb_isam

mysql>source query.sql

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

+------+-------+

| id | value |

+------+-------+

|1 | a |

|2 | b |

|3 | c |

|4 | f |

+------+-------+

4 rows in set (0.00 sec)

--获取状态信息

mysql>status

--------------

mysql Ver 14.14 Distrib 5.5.37, for Linux (x86_64) using readline 5.1

Connection id: 6

Current database: chardb

Current user: root@localhost

SSL:Not in use

Current pager: less

Using outfile: ''

Using delimiter:

Server version: 5.5.37-log MySQL Community Server (GPL)

Protocol version: 10

Connection: Localhost via UNIX socket

Server characterset:latin1

Db characterset:utf8

Client characterset:latin1

Conn. characterset:latin1

UNIX socket:/var/lib/mysql/mysql.sock

Uptime: 3 hours 10 min 59 sec

Threads: 1 Questions: 97 Slow queries: 0 Opens: 313 Flush tables: 1 Open tables: 51 Queries per second avg: 0.008

--------------

--修改客户端字符集

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品,是最流行的关系型数据库管理系统之一。

端口是3306。

表很多时,使用linux脚本,需要根据需要修改一下:

和创建一样,可以加上 if exists

可两篇文章:

如:

用于在已有的表中添加、删除或修改列。

添加 ADD

默认是添加到最后,但可以指定位置。FIRST :添加最前

AFTER 字段名> :添加指定字段之后

例子:

删除 DROP

修改 MODIFY 主要修改原列的类型或约束条件 同样可以用 FIRST 和 AFTER 字段名> ,代表的是修改到哪里。

修改字段名 CHANGE

可以把表2的数据复制到表1中,但 不能复制约束性条件

单行

多行,注意 只有一个VALUES

不写 (行1, 行2...) 这一部分的话,默认一一对应

除了以上方法外,还可以用SET为每一行附上相应的值。

假如没有筛选的话,就给全部都修改了。可以用 WHERE 筛选。

假如 没有筛选的话,就给全部删除了 。相当于清空。

清空

先把表删除,然后再建一个。与 DELETE FROM 相比, TRUNCATE 的效率更快,因为 DELETE FROM 是把记录逐条删除的。

查询执行的顺序

FROM -->WHERE -->SELECT -->GROUP BY -->HAVING -->ORDER BY -->LIMIT

注意

当数据很大,上百万的时候,使用LIMIT ... OFFSET ..的方式进行分页十分浪费资源且耗时长。最好是结合WHERE使用,如:

REGEXP 使用正则表达进行匹配。 查询时,需要搭配WHERE或HAVING使用

两个表之间有交集且要用到两个表的数据时,可以使用内连接查询。

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

用法:

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。 把LEFT JOIN的表1、表2调换顺序,就是REGHT JOIN

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行. 相当于结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

MySQL中不支持 FULL OUTER JOIN

即SELECT嵌套。

IN 一个查询结果作为另一个查询的条件。 如:

EXISTS 用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。True时执行。 如:

索引的本质是一种排好序的数据结构。利用索引可以提高查询速度。

常见的索引有:

MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 外键的使用条件:

外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作。

对已有的两个表增加外键 比如:主表为A,子表为B,外键为aid,外键约束名字为a_fk_b

为子表添加一个字段,当做外键

为子表添加外键约束条件

假如删除记录报错: [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (...)

这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据。可以通过设置 FOREIGN_KEY_CHECKS 变量来避免这种情况。 第一步:禁用外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=0 第二步:删除数据 第三步:启动外键约束,我们可以使用: SETFOREIGN_KEY_CHECKS=1 查看当前FOREIGN_KEY_CHECKS的值,可用如下命令: SELECT @@FOREIGN_KEY_CHECKS

使用 UNION 来组合两个查询,如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果一般为 M+N 行。

每个查询必须包含相同的列、表达式和聚集函数。

默认会去除相同行,如果需要 保留 相同行,使用 UNION ALL 。

只能包含一个 ORDER BY 子句,并且必须位于语句的最后

内置函数很多, 见: MySQL 函数

我们一般使用 START TRANSACTION 或 BEGIN 开启事务, COMMIT 提交事务中的命令, SAVEPOINT : 相当于设置一个还原点, ROLLBACK TO : 回滚到某个还原点下

一般的使用格式如下:

开启事务时, 默认加锁

根据类型可分为共享锁(SHARED LOCK)和排他锁(EXCLUSIVE LOCK)或者叫读锁(READ LOCK)和写锁(WRITE LOCK)。

根据粒度划分又分表锁和行锁。表锁由数据库服务器实现,行锁由存储引擎实现。

除此之外,我们可以显示加锁

加锁时, 如果没有索引,会锁表,如果加了索引,就会锁行

InnoDB默认支持行锁,获取锁是分步的,并不是一次性获取所有的锁,因此在锁竞争的时候就会出现死锁的情况

解决方法:

即ACID特性:

由于并发事务会引发上面这些问题, 我们可以设置事务的隔离级别解决上面的问题.

MySQL的默认隔离级别(可重复读)

查看当前会话隔离级别

方式1

方式2

设置隔离级别

主从集群的示意图如下:

主要涉及三个线程: binlog 线程、 I/O 线程和 SQL 线程。

同步流程:

由于MySQL主从集群只会从主节点同步到从节点, 不会反过来同步, 所以需要读写分离

读写分离需要在业务层面实现 , 写数据只能在主节点上完成, 而读数据可以在主节点或从节点上完成

索引是帮助MySQL高效获取数据的排好序的数据结构

MySQL的索引有

推荐两个在线工具:

简单来说, B树是在红黑树(一个平衡二叉树)的基础上将一个节点存放多个值, 实现的, 降低了树的高度, 每个节点都存放索引及对应数据指针, 同一层的节点是递增的

而B+树在B树的基础上进行优化, 非叶子节点存放 子节点的开始的索引, 叶子节点存放索引和数据的指针, 且叶子节点之间有双向的指针

如下示意图:

不同的引擎, 主键索引存放的数据也不一样, 比如常见的 MyISAM 和 InnoDB

MyISAM 的B+树叶子节点存放表数据的指针, InnoDB 的B+树叶子节点存放处主键外的数据

其他的:

即多个列组成一个索引, 语法:

由于联合索引的B+树的结构, 根据列建立, 所以我们的查找条件也要根据索引列的顺序( where column1=x, column2=y,columnN... ), 否则会全表扫描

如果你对列进行了 (+,-,*,/,!) , 那么都将不会走索引。

OR 引起的索引失效

OR 导致索引是在特定情况下的,并不是所有的 OR 都是使索引失效,如果OR连接的是 一个字段,那么索引 不会失效 反之索引失效

这个我相信大家都明白,模糊搜索如果你前缀也进行模糊搜索,那么不会走索引。

这两种用法,也将使索引失效。另 IN 会走索引,但是当IN的取值范围较大时会导致索引失效,走全表扫描, 见: MySQL中使用IN会不会走索引

不走索引。

走索引。

所以设计表的时候, 建议不可为空, 而是将默认值设置为 "" ( NOT NULL DEFAULT "" )

有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。

1. check table 和 repair table

登陆mysql 终端:

mysql -uxxxxx -p dbname

check table tabTest

如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:

repair table tabTest

进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

2. myisamchk, isamchk

其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:

myisamchk tablename.MYI

进行检测,如果需要修复的话,可以使用:

myisamchk -of tablename.MYI

关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。

-----------------------------

另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:

[ -x /tmp/mysql.sock ] &&/pathtochk/myisamchk -of /DATA_DIR/*/*.MYI

其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。

需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/146634.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-20
下一篇2023-03-20

发表评论

登录后才能评论

评论列表(0条)

    保存