
1. 主键超级键候选键外键
主键:
数据列或属性的组合,它们唯一且完整地标识表中存储的数据对象. 数据列只能有一个主键,并且主键的值不能丢失,即不能为空.
超级键:
可以唯一标识关系中元组的属性集称为关系模式的超级键. 一个属性可以用作超级键,多个属性也可以用作超级键. 超级键包括候选键和主键.
候选键:
是最小的超级键,即没有冗余元素的超级键.
外键:
一个表中存在的另一个表的主键称为该表的外键.
2. 事务的四个特征和含义

正确执行事务转换的四个基本元素. ACID,原子性(原子性),稠度(对应),隔离(隔离),耐久性(耐久性).
原子性: 整个事务中的所有操作都已完成或未完成,并且不可能停留在中间的链接中. 如果在执行事务期间发生错误,则它将回滚(回滚)到事务开始之前的状态,就像从未执行过该事务一样.
一致性: 在事务开始之前和事务结束之后,的完整性约束没有被破坏.
隔离: 隔离执行事务,使它们似乎是系统在给定时间内执行的唯一操作. 如果有两个事务同时运行并执行相同的功能,则事务的隔离将确保系统中的每个事务都认为只有该事务正在使用系统. 此属性有时称为序列化. 为了避免事务操作之间的混淆,必须对请求进行序列化或序列化,以便在同一时间仅对同一数据使用一个请求.
耐用性: 交易完成后,公司对所做的更改将保留在中,并且不会回滚.
3. 视图的作用,可以更改视图吗?
视图是虚拟表. 与包含数据的表不同,视图仅包含查询,这些查询在使用时可以动态检索数据. 它们不包含任何列或数据. 使用视图可以简化复杂的SQL操作,隐藏特定细节并保护数据. 创建视图后,它们可以与表相同的方式使用.
该视图无法建立索引,也不能具有关联的触发器或默认值. 如果视图本身中存在排序依据,则该视图的订购依据将再次被覆盖.
创建视图: 将视图XXX创建为XXXXXXXXXXXXXX;
对于某些视图(例如Distinct Union),它不使用联合子查询分组聚合功能,可以对其进行更新. 视图的更新将更新基表;它不用于更新,并且大多数视图无法更新.

4.drop,delete和truncate之间的区别
drop直接删除表truncate删除表中的数据,然后插入自递增ID(从1开始)以删除表中的数据,并可以添加where子句.
(1)DELETE语句的删除过程是每次从表中删除一行,并同时将该行作为事务记录删除,以进行回滚操作. TRUNCATE TABLE一次删除表中的所有数据,并且不在日志中记录单个删除操作记录. 删除的行无法恢复. 并且与表相关的删除触发器在删除过程中不会被激活. 执行速度快.
(2)表和索引占用的空间. 当表为TRUNCATE时,表和索引所占用的空间将恢复到原始大小,并且DELETE操作不会减少表或索引所占用的空间. drop语句释放表占用的所有空间.
(3)一般来说,请拖放>截断>删除
(4)适用范围. TRUNCATE只能是TABLE; DELETE可以是表和视图
(5)TRUNCATE和DELETE仅删除数据,而DROP删除整个表(结构和数据).
(6)截断和删除时不带: 仅删除数据,而不删除表的结构(定义)drop语句将删除表结构的约束分别是依赖(constrain),触发(trigger)索引(索引);依赖于表的存储过程/函数将保留,但它们的状态将变为: 无效.
(7)delete语句是DML(数据维护语言),此操作将放入回滚段中,并且直到提交事务后事务才会生效. 如果有相应的老虎,它将在执行期间被触发.
(8)截断和删除都是DLL(数据定义语言),该操作立即生效,原始数据未放入回滚段中并且无法回滚

(9)如果没有备份,请谨慎使用drop并截断. 要删除某些数据行,请使用delete并注意限制影响范围的位置. 回滚段应足够大. 要删除表,请使用drop;如果要保留表并删除表中的数据,如果与事务无关,请使用truncate来实现. 如果与事务有关,或者老师想触发触发器,请使用delete.
(10)截断表表名是快速而有效的,因为:
截断表在功能上与不带WHERE子句的DELETE语句相同: 都删除表中的所有行. 但是,TRUNCATE TABLE比DELETE更快,并且使用更少的系统和事务日志资源. DELETE语句一次删除一行,并在事务日志中为每个删除的行记录一个条目. TRUNCATE TABLE通过释放用于存储表数据的数据页面来删除数据,并且仅将页面的释放记录在事务日志中.
(11)TRUNCATE TABLE删除表中的所有行,但表结构及其列,约束,索引等保持不变. 用于新行ID的计数值将重置为该列的. 如果要保留ID计数值,请改用DELETE. 如果要删除表定义及其数据,请使用DROP TABLE语句.
(12)对于由FOREIGN KEY约束引用的表,不能使用TRUNCATE TABLE,但应使用不带WHERE子句的DELETE语句. 由于TRUNCATE TABLE未记录在日志中,因此无法激活触发器.
5. 索引的工作方式及其类型
索引是管理系统中的排序数据结构,可帮助快速查询和更新表中的数据. 索引的实现通常使用B树及其变体B +树.
除数据外,系统还维护满足特定搜索算法的数据结构. 这些数据结构以某种方式引用(指向)数据,以便可以在这些数据结构上实现高级搜索算法. 这种数据结构就是索引.
为表设置索引需要付出一定的代价: 首先,它增加了的存储空间,其次,插入和修改数据花费了更多时间(因为索引也需要更改).
The

图片显示了可能的索引方法. 左侧是数据表. 有七个记录的两列. 最左边是数据记录的物理地址(请注意,逻辑上相邻的记录不一定在磁盘上物理上相邻). 为了加快Col2的搜索速度,您可以维护右侧显示的二进制搜索树,每个节点都包含一个索引键和一个指向相应数据记录物理地址的指针,因此您可以在O(log2n)中使用二进制搜索. 复杂度内的相应数据.
创建索引可以大大提高系统性能.
首先mysql笔试题,通过创建唯一索引,可以确保表中每一行数据的唯一性.
第二mysql笔试题,它可以大大加快数据检索速度,这也是创建索引的主要原因.
第三,它可以加快表与表之间的连接,特别是在实现数据的引用完整性方面.
第四,当使用分组和排序子句进行数据检索时,查询中的分组和排序时间也可以大大减少.
第五,通过使用索引,可以在查询过程中使用优化遮盖程序来提高系统性能.
也许有人会问: 添加索引有很多优点,为什么不为表中的每个列创建索引呢?因为,增加索引有很多缺点.
首先,创建和维护索引需要花费时间. 时间随着数据量的增加而增加.
第二,索引需要占用物理空间. 数据表除了占用数据空间外,每个索引还占用一定的物理空间. 如果要构建聚簇索引,则所需空间会更大.
第三,在添加,删除和修改表中的数据时,还应该动态维护索引,这会降低数据维护的速度.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-194785-1.html
自始至终都是日舰比北洋多