CHECK TABLE tbl_name[,tbl_name] ... [option] ...
option= {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
检查一个或多个表是否有错误。CHECK TABLE对MyISAM和InnoDB表有作用。对于MyISAM表,关键字统计数据被更新。
CHECK TABLE也可以检查视图是否有错误,比如在视图定义中被引用的表已不存在。
CHECK TABLE语句会返回一个含有以下列的表:
列
|
值
|
Table
|
表名称
|
Op
|
进行检查
|
Msg_type
|
状态、错误、信息或错误之一
|
Msg_text
|
消息
|
注意,该语句可能会为每个被检查的表产生多行信息。最后一行有一个Msg_type状态值。Msg_text通常应为OK。如果您没有得到OK,或表已经更新了,则您通常应该运行修复后的表。请参见5.9.4节,“表维护和崩溃恢复”。表已经更新了,这意味着表的存储引擎指示没有必要检查表。
可以给予的不同的检查选项列于下表中。这些选项只适用于检查MyISAM表。对于InnoDB表和视图,这些选项被忽略。
类型
|
意义
|
QUICK
|
不扫描行,不检查错误的链接。
|
FAST
|
只检查没有被正确关闭的表。
|
CHANGED
|
只检查上次检查后被更改的表,和没有被正确关闭的表。
|
MEDIUM
|
扫描行,以验证被删除的链接是有效的。也可以计算各行的关键字校验和,并使用计算出的校验和验证这一点。
|
EXTENDED
|
对每行的所有关键字进行一个全面的关键字查找。这可以确保表是100%一致的,但是花的时间较长。
|
如果没有指定QUICK, MEDIUM或EXTENDED选项,则对于动态格式MyISAM表,默认检查类型是MEDIUM。这与对表运行myisamchk --medium-checktbl_name的结果相同。对于静态格式MyISAM表,默认检查类型也是MEDIUM,除非CHANGED或FAST已被指定。在此情况下,默认值为QUICK。对于CHANGED和FAST,行扫描被跳过,因为行极少被破坏。
您可以组合检查选项,如下面的例子所示。该例子对表进行了一个快速检查,来查看该表是否被正确关闭:
CHECK TABLE test_table FAST QUICK;
注释:在有些情况下,CHECK TABLE会更改表。如果表被标记为“corrupted”或“not closed properly”,则出现这种情况。但是CHECK TABLE不会找出表中的问题。在这种情况下,CHECK TABLE会把表标记为良好。
如果一个表被破坏,很有可能问题在索引中,而不在数据部分中。所有前述的检查类型都可以彻底地检查索引,因此,可以找出多数的错误。
如果您只想要检查您假定的表是良好的,您应该不使用检查选项或QUICK选项。当您时间匆忙时,应使用QUICK。QUICK无法找出数据文件中的错误的风险非常小。(在多数情况下,在正常使用中,MySQL应能在数据文件中找出错误。如果找出了错误,表被标记为“corrupted”,并不能被使用,直到修复为止。)
如果您想要时常检查表,FAST和CHANGED多数情况下从原本中被使用(例如,从cron中被执行)。在多数情况下,FAST优先于CHANGED。(只有一种情况FAST不优先于CHANGED,那就是当您怀疑您在MyISAM代码中发现了错误。)
当MySQL试图通过关键字更新一行或查找一行时,如果您已经运行了一个常规检查后但仍得到来自表的奇怪的错误,此时使用EXTENDED。(如果常规的检查运行成功,则基本用不着EXTENDED。)
被CHECK TABLE报告的部分问题不会被自动修正:
? 发现行。此行中,auto_increment列有0值。
这意味着,您在表中有一行,该行的AUTO_INCREMENT索引列包含0值。(可以通过使用UPDATE语句,明确地把列设置为0,以创建一个AUTO_INCREMENT列为0的行。)
这本身不是一个错误,但是如果您决定转储表并恢复表,或对表进行ALTER TABLE,那么会导致出现麻烦。在此情况下,AUTO_INCREMENT列会根据AUTO_INCREMENT列的结果更改值,这会导致出现问题,如重复关键字错误等。
要消除警告,只需执行一个UPDATE语句,把列设置为除0以外的值。
分享到:
相关推荐
- 三者都支持类似 `ALTER TABLE 表名 ADD CONSTRAINT CHECK(列名 > 10)` 的语法 15. **添加外键约束**: - 三者都有相似的语法,但Oracle需要指定 `ON UPDATE CASCADE` 或 `ON UPDATE ACTION` 控制级联操作 16. ...
### MySQL数据库基本操作语法知识点详解 #### 一、常用查询操作 **1. 显示所有数据库** - **命令**: `SHOW DATABASES;` - **功能**: 列出当前MySQL服务器上存在的所有数据库。 **2. 删除数据库** - **命令**: ...
根据提供的文件信息,我们可以整理出一系列关于MySQL数据库的关键知识点,主要涵盖了基本的SQL语句及其用法。下面将对这些知识点进行详细的解释与说明。 ### 1. 数据查询(SELECT) - **定义**:`SELECT` 语句用于...
在SQL Server、Oracle和MySQL这三种关系型数据库管理系统(RDBMS)中,它们的SQL语法在很多方面具有相似性,但在某些特定操作上存在差异。以下是对这些系统中一些关键语法和用法的对比: 1. **查看表结构**: - ...
- **数据库**: MySQL、Oracle、PostgreSQL、DB2 等主流关系型数据库。 #### 3. Sqoop 发行版 Sqoop 1.4.6 是 Sqoop 的一个稳定版本,包含了一系列功能改进和错误修复,旨在提供更稳定的数据迁移体验。 #### 4. ...
在数据库领域,SQL Server 和 MySQL 都是非常流行的数据库管理系统,它们各自具有独特的优势和特点。为了更好地理解和区分这两种数据库系统,下面将详细介绍 SQL Server 与 MySQL 在多个方面的差异。 #### 1. 执行...
* 创建数据库的基本语法:create database 数据库名; * 查看 MySQL 服务器所有的数据库:show databases; * 查看数据库的定义:show create database 数据库名; * 查看数据库存储引擎:show engines; * 删除数据库:...
MySQL 和 SQL Server 是两种广泛应用的关系型数据库管理系统,它们在数据定义、存储过程、触发器、事务处理、安全性、性能优化等方面都有各自的特点和差异。以下将对比这两种数据库在数据定义方面的命令及其功能。 ...
Oracle、SQL Server和MySQL是三种广泛应用的关系型数据库管理系统(RDBMS),它们在数据管理、查询语法和功能上存在一些差异。以下是对这些系统的对比,主要关注它们在操作数据库结构方面的命令。 1. **查看表结构*...
在使用MySQL客户端时,你需要了解一些基本的SQL语法,例如CREATE DATABASE创建数据库,USE选择数据库,CREATE TABLE创建表,INSERT INTO添加记录,SELECT查询数据,UPDATE更新记录,DELETE删除记录等。此外,还要...
- 了解创建数据库的具体语法有助于更好地掌握MySQL的数据库管理能力。 - 可以通过`SHOW CREATE DATABASE 数据库名;`命令查看创建数据库的定义。 - **1.2.1.4 修改数据库属性 alterdatabase** - 有时需要更改...
### MySQL DBA手册知识点概述 #### 一、MySQL简介及发展历程 - **MySQL**:一款开源的关系型数据库管理系统,广泛...- **参考文档**:包含MySQL的所有命令、函数、语法等详细信息,是学习和使用MySQL的重要参考资料。
根据数据库系统不同,可能有额外的存储特性选项,例如MySQL中的 ENGINE(定义存储引擎,如InnoDB、MyISAM)、CHARACTER SET(定义字符集)、COLLATE(定义排序规则)等。 通过熟练掌握CREATE TABLE语句,开发者可以...
MySQL是一种流行的关系型数据库管理系统,广泛应用于网站开发、数据分析等领域。本手册主要涵盖了MySQL的基本操作,包括安装、登录、数据库与表的创建以及数据完整性约束等内容。 首先,安装MySQL是使用它的第一步...
### MySQL数据库:触发器与事件调度器技术教程 #### 一、MySQL触发器基础 **1.1 触发器的概念与作用** 触发器是一种特殊类型的存储过程,它被设计成在特定的数据库操作(例如INSERT、UPDATE、DELETE)发生时自动...
MySQL 和 SQL Server 是两种广泛应用的关系型数据库管理系统(RDBMS),它们在许多方面都有所不同,包括语法、性能、安全性和成本等方面。本篇将详细对比这两种数据库在数据定义、约束以及索引等方面的异同。 首先...
- **ALTER TABLE语法**:允许对已存在的表进行结构上的更改,比如添加、删除或修改列,添加或删除约束等。 - **CREATE DATABASE语法**:用于创建新的数据库,是数据库生命周期的起点。 - **CREATE INDEX语法**:...
在Oracle数据库中,设置主键的过程与MySQL略有不同,一般会使用`ALTER TABLE`配合`ADD CONSTRAINT`,如`ALTER TABLE course_info ADD CONSTRAINT pk_course_info PRIMARY KEY (id)`。Oracle不支持直接在表定义中设置...