这部分是MySQL手册的重要组成部分,你应该知道所有的部件将举办重点简要介绍的内容是不应该的。实际分布在大量的手册包括拥有600多页,非常alchage。即使是在英语,但我的业余时间,你有时间阅读困难aneuni的时会帮助你很多。附录的CD-ROM / MySQL /手动的都包含在原始的手工。
四。主要的SQL语法,MySQL的
▶的CREATE DATABASE
语法:CREATE DATABASE的DB_NAME
创建到一个新的数据库的名称。在本章的第一部分可用的名字被提及。近万天同名的数据库已经存在,当你得到的错误。 MySQL是一个数据库文件目录管理表,只是因为数据库被创建,如果表不存在,实际上是给定的名字是CREATE DATABASE命令负责创建一个空的目录。
也可以使用mysqladmin的实用工具,可以创建一个数据库。
#。/ mysqladmin的创建学校
▶DROP DATABASE语句
语法:DROP DATABASE语句[存在] DB_NAME
DROP DATABASE语句的首次下降,在数据库中所有表和数据库被删除。再次,恢复已删除的,因为没有办法小心。此命令在数据库目录中存在,告诉文件数的3倍,实际存在的表的数目。此表是一个索引文件“。新闻处”,其中存储的实际数据,ISM的文件和表的架构(结构)存储`。FRM的文件组成,因为...
从版本3.22以来的IF EXISTS关键字补充说,如果数据库不存在,以防止错误。当然,也可以使用mysqladmin的实用工具,可以删除数据库。
#。/ mysqladmin的退学
▶创建表:创建表
语法:CREATE TABLE [如果不存在] tbl_name(create_definition,...)[table_options] [select_statement中]
create_definition:
COL_NAME类型[NOT NULL | NULL,] [默认DEFAULT_VALUE] [AUTO_INCREMENT的]
[主键] [reference_definition]
或PRIMARY KEY(index_col_name,...)
或键[INDEX_NAME]键(index_col_name,...)
或指数INDEX_NAME](index_col_name,...)
或UNIQUE [索引] [INDEX_NAME](index_col_name,...)
或约束符号]的FOREIGN KEY INDEX_NAME(index_col_name,...)
[Reference_definition]
或支票(expr中)
类型:
TINYINT类型[(长度)] [UNSIGNED] [ZEROFILL的]
或smallint [(长)] [UNSIGNED] [ZEROFILL的]
MEDIUMINT [(长)] [UNSIGNED] [ZEROFILL的]
或INT [(长)] [UNSIGNED] [ZEROFILL的]
或整数(长)] [UNSIGNED] [ZEROFILL的]
或BIGINT [(长)] [UNSIGNED] [ZEROFILL的]
或REAL(长度,小数)] [UNSIGNED] [ZEROFILL的]
或双[(长度,小数)] [UNSIGNED] [ZEROFILL的]
或持股量[(长度,小数)] [UNSIGNED] [ZEROFILL的]
或DECIMAL(长度,小数)的UNSIGNED] [ZEROFILL的]
或NUMERIC(长度,小数)的UNSIGNED] [ZEROFILL的]
或CHAR(长)[二进制]
或VARCHAR(长)[二进制]
或DATE
或时间
或TIMESTAMP
或DATETIME
或TINYBLOB
或BLOB
或MEDIUMBLOB
或LONGBLOB
或TINYTEXT
或TEXT
或MEDIUMTEXT
或LONGTEXT
或enum(值1,值2,为value3,...)
或SET(值1,值2,为value3,...)
index_col_name:
COL_NAME [(长)]
reference_definition:
参考tbl_name [(index_col_name,...)]
[比赛全匹配部分]
[在删除reference_option]
[ON更新reference_option]
reference_option:
RESTRICT的|级联| SET NULL | NO ACTION,|设为首页
table_options:
类型= [的ISAM的MyISAM |堆]
或MAX_ROWS =#
或min_rows =#
或AVG_ROW_LENGTH =#
或评论=“字符串”
或AUTO_INCREMENT =#
select_statement中:
[|忽略| REPLACE] SELECT ... (有些法律的SELECT语句)
创建表,是目前使用在数据库中创建新表。如果数据没有选择同名的数据库表,或者如果发生错误。
MySQL 3.22和以后的版本,如db_name.tbl_name指定的表的名称能够给选定的数据库不需要。从3.23版本开始,还提供了IF NOT EXISTS,关键字使用它如果表不存在产生一个已经不存在的错误occurs'm。
每个数据库中的表tbl_name,存在以下三个目录中的文件。
文件中的函数
tbl_name.frm表结构定义文件
tbl_name.ISD数据文件
tbl_name.ISM索引文件
自动NULL或NOT NULL列不为NULL的列定义一万天。
BLOB和TEXT列,你可以指定一个NOT NULL,NULL被定义一如既往。的AUTO_INCREMENT整数列,您可以使用关键字。 AUTO_INCREMENT列定义为NULL或0如果你在适当的输入列输入比最大值增加1。 AUTO_INCREMENT列从1开始。近万天被删除的最大值的行中,输入新行,该值被再次使用。表只有一个AUTO_INCREMENT列,必须使用唯一索引必须定义。
近万和使用一个默认选项,列不为NULL,NULL,如果列不是NULL列值自动分配以下值之一。
AUTO_INCREMENT列,如果非数字
如果一个类型非TIMESTAMP类型列naljjahyeong值为零(零值)
列是一个空字符串文字
UNIQUE列,每一行必须有一个不同的值。等于价值一万,现有行输入,错误是由于一个错误,
关键是另一个索引的名称。
可以用一个多列主键。后来在列定义中不能只是使用的PRIMARY KEY(index_col_name,...)应作为另一行写。
自动创建的索引,如果你不指定一个名称在索引列中的第一个数字是在连接的形式,
该指数不能使用关键字NULL列。所以,你不声明了NOT NULL或错误的发生
BLOB和TEXT列不能被索引。
一个CHAR或VARCHAR列COL_NAME(长)在该指数同样的方式,只有一部分是索引文件的大小小。
max_sort_length的变量列开始在TEXT或BLOB列使用ORDER BY或GROUP BY子句仅用于定义的长度。 FOREIGN KEY条件,检查,参考与其他数据库的语法兼容性存在为控股积怨,实际上没有任何效果。
▶ALTER TABLE语句
语法:ALTER []表tbl_name alter_spec,alter_spec ...]
alter_spec:
ADD [COLUMN] create_definition [第一页| column_name中]
或添加索引[INDEX_NAME](index_col_name,...)
或添加主键(index_col_name,...)
或ADD独特的[INDEX_NAME](index_col_name,...)
或ALTER [柱] COL_NAME {设置默认的文字|的DROP DEFAULT}
或更改[柱] old_col_name create_definition
或修改[专栏] create_definition
或降[列] COL_NAME
或下降的PRIMARY KEY
或DROP指数key_name
或重命名[AS] new_tbl_name
或table_option
允许ALTER TABLE命令改变所创建的表的结构。例如,添加或删除列,可以改变,可以创建索引或删除
ALTER TABLE命令复制到一个临时表申请的变化和新表重命名和删除原始表将原始表。通过这样做,改变一个表,在更新过程中发生的结构,没有失败。改变表,直到准备写新的和更新将延迟一段时间。
以表上使用ALTER TABLE命令的选择,插入,删除,更新,创建,下降必须有许可。
IGNORE关键字是一个MySQL扩展。使用这个索引,列中的现有数据的基础上,可以控制使用忽略表中的变化,在索引列存在索引列被删除,除第一行外的所有行。
添加几个,ALTER,DROP,改变ALTER TABLE命令的语法可以用在
改变COL_NAME,下降COL_NAME,DROP INDEX是MySQL扩展。
关于ALTER TABLE的MODIFY是Oracle的扩展。
列关键字可以省略
不带任何选项,改变表tbl_name改名NEW_NAME语法你可以简单地改变表的名称。
也可以使用改变old_col_name create_definition报表可以更改列的名称。旧的和新的列名和列名,列的类型是写。例如,名为b INTEGER列a如果你想成为如下。
MySQL的> ALTER TABLE T1 A B整数;
一万天不改变列的类型的名称,以取代只有两次连续相同的名称,是写,这是相同的旧名称和新名称。
MySQL的> ALTER TABLE T1更改B B的BIGINT NOT NULL的;
修改MySQL的16年3月22日和更高版本支持的语法,而不指定一个新的名称如下:列是能够改变的人。
MySQL的> ALTER TABLE T1修改b BIGINT,不空;
十千日,用更改或修改的万和两个列索引了一些部分,以减少列的长度,当该指数低于小规模不能改变的。
DROP INDEX删除一个索引。 MySQL不支持ANSI SQL92的,这是一个扩展
作为索引列被删除,该列上创建索引是自动支持。
删除主键将删除主键索引。一万天,如果没有主键表中存在早在UNIQUE索引中删除。
外国项,检查参考选项实际上是没有任何动作。这些东西只存在只是为了向后兼容。在使用ALTER TABLE的下面是一些例子。
创建一个表t1。
MySQL的CREATE TABLE T1(一个整数,B CHAR(10));
更改表T1,T2的名称。
MySQL的> ALTER TABLE T1重新命名T2;
从INTEGER改为TINYINT NOT NULL列类型变化CHAR(10)B列,CHAR(20),并在名称的C列。
MySQL的>的ALTER TABLE T2修改为tinyint NOT NULL的,改变BC CHAR(20);
添加一个新的名为d的TIMESTAMP列。
MySQL的>的ALTER TABLE T2加入D的TIMESTAMP;
列D和列的主键上创建索引。
MySQL的>的ALTER TABLE T2添加索引(D),添加主键(一);
C列被删除。
MySQL的>的ALTER TABLE T2 DROP C列;
添加一个AUTO_INCREMENT列C。为NOT NULL AUTO_INCREMENT列的通知“,必须建立索引。
mysql的地址>的ALTER TABLE T2 C INT无符号不空的AUTO_INCREMENT,ADD INDEX(C);
▶OPTIMIZE TABLE命令
语法:OPTIMIZE表tbl_name
优化改进表上删除数据或VARCHAR,BLOB文本,例如,如果可变宽度列的显着变化的情况下被用来表值得。被删除的数据链接的INSERT命令之后所剩余的空间,所以存储空间重用是不连续的。优化TABLE命令将返回未使用的空间。
OPTIMIZE TABLE来创建一个原始表的复本工作。创建了新表的表和以前未使用的空间,上表中被删除和删除一个临时表的名称,作为表的变化。在这种方式,更新是成功的,因为所有的OPTIMIZE TABLE命令执行,甚至在原始表,可以读取和写入数据更新,新创建的表将是一个延迟,直到您准备。
▶的DROP TABLE
语法:DROP表[如果存在] tbl_name [,tbl_name ...]
DROP TABLE删除一个或多个表。所有的数据和表的结构,在表定义中使用了即时的要小心。从未来版本的MySQL 3.22,IF EXISTS关键字,如果你不有一个表,除了能够防止错误造成的。
▶删除
语法:删除[LOW_PRIORITY]从tbl_name [where_definition] [限行]
DELETE删除满足条件的行返回后删除的行数。
如果省略WHERE子句,一万天,所有的行会被删除。在这种情况下,MySQL是首先要创建一个新的空表具有相同的名称,这种方法比擦除每一行快。删除的行数将返回0。
我们有一段时间,虽然它可能需要几分钟,如果你想知道如果该行被删除,不要省略WHERE子句如下:给一个书面说明,始终是真实的。
MySQL的>删除tbl_name 1> 0;
当然,没有在这种情况下,省略WHERE子句,都较明确的要慢得多。
LOW_PRIORITY使用该表的所有用户使用的关键字,一万天的DELETE的执行被延迟,直到结束。
数据区的数据被加入一个新的离散填充删除,因为OPTIMIZE TABLE命令和isamchk的实用工具,可以让您加快增加。 isamchk的另一方面,OPTIMIZE TABLE命令,易于使用的实用工具恢复得更快。
MySQL的唯一可能的使用限制关键字来指定一次删除的行数,可以给。多少数据,它不能预测是否为了节省时间,可以用来删除。如果您使用的限制,以及重复的任何材料,符合条件的可以删除。
▶选择
语法:选择[·STRAIGHT_JOIN] [SQL_SMALL_RESULT] [DISTINCT | ALL]
select_expression,...
[进入OUTFILE'FILE_NAME“export_options,]
[从table_references
[where_definition]
[集团按COL_NAME的,...]
[where_definition]
[订购{unsigned_integer | COL_NAME} [ASC | DESC],...]
[限制[偏移]行]
[程序在procedure_name]
选择超过一个表用于导入数据。
导入数据select_expression列。即使可以使用SELECT语句,而不是表中的列代表一个简单的操作或函数的结果。下面是一个例子:
MySQL的> SELECT 1 + 1;
- > 2
所有关键字都在上面使用所示的顺序来。例如,HAVING子句中的ORDER BY和GROUP BY的背面总是有来之间。
与AS别名的列名(别名)可以写成: ORDER BY或HAVING子句别名可以使用。
MySQL的>选择Concat(LAST_NAME,',',FIRST_NAME)FULL_NAME作为按FULL_NAME mytable的订单;
从table_references表导入数据。十千日,用两个或多个表时,将有一个联接。
列的名称COL_NAME,tbl_name.col_name,db_name.tbl_name.col_name以同样的方式,你可以看到。然而,两个或两个以上的列在一个表中,共同使用,除非你可以安全地跳过。
顺序按,按节,列名和列的别名组对齐的数据,列的索引(从1开始)可以使用。
MySQL的>选择大专,区域,从比赛的种子
ORDER地区,种子;
MYSQL>选择大学,区域为R从比赛的种子,为S
ORDER BY R,S;
MySQL的>选择大专,区域,从比赛的种子
2阶,3;
为了在使用DESC关键字降序排序排序升序默认情况下才能使用ASC关键词,可以省略,因为它是。
select_expression显示在HAVING子句中的列,列,可以参考的别名。在最后输出数据之前,这只是部分处理。因此,应该写在HAVING子句必须使用列。下面的例子是不正确的。
MYSQL>选择COL_NAME从tbl_name的HAVING COL_NAME> 0;
我们将有以下几种。
mysql的选择COL_NAME tbl_name WHERE COL_NAME> 0;
可以写成如下的MySQL 3.22.5和更高版本。
MySQL的>选择用户,最大用户组(工资)由用户拥有最大(工资)> 10;
版本,而不是九例这样写:
MySQL的>选择用户,最大(工资)由用户从用户组的总和总和> 10;
LIMIT子句的SELECT语句中所表示的数据允许你调整数。限制一个或两个因素可能有当使用两个参数,在近万前一个因素是跳过的行数。进入参数导入后的最大行数。如果有使用的只有一个因素被认为是作为第一个参数是零,是作为给定值,使许多行。换句话说,限制N极限是0,N。和是相同的。
MySQL的>选择*从表极限5,10#6-15行
如果给出一个参数,它表示的最大行数返回。
MySQL的> SELECT * FROM表限量5#第一个五年行
SELECT ... INTO OUTFILE'FILE_NAME“保存导入的数据文件,该文件是建立在服务器上,不能已经存在的同名文件。此外,使用者必须要有文件的权限。
▶注册
在SELECT语句,MySQL支持以下的JOIN声明。
语法:table_reference,table_reference
table_reference [交叉] table_reference
table_reference·STRAIGHT_JOIN table_reference
table_reference对conditional_expr离开OUTER] JOIN table_reference
table_reference LEFT [OUTER] JOIN table_reference使用(column_list中)
table_reference自然科学左[外]连接table_reference
{OJ table_reference留下conditional_expr的OUTER JOIN table_reference,}
在任何ODBC兼容的LEFT OUTER JOIN语法的结束是有。
看到作为alias_name或tbl_name alias_name同样的方式可以是表tbl_name。
MySQL的>选择t1.name为T1,从雇员t2.salary,为T2信息,其中t1.name = t2.name;
为WHERE子句不允许使用条件。
LEFT JOIN的桌子上,由一万,一个右手,以满足数据的情况下,条件是NULL,处理表ohreunpyeo假想线中的所有列。利用这些特性的存在,只有在数据表。
MySQL的>选择table1 *来自table1离开加入table1.id = table2.id是NULL table2.id TABLE2;。在上面的例子table1的table2的id值的数据中不存在将所有的数据。
使用column_list中的部分必须使用两个表中,列名必须存在于两个。下面是一个例子:
一个LEFT JOIN B使用(的C1,C2,C3 ...)
这条语句可以写成如下。
A.C1 = B.C1与A.C2 = B.C2 A.C3 = B.C3,...
这只是几个例子包括以下内容:
MySQL的>选择*从表1,表2 table1.id = table2.id;
MySQL的> SELECT *来自table1离开加入table1.id = table2.id TABLE2;
MySQL的> SELECT *来自table1离开加入table2中使用(ID);
MySQL的> SELECT *来自table1离开table1.id = table2.id离开加入table2.id = table3.id表3加入TABLE2;
▶插入
[LOW_PRIORITY | DELAYED的语法:插入] [忽略] [进入] tbl_name [(COL_NAME,...)] VALUES(表达式,...),(...),...或INSERT [LOW_PRIORITY |迟发] [忽略] [合作] tbl_name [(COL_NAME,...)] SELECT ...或INSERT [LOW_PRIORITY延迟] [] [进入] tbl_name集COL_NAME =表达,COL_NAME =表达式。
插入表中插入新行。
在INSERT ...从另一个表中选择一个SELECT语句用于输入数据。该行插入表tbl_name的人。列的名称或SET子句用于指定列的数据插入。
近万和一个INSERT ...值或INSERT ...如果在SELECT语句中的列指定,每个相应的值(),或由SELECT语句的所有数据列必须提供。一万天的表中的列的顺序,如果你不知道,如果你使用DESCRIBE tbl_name可以很容易确认。
在之前的VALUES列表的一部分显示表达式的值是可用的。考虑下面的例子。
MySQL的>的INSERT INTO tbl_name(COL1,COL2)值(15 COL1 * 2);
但是,如果出现错误。你可以参考从前面的值,请注意。
MySQL的>的INSERT INTO tbl_name(COL1,COL2)VALUES(COL2 * 2,15);
一万天LOW_PRIORITY使用由所有其他用户正在使用的关键字,从表中读取来完成这项工作将被推迟,直到INSERT语句的执行。
IGNORE关键字,如插入一个新的键(PRIMARY或UNIQUE键)的数据值将被忽略,然后将数据输入的数据。一万天,如果你不使用插入忽略停止运行和曲折。可以看到有多少行被插入表中使用的mysql_info()函数。
在输入栏,如果不为NULL,NULL被忽略,并输入默认值。
在列中输入数值,如果超出范围已变更为插入可以显示最接近的数字。
为CHAR,VARCHAR,TEXT BLOB列的立场是,如果接收数据,可以显示超过最大输入,无论被截断输入更大。
列中输入的日期是不恰当的值为零(零值)的值时进入。
不能等待运行INSERT语句的DELAYED选项是用户非常有用,如果有。在这种情况下,一万天使用SELECT语句,如果你给优先先运行,然后执行INSERT语句处理。这不是一个MySQL扩展对ANSI SQL92
DELAYED选项由许多用户的INSERT时发生一次,他们收集的数据被写入操作插入另一个优势是,在这种情况下,当你插入每一个数据的速度比工作。
▶更换
语法:REPLACE [LOW_PRIORITY | DELAYED的] [进入] tbl_name [(COL_NAME,...)] VALUES(表达式,...)或REPLACE [LOW_PRIORITY | DELAYED的] [进入] tbl_name [(COL_NAME,...)]选择。或REPLACE [LOW_PRIORITY | DELAYED的] [进入] tbl_name集COL_NAME =表达,COL_NAME =表达,... INSERT命令的行为类似于一个传统的一个区别替换命令 - 行删除现有行输入索引列的值相同,进入一个新的线制成。
▶负荷DATA INFILE
语法:LOAD数据[本地] INFILE“file_name.txt [替换]到表tbl_name [场终止'\ T'] [可选]括在”['\ \'] [行终止逃脱为'\ n'] [忽略的行数] [(COL_NAME,...)] LOAD DATA INFILE命令从文本文件中读取数据,输入表给出了一个非常快的速度。当地的关键字是客户端的主机上使用应使用现有的文件。MySQL中,如果没有,运行文件存在于服务器上使用。使用LOAD DATA INFILE命令,执行该文件的服务器上存在的文件,必须有存在于服务器上的权限和安全性的原因当读取一个文件的存在,任何人都可以读取目录中的数据的基础上,还是应该有权限。
服务器上使用以下规则存在的文件。
如果该名称作为一个绝对路径,路径如下
如果您使用的是相对路径,给出了近万天数据库目录的相对路径确认。
您正在使用的数据库的路径,找到目录中的文件没有图像名称
REPLACE和IGNORE关键字进入索引列,一行数据进行控制。一万天用来取代现有行被删除,并输入一个新值,忽略亲密所有使用新的值将被忽略,并保留现有的值。如果有一万天发生ohruga关键字。
如果使用关键字场终止,[可选]封闭,逃出BY选项应使用的10万多个不能使用的FIELDS关键字是默认的,如果你喜欢,然后下达了命令。
'\ \'终止'\ T'的领域由“式逃脱
如果你不使用行关键字,然后给了订单作为默认值是相同的。
BY'\ N'终止线
换句话说,LOAD DATA INFILE命令的默认值,如下:
返回值的每一行(换行符)分成。
每列由制表符分隔。
每个数据不使用引号。
`\'字符的线是用来▶更新
语法:UPDATE [LOW_PRIORITY] tbl_name集col_name1 = expr1中,col_name2 = expr2的,... WHERE where_definition]表中的每一列的UPDATE命令应更新一个新的价值。 SET语句用于指定一个新值列和变化。一万天,当WHERE子句更新只有那些满足条件被省略行,所有行被更新。
LOW_PRIORITY选项,该表上的所有其他客户端的读操作,直到执行更新延迟。
设置当您使用的列名在表的语法存储在相应的列值在列根据年龄增加的电流值作为一个例子。
MySQL的>的更新persondata集年龄=年龄+1
UPDATE语句,每个操作运行由左到右。根据年龄列的当前值增加1至2次,然后例子。
MySQL的>的更新persondata集年龄=年龄* 2,年龄=年龄+1;
等待:如果当前值,MySQL的忽略和相同的值,如果不运行更新。
▶使用
语法:使用DB_NAME
使用命令来改变数据库的使用。
MYSQL>使用DB1;
MySQL的> SELECT COUNT(*)FROM mytable的;#从db1.mytable选择
MySQL的“使用DB2;
MySQL的> SELECT COUNT(*)FROM mytable的;#从db2.mytable选择
使用一个特定的数据库命令数据库的名字给另一个数据库中现有的表都可以使用。
下面的示例数据库DB1和DB2在数据库中的表编辑器的作者表中存在的演示如何使用。
MYSQL>使用DB1;
MYSQL> select AUTHOR_NAME,从作者editor_name,db2.editor,哪里author.editor_id = db2.editor.editor_id; USE命令与Sybase的兼容性。
▶FLUSH
语法:冲洗flush_option [flush_option]
MySQL使用清除内部缓存用于读取命令。要使用此命令必须有重载的特权。
flush_option有以下选项。
选项说明
主机的主机再次读取表。你想改变,或者如果您添加一个新的主机,“主机连接到主机的IP被封锁”错误消息或host表时,你必须重新读取。多主机访问错误,如果他们试图连接(max_connect_errors次),发生这种情况时出了差错,MySQL的,该判决是在主机表中登记的主机更将被拒绝访问。一个很大的数字,以防止这些错误,如以下是ttuiwoomyeon守护进程。
壳> mysqld的 - O max_connection_errors = 999999999
创建一个新的空日志文件是LOGS。形成近万日内,到指定日志文件的名称,没有扩展名文件名的名称,旧的日志文件自动递增1。
再次读取特权mysql的权限在数据库管理表。
表关闭所有打开的表。
状态的所有状态变量(状态变量)零使
你也可以使用mysqladmin的效用如下:同样的事情可以做。
壳> mysqladmin的冲洗主机,平齐日志,重载,冲洗表
▶杀
语法:杀敌的thread_id
每个连接到mysqld通过,将作为一个独立的线程。由SHOW PROCESSLIST的命令线程运行的thread_id由KILL命令可以看出,可以杀死一个线程。如果你有process权限,可以看到所有的线程,否则,你只能看到自己的线程。
检查以下,并以同样的方式,因为你是能够杀死线程。
壳> mysqladmin的PROCESSLIST和shell> mysqladmin的杀的thread_id
▶展
表,列和系统上的其他信息。
语法:SHOW DATABASES的[像野生]“或”显示表DB_NAME] [像野生或显示从从DB_NAME tbl_name [] [像野生]列或显示INDEX从tbl_name [DB_NAME]“或”显示状态“或”显示变量像野生]或[从DB_NAME] [像野生PROCESSLIST的SHOW TABLE STATUS的]
显示命令,数据库,表,列,MySQL服务器,有关资料显示。如果您使用LIKE语句'%'和'_'通配符可以用来
db_name.tbl_name在相同的格式,可以用来作为tbl_name FROM db_name的。因此,下面的两句话是相同的功能。
MySQL的> SHOW来自MYDB MYTABLE指数;
MySQL的> SHOW INDEX从mydb.mytable;
显示数据库 - MySQL数据库服务器主机上的存在,显示一个列表。 mysqlshow命令shell提示下,相同的功能。
显示表 - 存在于选定的数据库表显示mysqlshow db_name的shell提示符超过。
注:如果你没有权限表上的任何结果不会出现。
显示列,显示表中的列的信息。也起到了重要作用类似DESCRIBE命令。
SHOW TABLE STATUS - 3.23版本已增加。显示状态和类似的功能,但可以得到每张桌子上的详细信息。 Shell提示符mysqlshow - 状态db_name命令可以实现通过相同的结果。
显示以下信息。
项目说明
命名表名
类型表类型(NISAM的MyISAM,堆)
一排排列
的的列AVG_ROW_LENGTH的平均长度
DATA_LENGTH数据文件的大小
最大尺寸的数据文件Max_data_length
索引文件的大小Index_length
data_free在分配的数据文件的大小,而是未使用的空间
AUTO_INCREMENT列的AUTO_INCREMENT以下值
CREATE_TIME表创建时间
UPDATE_TIME表的最后修改时间
营业时间最后检查Check_time表
创建表时Create_min_rows的“min_rows”选项是否使用
创建表时Create_max_rows“MAX_ROWS”选项是否使用
当表被创建Create_avg_row_length“AVG_ROW_LENGTH”选项是否使用
创建表时,你进入了评论评论
显示领域 - 显示列和SHOW键或表显示的列或索引信息。
SHOW INDEX - 以下指数显示的信息
项目说明
表的名称
non_unique指数等于零,如果没有存储
的指数Key_name名称
seq_in_index索引中的第一列是少数,从1开始。
列名COLUMN_NAME
整理索引存储,但如何。 (排序),NULL(不排序)。
基数指数内部存在的唯一的数据的数量
如果只有部分列到指数Sub_part大小。使用NULL,整个一万和一列
显示状态 - 显示服务器状态的信息。 s从网页mysqladmin的扩展状态提示命令。由此产生的价值将是类似于如下所示。
+ -------------------------- + -------- +
| VARIABLE_NAME |价值|
+ -------------------------- + -------- +
| 0 | | Aborted_clients
| Aborted_connects | 0 |
| 0 | | Created_tmp_tables
| 0 | | Delayed_insert_threads正在
| Delayed_writes | 0 |
| 0 | | Delayed_errors
| Flush_commands | 2 |
| Handler_delete | 1 |
| Handler_read_first | 0 |
| Handler_read_key | 2 |
| Handler_read_next | 0 |
| Handler_read_rnd | 35 |
| Handler_update | 0 |
| Handler_write | 2 |
| Key_blocks_used | 0 |
| Key_read_requests | 0 |
| 0 | | Key_reads
| Key_write_requests | 0 |
| Key_writes将| 0 |
| Max_used_connections | 1 |
| 0 | | Not_flushed_key_blocks
| 0 | | Not_flushed_delayed_rows
| Open_tables | 1 |
| Open_files打开| 2 |
| 0 | | Open_streams
| Opened_tables | 11 |
|问题| 14 |
| Running_threads | 1 |
| 0 | | Slow_queries
|运行时间| 149111 |
+ -------------------------- + -------- +
每个条目显示以下信息。
aborted_clients客户不退出的正常数量的连接被打破
Aborted_connects MySQL试图连线,但未能的连接seobeone数
created_tmp_tables SQL语句执行时,在过渡期间产生的表的数目
插入背板Delayed_insert_threads正在拖延你的门(延迟插入处理程序)三
通过Delayed_writes插入延迟行写。
INSERT DELAYED的行Delayed_errors失败
flush_commands FLUSH命令,处决人数
三teyibeulnaehaeng Handler_delete delete命令
第一,读命令Handler_read_first表
handler_read_key基于索引的表读指令数
根据读取下一行执行的命令的索引号排序Handler_read_next
读命令执行上表中的行逢等宽Handler_read_rnd
handler_update运行表的UPDATE命令
Handler_write运行表的INSERT命令
使用key_blocks_used索引缓存块
key_read_requests号码索引缓存处理的命令
key_reads物理磁盘读取
key_write_requests命令存储在高速缓存中的索引块
Key_writes将命令存储在物理磁盘块的数量
最大连接数,可以同时处理Max_used_connections
在缓存not_flushed_key_blocks指数信息已经改变,但尚未保存到磁盘块
not_flushed_delayed_rows插入延迟,以待处理的行数
open_tables表的数量,目前使用中打开
打开Open_files打开的文件数量
记录数连接到Open_streams的连接
到现在为止,打开表的数量Opened_tables
通过服务器请求的问题
连接连接到Running_threads主题周三
slow_queries long_query_time的时间比在运行时定义的请求数量超过
正常运行时间服务器启动后经过的时间
SHOW VARIABLES
MySQL是系统变量的输出。 mysqladmin的命令从系统提示的变量,相同的信息可以看出通过。要改变一些变量的默认值到mysqld运行时发出的命令行选项。
其结果将是类似于以下。
+ ------------------------ + ------------------------ - +
| VARIABLE_NAME |价值|
+ ------------------------ + ------------------------ - +
| Back_log | 5 |
| Connect_timeout | 5 |
| BASEDIR | /我/ /蒙蒂|
| DATADIR /我/蒙蒂/数据/ |
| Delayed_insert_limit | 100 |
| Delayed_insert_timeout | 300 |
| Delayed_queue_size | 1000 |
| Join_buffer_size | 131072 |
| Flush_time | 0 |
| Key_buffer_size | 1048540 |
|语言| /我/蒙蒂/共享/英文/ |
|登陆|关闭|
| LOG_UPDATE |关闭|
| Long_query_time | 9 |
| LOW_PRIORITY_UPDATES |关闭|
| MAX_ALLOWED_PACKET | 1048576 |
| MAX_CONNECTIONS | 100 |
| max_connect_errors次| 10 |
| Max_delayed_threads | 20 |
| Max_heap_table_size | 16777216 |
| Max_join_size | 4294967295 |
| max_sort_length的| 1024 |
| Max_tmp_tables | 32 |
| Net_buffer_length | 16384 |
|港口| 3306 |
|协议版本| 10 |
| Record_buffer | 131072 |
| Skip_locking |作者:|
插座的/ tmp / mysql.sock的|
| Sort_buffer | 2097116 |
的table_cache | 64 |
| Thread_stack | 131072 |
| Tmp_table_size | 1048576 |
| TMPDIR / | | /机器/ tmp目录
|版本3.23.0-α调试|
WAIT_TIMEOUT | 28800 |
+ ------------------------ + ------------------------ - +
MySQL管理和调整每个参数整定方法的描述在下一章讨论。
SHOW PROCESSLIST
显示当前连接的线程。
壳> mysqladmin的processlist命令也可以使用相同的信息,可以得到。默认情况下,信息可以只看到自己的线程,如果你有process权限给你有关的所有线程的信息。在这种情况下,使用kill命令来杀死线程可以
▶锁表/解锁表
语法:LOCK TABLES和tbl_name [别名]读| [LOW_PRIORITY]写[,tbl_name READ | [LOW_PRIORITY]写... ...解锁表的锁在桌子上的表命令为当前线程锁(锁)和挂起。 sseuredeuran连接到数据库可以被认为是接入单位。 UNLOCK TABLES当前线程的内容所采取的所有锁。到另一个表中所有的表的线程锁定锁定该线程会自动锁定在断开连接时,或显露。
如果一个线程读操作(读),表锁定的用户只能拨打线程可以读表。
此外,写一个线程(写),如果一个锁,只有线程的用户表,将能够读取和写入。表锁的其他线程将等待,直到它脱离。
在一般情况下,当务之急是rakboda nopeunde读,写锁时,它更新,尽快以确保这些进展是换句话说,读线程锁在桌子上的东西,而另一个线程写入到表锁,锁表盘读取线程之前的事情会等到写解锁。
在一般情况下,只有一个表来更新我,如果你不需要锁定。因为一个线程,如果你正在运行的SQL语句从其他线程,因为线程可以干扰。有时也可能是暴露了必要的锁。
万和表如果你需要更多的工作,如果你想使用表上的锁可以更快的连续系列的数目。 MySQL是一个交易(交易)不提供一万之间的功能不切断,以防止其他线程必须使用LOCK TABLES命令SELECT和UPDATE。
安全是下面这一系列案件处理工作。
MySQL的> LOCK TABLES和反读,顾客写;
MySQL的> SELECT SUM(值)从跨的customer_id = some_id;
MySQL的>更新客户一套total_value = sum_from_previous_statement
这里的customer_id = some_id;
MySQL的> UNLOCK TABLES;
与其他用户的线程可以插入在这种情况下,一万天,如果你不使用LOCK TABLES命令,SELECT和UPDATE命令。
▶的GRANT / REVOKE
语法:
授予priv_type [(column_list中)] [,priv_type [(column_list中)...
ON tbl_name | * | * |。。DB_NAME *
TO user_name的['密码'确定]
[USER_NAME ['密码'确定] ...]
[了WITH GRANT OPTION]
撤销priv_type [(column_list中)] [priv_type [(column_list中)...]
ON tbl_name | * | * |。。DB_NAME *
来自USER_NAME,USER_NAME ...]
GRANT和REVOKE以下四个步骤的数据库用户的系统管理员的命令将有助于授予或撤消权限。
命令允许系统管理员授予和撤销四个特权级别的MySQL用户的权利:
全球一级
mysql数据库的权限在服务器上的所有数据库的权限存储在user表中。
数据库级
存在于一个特定数据库中所有表的mysql数据库DB特权,主机存储在表中。
表级
表存储在对于tables_priv特权在mysql数据库的表中的所有列。
列级
具体是存储在一个MySQL数据库表中的特权表的单个列列_priv。
其权限的用户授予其他用户(格兰特)夺取权力如下。
撤销授予在私人用户选项;
权限是可用表的SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,GRANT,索引,ALTER。包括:
▶创作索引
创建索引。
语法:CREATE [UNIQUE] tbl_name指数INDEX_NAME(COL_NAME [(长度),...)
对于MySQL 3.22中创建索引语法。在以前的版本没有任何行动。自3.22版本的CREATE INDEX ALTER TABLE的语法创建一个索引,如起到了重要作用。
在一般情况下,使用CREATE TABLE语句创建一个表在创建时的各项指标,但已经存在的CREATE INDEX语法,你可以添加一个表的索引。可以通过在括号(COL1,COL2,...)和一个多列索引中列出的列清单。指数值是由两列创建的组合。
在CHAR和VARCHAR列COL_NAME(长)指定给只有部分列的长度列的一个子集生成的索引都可以使用。
开始的名称列在下面的例子中,使该指数显示,只有10位。
MySQL的>的CREATE客户的指数part_of_name(名称(10));
在这种情况下,全名搜索将是比创建索引的速度慢,但可以节省大量的磁盘空间和加快执行的INSERT时。
▶的DROP INDEX
语法:DROP指数INDEX_NAME
该指数被删除。为MySQL 3.22 DROP INDEX语法。在以前的版本没有任何行动。在3.22以后的版本中删除索引DROP INDEX和ALTER TABLE的语法是相同的作用。
没有评论:
发表评论