一、外键:
从一个表的一个列到另一个不同的表中的一个列的直接引用。
设置一个外键时,要求指定两个列,配置了外键列的表为子表,另一个表中被引用的列则位于父表中。不允许先删除父表,子表必须依赖父表。
设置外键,可以为父表中涉及到更新和操作的行设置一些具体的行为。比如外键CustomerID
(1)No Action:默认行为,如果把列CustomerID的更新设置为No Action,意味着任何想要更新父表中的CustomerID列的话都要做检查。如果试图更新CustomerID而可能导致子表中任意行指向一个不存在的值,No Action防止这种情况发生。对于删除也同样有效。确保在两个表都使用CustomerID时,子表的行正确指向父表的中已有的行。
(2)cascade:当更新父表的值,如果影响到子表的行,则自动更新子表中的所有的行,以反映父表中的新值。如果删除影响到子表,就自动删除子表中受影响的行。
(3)set null:当更新或删除父表中的一个值,会影响到子表的行,就自动把子表中受影响的行的外键更新为包含一个NULL值。
示例:创建表
CREATE TABLE MyTable
(ColumnOne INT IDENTITY (1,1) PRIMARY KEY NOT NULL,
ColumnTwo INT NOT NULL
REFERENCES RelatedTable (FirstColum),
ColumnThree VARCHAR(25) NULL,
ColumnFour FLOAT NULL DEFAULT(10) )删除某列
ALTER TABLE MyTable
DROP COLUMN ColumnThree
二、创建索引
CREATE INDEX Index2
ON MyTable (ColumnFour)
索引是一种特殊的查询表,可以被数据库搜索引擎用来加速数据的检索(查询优化器选择索引以优化查询)。简单说来,索引就是指向表中数据的指针。
索引能够提高 SELECT 查询和 WHERE 子句的速度,但是却降低了包含 UPDATE 语句或 INSERT 语句的数据输入过程的速度。索引的创建与删除不会对表中的数据产生影响。创建索引需要使用 CREATE INDEX 语句,该语句允许对索引命名,指定要创建索引的表以及对哪些列进行索引,还可以指定索引按照升序或者降序排列。
创建索引基本语法
CREATE INDEX index_name
ON table_name
或者使用ALTER关键字
ALTER TABLE department
ADD INDEX dept_name_idx(name);
这句为department.name创建了索引(准确来说,这是一个B树)。
单列索引:
CREATE INDEX index_name
ON table_name (column_name)
唯一索引
CREATE UNIQUE INDEX index_name
on table_name (column_name)
聚簇索引(也就是两列及以上)
CREATE INDEX index_name
on table_name (column1, column2)
索引类型:
B树索引
平衡树索引/B树索引。三种数据库都默认B树索引。除非我们显式指定要求其他类型。B树索引以树结构组织,有一个或多个分支节点,分支节点又指向单级的叶节点。分支节点用于遍历树,叶节点则保存真正的值和位置信息。
1) 叶子节点(Leaf node):包含条目直接指向表里的数据行。
2) 分支节点(Branch node):包含的条目指向索引里其他的分支节点或者是叶子节点。
3) 根节点(Root node):一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。
查找:根节点->根据目标值和节点大小判断找到合适的指针,顺着指针前进到下一级分支节点->在分支节点内一次查看直到找到目标叶节点。
插入、更新、删除:服务器会尽力保持树的平衡,不会出现根节点的某一侧拥有比另一侧多得多的分支节点和叶节点,服务器通过增加或删除分支节点重新将值分配得更加均匀。通过保持树的均匀,不需要遍历多层分支节点,服务器能够很快速地到达叶节点查找到需要的值。
位图索引
B树索引擅长处理包含很多不同值的列,但是在处理允许少量不同值的列会变得很难使用。
如果用户查询的列的基数非常的小, 即只有的几个固定值,如性别、婚姻状况、行政区等等。要为这些基数值比较小的列建索引,就需要建立位图索引。
Oracle引入了位图索引。它为存储在某列的每个值生成一个位图。当使用count(XX),可以直接访问索引就快速得出统计数据;当根据位图索引的列进行and,or或 in(x,y,..)查询时,直接用索引的位图进行或运算,在访问数据之前可事先过滤数据。
文本索引

2157

被折叠的 条评论
为什么被折叠?



