Mysql表
来源:互联网 发布:effective java mobi 编辑:程序博客网 时间:2024/05/16 15:34
数据库事物和锁
关系型数据库有四个显著的特征,即安全性、完整性、并发性和监测性。数据库的安全性就是要保证数据库中数据的安全,防止未授权用户随意修改数据库中 的数据,确保数据的安全。在大多数数据库管理系统中,主要是通过许可来保证数据库的安全性。完整性是数据库的一个重要特征,也是保证数据库中的数据切实有 效、防止错误、实现商业规则的一种重要机制。在数据库中,区别所保存的数据是无用的垃圾还是有价值的信息,主要是依据数据库的完整性是否健全。在SQL Server 7.0中,数据的完整性是通过一系列逻辑来保障的,这些逻辑分为三个方面,即实体完整性、域完整性和参考完整性。对任何系统都可以这样说,没有监测,就没 有优化。这句话用在数据库管理系统方面,也是切合实际的。只有通过对数据库进行全面的性能监测,也才能发现影响系统性能的因素和瓶颈,才能针对瓶颈因素, 采取切合实际策略,解决问题,提高系统的性能。并发性也是一个非常重要的概念,它是用来解决多个用户对同一数据进行操作时的问题。特别是对于网络数据库来 说,这个特点更加突出。提高数据库的处理速度,单单依靠提高计算机的物理速度是不够的,还必须充分考虑数据库的并发性问题,提高数据库并发性的效率。那么 如何保证并发性呢?在这个面向下一世纪的数据库产品SQL Server 7.0中,通过使用事务和锁机制,解决了数据库的并发性问题。
事务和锁是两个紧密联系的概念。事务就是一个单元的工作,包括一系列的操作这些操作要么全部成功,要么全部失败。事务确保多个数据的修改作为一个单元来处理。例如,在银行业务中,有一条记帐原则,即有借有贷,借贷相等。那么为了保证这种原则,就得有确保借和贷的登记要么同时成功,要么同时失败。如果出现只记录了借,或者只记录了贷,那么就违反了记帐原则,就会出现记错帐的情况。SQL Server通过支持事务机制管理多个事务,保证事务的一致性。事务使用锁,防止其他用户修改另外一个还没有完成的事务中的数据。对于多用户系统来说,锁机制是必须的。在SQL Server 7.0中,使用事务日志来保证修改的完整性和可恢复性。
SQL Server有多种锁,允许事务锁定不同的资源。锁就是保护指定的资源,不被其他事务操作。为了最小化锁的成本,SQL Server自动地以与任务相应等级的锁来锁定资源对象。锁定比较小的对象,例如锁定行,虽然可以提高并发性,但是却有较高的开支,因为如果锁定许多行, 那么需要占有更多的锁。锁定比较大的对象,例如锁定表,会大大降低并发性,因为锁定整个表就限制了其他事务访问该表的其他部分,但是成本开支比较低,因为 只需维护比较少的锁。
事务和锁具有以下特点:
- 事务是一个单元的工作,要么全做,要么全不做
- 事务保证操作的一致性和可恢复性
- 每一条Transact-SQL语句都可以是一个事务
- 实际使用的事务是用户定义的事务,它包括一系列操作或者语句
- 在多服务器环境中,使用用户定义的分布式事务,保证操作的一致性
- 锁是保证并发控制的手段
- 可以锁定的资源包括行、页、簇、表和数据库
- 锁的类型主要包括共享锁和排它锁
- 特殊类型的锁包括意图锁、修改锁和模式锁
- 共享锁允许其他事务继续使用锁定的资源
- 排它锁只允许一个事务访问数据
- 系统本身可以处理死锁
- 用户可以根据实际情况定制锁的一些特征 .
用MySQL,目前(版本 3.23.6)你可以在三种基本数据库表格式间选择。当你创建一张表时,你可以告诉MySQL它应该对于表使用哪个表类型。MySQL将总是创建一个.frm
文件保存表和列定义。视表类型而定,索引和数据将在其他文件中存储。
你能用ALTER TABLE
语句在不同类型的表之间变换。见7.8 ALTER TABLE
语法。
MyISAM
- 在MySQL 3.23中,
MyISAM
是缺省表格类型,它是基于ISAM
代码并且有很多有用的扩展。索引存储在一个有.MYI
(MYindex)扩展名的文件并且数据存储在有.MYD
(MYData)扩展名的文件中。你能用myisamchk
实用程序检查/修复MyISAM
表。见13.4 对崩溃恢复使用myisamchk
。下列几点在MyISAM
中是全新的:- 不用删除行,可以在表中
INSERT
一个新行,在其他线程从表中正在读取的同时。 - 在支持大文件的文件系统/操作系统上支持大文件(63位)。
- 所有的数据首先存储低字节,这使数据独立于机器和OS,唯一的要求是机器使用补2有符号整数(就像最近20年时间内的每台机器)和IEEE浮点格式(也在主流机器上完全主导地位)。不能支持二进制兼容性的机器的唯一领域是嵌入式系统(因为他们有时有古怪的处理器)。
- 所有的数字键先存储高字节以获得更高的索引压缩。
AUTO_INCREMENT
列的内部处理。MyISAM
将自动地在INSERT/UPDATE
时更新它。AUTO_INCREMENT
值可以用myisamchk
重新设置,这将使得AUTO_INCREMENT
列更快速并且原来的数将不象老的ISAM那样被重新使用。注意,当一个AUTO_INCREMENT
定义在一个多部键值(multi-part-key)的结尾时,老式的行为仍然是存在。BLOB
和TEXT
列可以被索引。- 被索引的列允许
NULL
值。每个键占0-1个字节。 - 现在最大的键长度缺省是500个字节。在键大于250个字节的情况下,一个大于缺省的1024个字节的关键字块大小被用于此键。
- 每个表的键的最大数目放大到32作为缺省。这不必重新编译
myisamchk
就可以放大到64。 - 在有一个标志
MyISAM
显示表是否正确被关上的文件。这将不久被用于自动的修理在MySQL服务器。 - 现在
myisamchk
将标记表为“检查的”。myisamchk --fast
将仅仅检查那些没有这个标记的表。 myisamchk -a
存储键值组成部分的统计(不只是像ISAM
对整个键)。- 现在在删除与更新和插入混用时,动态尺寸的行将有更少碎片,这通过自动合并相邻的删除块并且如果下一块被删除,通过扩大块来做到。
myisampack
能紧缩BLOB
和VARCHAR
列。
MyISAM
也支持下列东西,MySQL在不久的将来将能使用。- 支持一个真正的
VARCHAR
类型;一个VARCHAR
列以2各字节存储的长度开始。 - 用
VARCHAR
的表可以式固定或动态的记录长度。 VARCHAR
和CHAR
可以最大64K字节。所有的关键字片断有其自身的语言定义,这将使得MySQL每列有不同的语言定义。- 一个杂凑计算的索引可用于
UNIQUE
;这将允许你在一个表中的任何列组合上有UNIQUE
属性。(然而,你不能搜索一个UNIQUE
计算的索引。)
你也可以使用放弃的ISAM表类型。这将在不久消失,因为
MyISAM
是同一个东西的更好实现。ISAM使用一个B-tree
索引,这个索引存储在一个有.ISM
扩展名的文件中并且数据存储在有.ISD
扩展名的文件中,你可用isamchk
实用程序检查/修复ISAM表。见13.4 使用myisamchk
恢复崩溃。ISAM表不是跨OS/平台二进制可移植的。ISAM
有下列特征/属性:- 压缩的且定长键
- 固定和动态记录长度
- 有16个键,每个键有16键组成部分
- 最大键长度256(缺省)
- 数据以机器格式存储;快速但是依赖于机器/OS 。
- 不用删除行,可以在表中
HEAP
HEAP
表格使用一个杂凑(hashed)索引并且存储在内存中。这使他们更快,但是如果MySQL崩溃,你将失去所有存储的数据。HEAP
作为临时表很可用!CREATE TABLE test TYPE=HEAP SELECT ip,SUM(downloads) as down FROM log_table GROUP BY ip;SELECT COUNT(ip),AVG(down) FROM test;DROP TABLE test;
当你使用
HEAP
表时,这里是你应该考虑的一些事情:- 你应该总是在
CREATE
语句中指定MAX_ROWS
以保证你有意不使用所有的内存。 - 索引将只能与与
=
和<=>
一起使用(但是很快)。 HEAP
表使用一个固定的记录长度格式。HEAP
不支持BLOB
/TEXT
列。HEAP
不支持AUTO_INCREMENT
列。HEAP
不支持在一个NULL
列上的索引。- 你可以在一个
HEAP
表中有非唯一键(杂凑表一般不这样)。 HEAP
表格在所有的客户之间被共享(就象任何其他的表)。HEAP
表的数据以小块分配。表是100%动态的(在插入时),无需溢出区和额外的键空间。删除的行放入一个链接表并且当你把新数据插入到表时,它将被再次使用。- 为了释放内存,你应该执行
DELETE FROM heap_table
或DROP TABLE heap_table
。 - 为了保证你不会偶然做些愚蠢的事情,你不能创建比
max_heap_table_size
大的HEAP
表。
在Mysql中,数据库的表有三种类型:INNODB,BDB,MyISAM
其中,INNODB和BDB支持数据库事务;MyISAM不支持数据库事务。
在Mysql中,通过create语句创建的表是MyISAM类型,我们可以显示的指定创建其他类型的数据库表,如:
create talbe user(
id bigint not null,
name varchar(20),
primary key(id)
) type=INNODB;
- Mysql表
- MySQL 表
- MySQL中的mysql.user表
- 【MySQL】MySQL多表查询
- MySQL中MySQL Information_Schema表
- mysql中的mysql.user表
- mysql导出表\mysql导入表
- MYSQL 教程:§9, MYSQL表类型
- MySQL Study之--MySQL 表连接
- MySQL表类型,字符集知识汇总【MySQL】
- MySQL学习之MySQL单表查询
- 【MySQL学习笔记】MySQL库与表
- MySQL必知必会-12MySQL联结表
- MySQL必知必会-20MySQL更新表
- MySQL 学习<十二> MySQL权限表
- Mysql 练习题 加Mysql的表
- 【Mysql】Mysql数据库查询“表空间”
- mysql中的临时表
- 一个简单的JSP登陆代码
- 使用 Eclipse Memory Analyzer 检测内存泄漏问题
- 7.11.2008
- 7.12.2008
- *_cast用法详解
- Mysql表
- 活动目录服务接口ADSI(Active Directory Service Interface)
- 利用Directsound编程实现实时混音
- oracle数据字典视图及其功能
- 中文乱码问题的解决方法
- 标准c++中四种强制转换类型运算符介绍 const_cast,reinterpret_cast,static_cast,dynamic_cast
- 向一个指定窗口发送左键按下的消息,同时将左键按下的位置也发过去(譬如要编写连连看程序的外挂)
- 疾病,疾病,还是疾病
- 我网站的后台管理。ASP代码。