中级数据库工程师笔记(十四)------ 数据库语言

一、数据库语言概述

  • 数据定义语言DDL

负责数据结构定义与数据库对象定义的语言,由create、alter、drop三个语法组成。

  • 数据操纵语言DML

实现对数据库的基本操作。如,对表中数据的select、insert、delete和update。

1.1 创建表

create table <表名> (<列名><数据类型>[列级完整性约束条件])

列级完整性约束条件有NULL(空)和UNIQUE(取值唯一)。

1.2 修改表

alter table <表名> [add <新列名><数据类型>[完整性约束条件]]

[drop <完整性约束名>]

[modify<列名><数据类型>];

1.3 删除表

drop table <表名>

1.4 创建和删除索引

create [UNIQUE][CLUSTER] INDEX <索引名> 

ON <表名>(<列名>[<次序>]);

说明:

(1)次序:可以选ASC(升序)或DSC(降序),默认为ASC。

(2)UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录。

(3)CLUSTER:表明要建立的索引是聚簇索引,索引项的顺序是与表中记录的物理顺序一致的索引组织。

1.5 删除索引

drop index <索引名>

1.6 视图的创建和删除

creat view 视图名(列表名)

as select 查询字句 [with check option];

创建视图必须遵循如下规定:

(1)子查询可以是任意复杂的select语句,但通常不允许含有order by字句和distinct短语。

(2)with check option表示执行update、insert、delete操作时保证更新、插入、删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)

(3)组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由select子查询目标列的主属性组成。

drop view 视图名

二、数据操作

SQL的数据操纵功能

  • select(查询)
  • insert(插入)
  • delete(删除)
  • update(修改)

2.1 select语句

select [all | distinct] <目标列表达式>

from <表名或视图名>[,<表名或视图名>]

[where<条件表达式>]

[group by <列名1>[having <条件表达式>]]

[order by <列名2>[asc | desc]]

(1)聚集函数:以一个值的集合为输入,返回单个值的函数。

SQL提供了5个预定义的集函数:平均值AVG、最小值MIN、最大值MAX、求和SUM以及计数COUNT。

2.2 HAVING字句

在group by子句后面加一个having子句,对分组设置过滤条件(可以使用聚集函数)。

注意:当元祖含有空值时,记住以下两点:

  • 空值在任何聚集操作中都会被忽视,如求和、求平均值和计数都没有影响。如count(*)是某个关系中所有元祖数目之和,但count(A)却是A属性非空的元祖个数之和。
  • NULL值可以看作分组属性中的一个一般的值。例如,在select A,AVG(B) from R中,当A的属性值为空时,就会统计A=NULL的所有元祖中B的均值。

2.3 字符串操作

对于字符串进行的最通常的操作是使用操作符like的模式匹配,使用两个特殊的字符来描述模式:

  • “%”匹配任意字符串
  • “_”匹配任意一个字符

注意:模式是大小写敏感的。

 

 

2.4 集合操作

在关系代数中用集合的并(UNION)、交(INTSECT)、差(EXCEPT)来组合关系。

三、授权

3.1 主键约束primary key

1、完整性约束条件作用的对象有关系、元祖和列。

2、完整性控制具有的功能:定义功能、检测功能和处理功能。

3、实体完整性(使用primary key字句)

3.2 属性值上的约束

属性值上的约束通过下面关键字进行:

  • not null :不允许空值
  • unique:唯一值
  • check:属性值要满足指定条件

3.3 授权与销权

grant <权限> [,<权限>] ... [ON <对象类型><对象名>]

to <用户>[,用户] ... [with grant option]

revoke <权限> [,<权限>] ... [ON <对象类型><对象名>]

from <用户>[,用户] ...

四、触发器

触发器是SQL server提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发。

  • 触发器经常用于加强数据的完整性约束和业务规则等
  • 触发器与存储过程的唯一区别是触发器不能执行execute语句调用,而是在用户执行transact-SQL语句时自动触发执行

4.1 创建触发器

触发器的定义包含两个方面:

  • 指明触发器的触发事件
  • 指明触发器的执行动作

事件的触发有两个时间:

  • Before:事件发生之前触发
  • After:事件发生之后触发

create trigger <触发器名>[{before | after}]

{[delete | insetr | updateof[列名清单]]}

on 表名

[referencing <临时视图名>]

[when <触发条件>]

begin

<触发动作>

end [触发器名]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值