数据库基础知识记录

本文介绍了数据库事务的基础知识,强调了事务作为并发控制和数据一致性维护的单位的重要性。同时,探讨了SQL中的substr函数与like操作的比较,指出在特定情况下substr可能提高查询效率。还提到了索引在不同查询场景下的使用,以及事务的开始、提交、回滚等相关命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事物:

(1) 事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。所以,事务是数据库 维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

(2) 事务是DBMS的基本单位,是构成单一逻辑工作单元的操作集合


域完整性

  编辑
本词条缺少 信息栏名片图,补充相关内容使词条更完整,还能快速升级,赶紧来 编辑吧!
域完整性是针对某一具体关系数据库的约束条件,它保证表中某些列不能输入无效的值。
域完整性指列的值域的完整性。如数据类型、格式、值域范围、是否允许空值等。
域完整性限制了某些属性中出现的值,把属性限制在一个有限的集合中。例如,如果属性类型是整数,那么它就不能是101.5或任何非整数。
可以使用CHECK约束、UNIQUE约束、default默认值、identity自增、not null/null保证列的值域的完整性。
示例解释:学生表
学号(int) 编码(char(8)) 姓名(char(8)) 性别(int) 年龄(int)
200101 AC200101 薛之之 1 12
对年龄约束后,如对学生表add constraint nlc check(年龄<20)
是否可以插入这一组数据?答案:否 因为数据33>20,不能保证列(年龄)的值域的完整性
200102 AC200102 PAPI将 0 33


引用完整性

  编辑
本词条缺少 名片图,补充相关内容使词条更完整,还能快速升级,赶紧来 编辑吧!
引用完整性同为, 参照完整性(Referential Integrity)引用完整性指被引用表中的主关键字和引用表中的外部主关键字之间的关系。如被引用行是否可以被删除等。
中文名
引用完整性
性    质
完整性
属    性
引用
参照完整性
Referential Integrity

目录

简介

编辑
在现实生活中的实体之间总是存在着某种联系,在关系模型中实体与实体之间的联系都是用关系来描述的,这样就存在关系与关系之间的引用。例如,有学生实体和班级两个实体集合:
学生(学号,姓名,性别,年龄,班级编号)其中学号为主码。
班级(班级编号,学生数量,班主任姓名),其中班级编号为主码。
这两个关系之间存在着属性的引用,即学生关系引用了班级关系的主关键字"班级编号",显然,学生关系中的"班级编号"值必须是在班级表中确实存在的班级的班级编号,即班级关系中有该班级的记录。这说明学生关系中某个属性的取值要参照班级关系的属性取值。
在这种情况下,"班级编号"不是学生关系的主关键字,但是却是班级关系的主码,则称"班级编号"是学生关系的外关键字。

外关键字

编辑
设FK是基本关系R的一个或一组属性,但不一定是关系R的主关键字。如果FK与基本关系S的主关键字相对应,则称FK是基本关系R的外关键字,并称基本关系R为引用关系,基本关系S为被引用关系。
在上例中,"班级编号"是学生关系的外关键字,学生关系是引用关系,班级关系是被引用关系。

引用规则

编辑
引用完整性就是定义外关键字与主关键字之间的引用规则。如果要删除被引用的对象,那么也要删除引用它的所有对象,或者把引用值设置为空(如果允许的话)。例如,前面的学生和班级关系中,删除某个班级元组之前,必须先删除相应的引用该班级的学生元组。这就是引用完整性。
图3-1,综合了三种关系数据的完整性。由图中可以看到,实体完整性是对应元组或行而言,域完整性是对应属性或列而言,引用完整性是对不同表之间的属性或列的引用关系而言。

实体完整性

  编辑
本词条缺少 名片图,补充相关内容使词条更完整,还能快速升级,赶紧来 编辑吧!
实体完整性要求每一个表中的主键字段都不能为空或者重复的值。实体完整性指表中行的 完整性。要求表中的所有行都有唯一的标识符,称为 主关键字。主关键字是否可以修改,或整个列是否可以被删除,取决于主关键字与其他表之间要求的完整性。


substr 与 like 比较

在sql数据库中,substr用于字符串的截取,也可以模拟like模糊查询语句的功能,在sql查询时用substr代替like ,可以提升查询效率,



利用右模糊查询可以使用索引,如果字段采用函数处理则不使用索引; A选项有可能使用索引也有可能不使用索引; 所以C执行效率最慢。 索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)      注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引   2.对于多列索引,不是使用的第一部分,则不会使用索引   3.like查询是以%开头   4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引      5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引



  • 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。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值