SQL-其他特性

来自必知必会的实践

1. 约束(管理数据的规则)

1. 实体完整性-主键:唯一标识表中的一行。
– 主键唯一&主属性非空
– 在创建表中以PRIMARY KEY定义,列级或表级约束
– 主键值不能重用,即删除一行后,主键值不分配给新行

2. 参照/引用完整性-外键(一个表的属性如果是另一个表的主键,则该属性是第一个表的外键)
– 外键只能接受另一个表已有的主键值,外键可防止意外删除

-- 向表中增加外键约束
ALTER TABLE Orders
ADD CONSTRAINT FK_OrdersCustomers 
FOREIGN KEY (cust_id) REFERENCES Customers(cust_id);

3. 唯一性约束UNIQUE,保证数据唯一,可以含有NULL值
– 表中可含多个唯一约束,但只能有一个主键
– 外键的值可以不唯一,例如几个订单可以是一个顾客

4.检查约束-CHECK,使数据满足特定条件,比如性别列只允许‘男’‘女’两个值,年龄列只允许0-150的数

-- 检查性别列(gender)只包含M或F
ALTER TABLE tablename
ADD CONSTRAINT CH1 CHECK (gender IN ('M','F'))

2. 索引,排序数据以加快搜索和排序操作的速度

– 主键总是排序的,因此按主键检索特定行是快速有效的操作
– 在一个或多列上定义索引,DBMS会保存其内容的一个排过序的列表。搜索时DBMS搜索索引,找出匹配的位置,然后检索
– 缺点:索引改善了查的性能,但降低了增删改的性能,因为索引要动态更新;索引要占用大量存储空间。
– 取值不多的数据不建议做索引
–如果经常以某种特定顺序排序数据,则适合做索引
–最好定期检查索引并按需调整,因为经过几个月的数据处理后索引可能变的不再理想

-- 在产品表的产品名上建一个索引
CREATE INDEX prod_name_ind
ON Products(prod_name);

3. 触发器(某个表上):

在该表特定活动(增删改或组合)发生时自动执行,只针对单个表
– 例如:基于某个表的变动在其他表上执行活动
– 约束比触发器更快,尽量使用约束

-- 创建一个顾客表上的触发器,当发生插入和更新操作时,将顾客所在州列转换为大写
CREATE TRIGGER customer_state 
ON Customers
FOR INSERT ,UPDATE
AS
BEGIN
UPDATE Customers
SET cust_state=UPPER(Customers.cust_state)
FROM Customers,inserted
WHERE Customers.cust_id=inserted.cust_id
END

4. 数据库安全

– 授予或限制各用户对数据的访问 GRANT/ REVOKE语句
– 索引改善数据检索的性能
– 触发器用来执行运行前后的处理

发布了24 篇原创文章 · 获赞 6 · 访问量 1182

猜你喜欢

转载自blog.csdn.net/wbing96/article/details/103151949