数据库小知识点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库小知识点相关的知识,希望对你有一定的参考价值。
元组是关系数据库中的基本概念,关系是一张表, 表中的每行(即数据库中的每条记录)就是一个元组 ,每列就是一个属性。 在二维表里,元组也称为记录。
要删除表A中数据,使用TRUNCATE TABLE A。运行结果是表A中的约束依然存在!
删除表的语句为:DROP TABLE table_name;
而DELETE和TRUNCATE TABLE都是删除表中的数据的语句,它们的不同之处在于:
1、TRUNCATE TABLE比DELETE的速度快;
2、TRUNCATE TABLE 是删除表的所有行,而DELETE是删除表的一行或者多行(除非DELETE不带WHERE语句);
3、在删除时如果遇到任何一行违反约束(主要是外键约束),TRUNCATE TABLE仍然删除,只是表的结构
及其列、约束、索引等保持不变,但DELETE是直接返回错误;
4、对于被外键约束的表,不能使用TRUNCATE TABLE,而应该使用不带WHERE语句的DELETE语句。
5、如果想保留标识计数值,要用DELETE,因为TRUNCATE TABLE会对新行标志符列搜用的计数值重置为该列的种子。
1. TRUNCATE TABLE 在功能上与不带 Where 子句的 Delete 语句相同:二者均删除表中的全部行。
但 TRUNCATE TABLE 比 Delete 速度快,且使用的系统和事务日志资源少。
2. Delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放
存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
3. TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的
计数值重置为该列的种子。如果想保留标识计数值,请改用 Delete。
4. 速度,一般来说: drop> truncate > delete
5. 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;
1) 概念:
数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时
存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。
加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,
对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进
行更新操作。
(2) 锁的分类:
共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。
排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。
更新(U)锁:更新锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死
锁现象。因为使用共享锁时,修改数据的操作分为两步,首先获得一个共享锁,读取数据,然后将共享锁升级为
排它锁,然后再执行修改操作。这样如果同时有两个或多个事务同时对一个事务申请了共享锁,在修改数据的
时候,这些事务都要将共享锁升级为排它锁。这时,这些事务都不会释放共享锁而是一直等待对方释放,这样就
造成了死锁。如果一个数据在修改前直接申请更新锁,在数据修改的时候再升级为排它锁,就可以避免死锁。
(3) 锁的粒度:
在sql server2000中锁是具有粒度的,即可以对不同的资源加锁。锁定在较小的粒度的资源(例如行)上可以
增加系统的并发量但需要较大的系统开销,从而也会影响系统的性能,因为锁定的粒度较小则操作可能产生的
锁的数量会增加;锁定在较大的粒度(例如表)就并发而言是相当昂贵的,因为锁定整个表限制了其它事务
对表中任意部分进行访问,但要求的开销较低,因为需要维护的锁较少,所以在这里是一种互相制约的关系。
Sql server2000中锁定的粒度包括 行、页、扩展盘区、表、库等资源。
数据完整性可以分为四类。
1、实体完整性,实体完整性的目的是确保数据库中所有实体的唯一性,也就是不应出现完全相同的数据记录。
2、区域完整性,匹配完整性要求数据表中的数据位于某一个特定的允许范围内。
3、参考完整性,是用来维护相关数据表之间数据一致性的手段,通过实现参考完整性,可以避免因一个数据
表的记录改变而造成另一个数据表内的数据变成无效值。
4、用户自定义完整性,用户自定义由用户根据实际应用中的需要自行定义。
引用完整性通过主键和外键之间的引用关系实现 如果两个表中存储的信息相互关联,那么只要修改了一个表,
另外一个表也要做出相应的修改,则称该这两个表中的数据具备完整性
BEGIN或START TRANSACTION;显示地开启一个事务;
COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称
为永久性的;
ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;
RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
ROLLBACK TO identifier;把事务回滚到标记点;
SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、
READ COMMITTED、REPEATABLE READ和SERIALIZABLE。
在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作。
因此开启一个事务必须使用begin,start transaction,或者执行 set autocommit=0;可以使用的事务控制语句
start transction | begin : 显示的开启一个事务
本文出自 “11029145” 博客,请务必保留此出处http://11039145.blog.51cto.com/11029145/1884854
以上是关于数据库小知识点的主要内容,如果未能解决你的问题,请参考以下文章