一直就喜欢SQL编程,我觉得用SQL进行编程是一种艺术、是一种享受。用的最熟的可能还是那个SELECT语句吧,因为我每次用它加上WHERE和ADN组成的条件语句都够从多个表中选出需要的数据,那种感觉真是爽。在毕业以前,其实的我都是很少用多表联查,可能当时没有这个项目需求,平时自己练的时候也就毕竟少,加上自己当时就一门心思的想多学几门语言,这方面的功能就花得相对少得多。就拿自己做得一个商业网站来说,也是那样的,几十个表没有那两个之间是有关系的,基本都是单表。直到去了一次广东后,接触到ORACLE后,从几个老数据库操作人员那里才慢慢的学到多表之间的艺术查询,呵呵,夸张了点,不过,确实有那么种感觉。
好久没有用SQL编程了,这主要是由于职业转变的原因吧,有一段时间就主要去搞英语去了,把好多东西都忘了,现在在图书馆借了一本书,又好好的研读了起来,不过,又学到了不少的东西。让自己终于第一次搞懂了什么是DML(Data Manipulate Language数据操作语言)、DDL(Data Define Language数据定议语言)、DCL(Data Control Language数据操纵语言):
DML:数据操纵语言,可以让用户对SQL数据库做五件事:向表中添加数,提取并显示表列中的数据,修改表中的数据及从表中删除语句.以这五条语句组成:INSERT INTO、SELECT、UPDATE、DELETE FROM、TRUNCATE
DDL:是由人们创建、修改并删除数据库中对象(表、视图、索引、域、约束)的语句组成。是一套SQL语句(ALTER、CREATE、DROP、GRANT(向用户或者用户组授予对单独的数据库对象的特定SQL语句访问权限))。
DCL:DML可以让用户对数据库的数据作出改变,但DCL却保护数据不受伤害。是(COMMIT、ROLLBACK、GRANT、REVOKE(从用户或者是用户组撤消以前授予的对单独的数据库对象的特定SQL语句访问权))。(注:GRANT是DLL和DCL的一部份)。
对七种约束(断言(assertions)、域(domains)、检查约束(check constraints)、外键约束(foreign key constrainsts)、主键约束(primary key constraints)、必需数据(required data)和惟一性约束(uniqueness constraints))有了更深的理解:
断言(assertions):(不熟)一个约束是限制用户或应用程序输入到表的列内数据的数据库对象。一个断言是用来检查约束以限制可以数据库作为作为整体输入的数据值的数据库对象。不过,二者都是作为检查条件而指定的。如下示例:
如果想要防止投资者从保值基金中提取多于某一数量的金额,可以使用以下SQL语句创造一个断言:
Create assertion maximum_withdrawal check (inventor.withdrawal_limit>select sum(withdrawal.amount) from withdrawals where withdrawals.investor_id=inventor.id) (注:没有测试,请测试)
域(domains):(不熟)域是表中特定列中合法值的集合。保证用户和应用程序向表列中只能键入合法值。使用语句“CREATE DOMAIN”定义域。如下面示例:
创建一个保证某只能是 a-z 26个小写字母中的任一个,其它的输入都是错误的,可写在一个:(注,我的SQL个人版不能够运行,要报错,从网上查了一下资料,ORACLE可以用,不知道其它的SQL SERVER版是否可用)
create domain letter_check char(1) check (value in ('a','b','c','d','e','f','g','h','i','j','k'))
create table #t
(
id int unique identity(1,1),
letter letter_check
)
检查约束(check constraints):对输入的数据进行合法性检查
外键约束(foreign key constrainsts):保证数据的完整性,与其它表的主键匹配。当删除主键表的数据时,如数据库检查到有其它的表以外键的形式引用该数据,那么就不能够删除该记录,这就保证数据的完整性。
主键约束(primary key constraints):在同一表中,保证该列或者是列对是唯的,这为检索记录提供方便。可被其它表的外键引用。
必需数据(required data):不能让该列的值为空,否则会报错。
惟一性约束(uniqueness constraints):保证该列的唯一性,如自增序列号,这便于用户查询和引用记录。