T-Sql(八)字段索引和数据加密

原文:T-Sql(八)字段索引和数据加密

  t-sql的基本用法讲到第八章也差不多了,最后就讲下字段索引和数据加密,这两个内容对编程人员可能用的地方不是太多,还是那句老话“防患于未然”。

  下面我就简单的说下字段索引和数据加密的内容,只是简单概述,对初学者起到抛砖引玉的作用,大牛们请飘过!!!

一,字段索引

  索引是什么,使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓名(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。

  下面是百度百科对索引概述的优缺点;

  优点:

  1.大大加快数据的检索速度;

  2.创建唯一性索引,保证数据库表中每一行数据的唯一性;

  3.加速表和表之间的连接;

  4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。

  缺点:

  1.索引需要占物理空间。

  2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。

  

  这里我将下t-sql中索引的用法,示例代码:

1 create index IX_ID_NAME--创建索引
2 on worker(w_id,w_name)--在ID NAME 两个字段上创建非聚集索引
3
4 drop index worker.IX_ID_NAME--删除索引
5 select * from sys.indexes where name = 'IX_ID_NAME'--查看索引

  创建唯一非聚集索引语法:

1 create unique nonclustered index index_Production_Product  --创建唯一的非聚集索引
2 on Production.Product(ProductID,Name)
3 where Color is not null;

   我们在创建表的时候也可以指定主键为唯一非聚集索引。

  示例代码:

1 create table Index_Table_Student
2 (
3     id int identity primary key nonclustered,    --指定该主键为非聚集索引
4     name nvarchar(50)
5 )

   启动和禁用索引示例代码:

1 alter index all      --禁用所有的索引
2 on Production.Product
3 disable
4
5 alter index all      --启用所有的索引
6 on Production.Product
7 rebuild

二,数据加密(certificate,symmetric)

  编程的时候我们有时候会接触到数据加密,但那个数据加密是表现在程序上的,数据库的数据加密我们平时会用的很少,除非一些敏感,机密的数据要使用数据加密,还有一种情况是防止数据库数据泄露。

  下面主要讲t-sql中的两种数据加密方式:证书加密(certificate),密钥加密(symmetric)。

  大家只要熟悉t-sql的语法,知道怎么创建证书和密钥,怎么加密数据,怎么解密数据就行了。

1,证书加密

  首先我们创建一个证书:

1 create certificate WageCert             --创建证书
2 with subject='To Encrypt Wage',        --证书主题
3 expiry_date='2014/1/1';                 --证书过期时间

  expiry_date表示的是证书的过期时间,超过这个时间,创建的证书也就失效了,这点注意下。

  创建好证书,下一步就是使用证书加密数据了,我们先创建一张员工表,然后插入数据对工资字段进行机密。

  示例代码:

1 create table employee
2 (
3     EmpID int primary key,
4     Wage varbinary(500) not null        --工资字段,加密后为二进制数据
5 )
6 insert into dbo.employee
7 values(1,encryptbyCert(Cert_id('WageCert'),'5000'))   --使用证书加密

   使用证书解密数据示例代码:

1 select EmpID,CONVERT(varchar(30),DECRYPTBYcert(Cert_id('WageCert'),Wage)) as Wage
2 from dbo.employee                                     --使用证书解密数据

2,密钥加密

  密钥加密我们结合刚才的证书加密进行讲解。

  首先创建一个证书和使用证书的密钥,示例代码:

1 create certificate AdminPwdCert               --创建证书
2 with subject='To Encrypt Admin Password',     --证书主题
3 expiry_date='2014/1/1';                       --证书过期时间
4
5 create symmetric key PwdKey                   --创建对称密钥
6 with algorithm=aes_256                          --使用aes_256加密算法
7 encryption by certificate AdminPwdCert        --使用证书加密

  使用密钥加密和使用证书加密不同的是,使用密钥加密的时候要打开密钥,然后加密数据,最后再关闭密钥。

  示例代码:

 1 open symmetric key PwdKey                     --打开对称密钥
 2 decryption by certificate AdminPwdCert
 3
 4 insert into dbo.Wrokers(WrokerID,Name,Sex,Monery)    --插入加密数据
 5 values(103,'张三','男',encryptbykey(key_guid('PwdKey'),'1234'))
 6
 7 select WrokerID,Name,Sex,convert(varchar(100),DECRYPTBYKEY(Monery)) as Monery    --解密数据
 8 from dbo.Wrokers
 9
10 close symmetric key PwdKey                    --关闭对称密钥

  t-sql中索引和数据加密就到着,这也可能是t-sql系列中最后一篇,以后有新内容的话会补充。

  接下来打算再做一些有关编程的学习笔记整理,希望大家多多关注。。。

   

时间: 2024-10-28 07:42:34

T-Sql(八)字段索引和数据加密的相关文章

SQL Server 数据库索引

原文:SQL Server 数据库索引 一.什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用[索引] 索引允许SQL Server在表中查找数据而不需要扫描整个表. 1.1.索引的好处: 当表没有聚集索引时,成为[堆或堆表] [堆]是一堆未加工的数据,以行标识符作为指向存储位置的指针.表数据没有顺序,也不能搜索,除非逐行遍历.这个过程称为[扫描].当存在聚集索引时,非聚集索引的指针由聚集索引所定义的值组成,所以聚集索引变得非常重要. 因为页面大小固定,所以列越少,所能存储的行就越多.

SQL Server 数据库索引其索引的小技巧_MsSql

一.什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用[索引] 索引允许SQL Server在表中查找数据而不需要扫描整个表. 1.1.索引的好处: 当表没有聚集索引时,成为[堆或堆表] [堆]是一堆未加工的数据,以行标识符作为指向存储位置的指针.表数据没有顺序,也不能搜索,除非逐行遍历.这个过程称为[扫描].当存在聚集索引时,非聚集索引的指针由聚集索引所定义的值组成,所以聚集索引变得非常重要. 因为页面大小固定,所以列越少,所能存储的行就越多.由于非聚集索引通常不包含所有列,所以一般

SQL Server 数据库索引其索引的小技巧

一.什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用[索引] 索引允许SQL Server在表中查找数据而不需要扫描整个表. 1.1.索引的好处: 当表没有聚集索引时,成为[堆或堆表] [堆]是一堆未加工的数据,以行标识符作为指向存储位置的指针.表数据没有顺序,也不能搜索,除非逐行遍历.这个过程称为[扫描].当存在聚集索引时,非聚集索引的指针由聚集索引所定义的值组成,所以聚集索引变得非常重要. 因为页面大小固定,所以列越少,所能存储的行就越多.由于非聚集索引通常不包含所有列,所以一般

Mysql学习笔记(八)索引

原文:Mysql学习笔记(八)索引 PS:把昨天的学习内容补上...发一下昨天学的东西....五月三日...继续学习数据库... 学习内容: 索引.... 索引的优点: 1.通过创建唯一索引,可以保证数据库每行数据的唯一性... 2.使查找的速度明显加快... 3.当使用分组和排序进行查询时,可以缩短时间... 索引的缺点: 1.维护索引需要耗费数据库的资源... 2.索引需要占用磁盘空间... 3.对表进行增删改的时候,由于索引的存在,时间会有所增加... 索引的分类... 普通索引和唯一索引

sql创建表索引 create index()语句

sql创建表索引 create index()语句 mssql server 方法 语法: create [索引类型] index 索引名称 on 表名(列名) with fillfactor = 填充因子值0~100 go 实例 create nonclustered index ix_test_tname --创建一个非聚集索引 on test(tname)  --为test表的tname字段创建索引 with fillfactor = 30 --填充因子为30% go select * f

如何筛选SQL字符串字段中部分值

如果需要筛选SQL字符串字段中部分值,应该怎么做呢?下面就教您筛选SQL字符串字段中部分值的记录的方法,供您参考. 例如有一个KKBH(卡口编号)字段,这是一个字典字段(对应另一个实体表(卡口表)的编号字段).这个字段的值保存所属卡口值域{01,02,03} 本来想到的是通过or来实现,这样需要动态生成SQL语句. 后来想到一个办法用charindex搜索SQL字符串的办法.将所有的要查的卡口编号组成类似'01@02'这样待查字符串.sql查询时通过charindex筛选出在待查SQL字符串里有

sql修改字段内容

  1 2 3 --sql 修改字段内容 UPDATE 表 SET 字段=REPLACE(cast(字段 AS varchar(8000)),'被替换的内容','将要替换成的内容') UPDATE t_newsinfo SET [content]=REPLACE(cast([content] AS varchar(max)),'http://admin.thinkall.net.cn/','http://admin.xkpx.com/')

oracle中复合索引的创建剖析—包含in的三个条件SQL语句复合索引的创建

之前文章中提过复合索引的创建思路: 1 前导列尽可能让更多的核心业务SQL能够使用 2 单个SQL语句索引的前导列尽量选择等值条件做为索引的前导列 这里我们如果在对in的谓词.三个条件的SQL语句复合索引的创建做一些更深入的分析,详细的例子如下: SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle D

在.NET C#中如何选择输出SQL数据库字段到EXCL中

问题描述 在.NETC#中如何选择输出SQL数据库字段到EXCL中 解决方案 解决方案二:通过设置字段是否可见,再查询可见字段,导出数据到dataset里,再导出到excel里解决方案三:能说详细点吗,或者举个例子,我水平不行.解决方案四:查询出你所要的字段到数据集中,再导入到EXCEL