mysql数据库表类型_谈谈MySQL数据表的类型(转)

通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。

我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等。根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点。

MySql数据库是开放源代码的关系型数据库。目前,它可以提供的功能有:支持sql语言、子查询、存储过程、触发器、视图、索引、事务、锁、外键约束和影像复制等。在后期,我们会详细讲解这些功能。

同Oracle 和SQL Server等大型数据库系统一样,MySql也是客户/服务器系统并且是单进程多线程架构的数据库。

MySql区别于其它数据库系统的一个重要特点是支持插入式存储引擎。

什么是存储引擎

存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。

在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

MySql中有哪些存储引擎?

MyISAM:这种引擎是mysql最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种:静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。

动态MyISAM:如果数据表中出现varchar、xxxtext或xxxBLOB字段时,服务器将自动选择这种表类型。相对于静态 MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。 同时,内存中也可能会出现很多碎片。因此,这种类型的表要经常用optimize table 命令或优化工具来进行碎片整理。

压缩MyISAM:以上说到的两种类型的表都可以用myisamchk工具压缩。这种类型的表进一步减小了占用的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先时行解压缩。

但是,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能。MyISAM Merge引擎:这种类型是MyISAM类型的一种变种。合并表是将几个相同的MyISAM表合并为一个虚表。常应用于日志和数据仓库。

InnoDB:InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。

memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。

archive:这种类型只支持select 和 insert语句,而且不支持索引。常应用于日志记录和聚合分析方面。

当然MySql支持的表类型不止上面几种。下面我们介绍一下如何查看和设置数据表类型。

存储引擎的操作

1. 查看数据库可以支持的存储引擎

用show engines; 命令可以显示当前数据库支持的存储引擎情况:

01

mysql> show engines;

02

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

03

| Engine     | Support | Comment                                                        | Transactions | XA   | Savepoints |

04

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

05

| MEMORY     | YES     | Hash based, storedin memory, usefulfor temporary tables      |NO           |NO   |NO         |

06

| FEDERATED  |NO      | Federated MySQL storage engine                                 |NULL         |NULL |NULL       |

07

| MyISAM     | YES     |Default engineas of MySQL 3.23with great performance         |NO           |NO   |NO         |

08

| BLACKHOLE  | YES     | /dev/null storage engine (anything you writeto it disappears) |NO           |NO   |NO         |

09

| MRG_MYISAM | YES     | Collectionof identical MyISAM tables                          |NO           |NO   |NO         |

10

| CSV        | YES     | CSV storage engine                                             |NO           |NO   |NO         |

11

| ARCHIVE    | YES     | Archive storage engine                                         |NO           |NO   |NO         |

12

| InnoDB     |DEFAULT | Supports transactions, row-level locking,and foreign keys     | YES          | YES  | YES        |

13

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

14

8rows in set

2. 查看表的结构等信息的若干命令

要查看表的定义结构等信息可以使用以下几种命令:Desc[ribe] tablename; //查看数据表的结构

1

mysql>desc test;

2

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

3

| Field | Type                  |Null |Key |Default | Extra          |

4

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

5

| id    | mediumint(8) unsigned |NO   | PRI |NULL    | auto_increment |

6

|name  |varchar(20)           |NO   |     |NULL    |                |

7

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

8

2rows in set

show create table tablename; //显示表的创建语句

01

mysql> showcreate table test;

02

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

03

|Table |Create Table                                                                                                                                                                         |

04

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

05

| test  |CREATE TABLE `test` (

06

`id` mediumint(8) unsignedNOT NULL AUTO_INCREMENT,

07

`name`varchar(20)NOT NULL,

08

PRIMARY KEY (`id`)

09

) ENGINE=InnoDB AUTO_INCREMENT=14DEFAULT CHARSET=latin1 |

10

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

11

1 rowin set

show table status like 'tablename'\G显示表的当前状态值

1

mysql> showtable statuslike 'test';

2

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

3

|Name | Engine | Version | Row_format |Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation         | Checksum | Create_options | Comment |

4

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

5

| test | InnoDB |      10 | Compact    |   13 |           1260 |       16384 |               0 |            0 |   9437184 |             14 | 2010-01-21 08:46:03 |NULL        |NULL       | latin1_swedish_ci |NULL     |                |         |

6

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

7

1 rowin set

综上可见,后两种方式都可以帮助我们查看某一表的存储引擎类型(图中已用红色方框标出)。

3. 设置或修改表的存储引擎

创建数据库表时设置存储存储引擎的基本语法是:

1

Create table tableName(

2

columnName(列名1)  type(数据类型)  attri(属性设置),

3

columnName(列名2)  type(数据类型)  attri(属性设置),

4

……..) engine = engineName

例如,假设要创建一个名为user的表,此表包括id,用户名username和性别sex三个字段,并且要设置表类型为merge。则可用如下的方式创建此数据表,

1

create table user(

2

idint not null auto_increment,

3

usernamechar(20)not null,

4

sexchar(2),

5

primary key(id)

6

) engine=merge

修改存储引擎,可以用命令Alter table tableName engine =engineName。假如,若需要将表user的存储引擎修改为archive类型,则可使用命令alter table user engine=archive。

小结

在本文中主要介绍了什么是MySql数据库,并进一步引出了它的一个重要特性, 即插入式的多存储引擎机制。然后,简单介绍了什么是存储引擎和MySql中几种主要的存储引擎。最后,介绍了如何查看数据库支持的所有存储引擎,如何查看 数据库表的存储引擎类型及如何设置或修改表的存储引擎类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL是一种开源的、关系型数据库管理系统,是最流行的关系型数据库之一。它可以在多种操作系统上运行,包括Windows、Linux和Unix等。MySQL具有高性能、可靠性、可扩展性等优点,可以应用于各种不同的场景,如Web应用程序、企业级应用程序、数据仓库等。 在MySQL数据库技术方面,我认为主要包括以下几个方面: 一、数据库设计和建模 在设计和建模MySQL数据库时,需要考虑数据的结构和关系。数据库设计应该具有高效性、可靠性、安全性、可扩展性和可维护性。在设计时,需要考虑之间的关系,以及如何使用索引、视图、存储过程和触发器等功能来优化性能。 二、SQL语言 SQL是结构化查询语言,是访问MySQL数据库的主要方式。SQL语言包括数据定义语言(DDL)、数据操作语言(DML)和数据查询语言(DQL)等部分。DDL用于创建、修改和删除数据库对象,如、索引和视图等;DML用于插入、更新和删除数据;DQL用于查询数据。了解SQL语言的基础知识,可以更好地理解和使用MySQL数据库。 三、索引 索引是MySQL数据库中用于加快查询速度的重要机制。索引可以是单列索引或多列索引,可以通过B树或哈希来实现。在使用索引时,需要考虑索引的选择和优化,以确保查询效率的最大化。 四、优化查询性能 优化查询性能是MySQL数据库技术的重要方面。在MySQL查询中,可以使用各种技术来提高查询性能,如使用索引、优化查询语句、使用存储过程和优化数据库服务器等。此外,还可以通过分区、分片、负载均衡等方式来扩展MySQL数据库的性能。 五、备份和恢复 备份和恢复是MySQL数据库管理的关键方面。在MySQL数据库中,可以使用mysqldump命令将数据库备份到文件中,也可以使用二进制日志(binlog)来备份和恢复数据。备份和恢复需要考虑备份频率、备份类型和备份存储等因素。 综上所述,MySQL数据库技术是一个广泛应用于各种应用程序的关键技术,包括数据库设计和建模、SQL语言、索引、优化查询性能、备份和恢复等方面。了解和掌握这些技术,可以帮助开发人员更好地使用MySQL数据库,提高应用程序的性能和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值