SQL Senior

SQL Senior Part

一、        数据库的设计

1、  数据库设计的三大范式

11NF:原子性;

22NF:除了满足1NF外,每一列都依赖于主键;

33NF:除了满足1NF2NF外,确保每列都和主键有直接关系;

但是数据库设计的三大范式要和数据库性能结合起来,适当允许少量冗余,才是最合适的数据库设计方案;

2、  设计数据库的步骤

1)  需求分析

2)  概要设计

3)  详细设计

3、  绘制E-R

1)  实体-关系模型

E-R图是实体关系图,是用来清晰直观地表示实体与实体之间的关系的逻辑图;

椭圆属性;

矩形实体;

菱形关系;

箭头---指向引用的实体;

直线属性与实体的集;

2)  如何将E-R图转化成表

1)  将各实体转化成表

2)  实体的属性转化成列名

3)  关系转化成主外键

4)  主键设为主键,表示标识列

4、  数据规范化

1)  设计问题:为了避免设计问题,应尽可能避免信息重复、更新异常、插入异常、删除异常;

2)  规范设计:1中介绍的三大范式

3)  规范化与性能的关系

不能仅仅注重三大范式,要适当增加数据冗余,让规范化与性能保持一个最优状态,以达到最佳的设计方案;

二、        数据库的实现

1、  设计中常用的基本SQL语句

Insert

Delete

Update

Select

2、  使用SQL语句创建和删除数据库

1)  创建数据库

If exists (select * from sysdatabases where name =’db_wanglei’)

Drop  database  db_wanglei

Go

 

Create  database  db_wanglei

On primary

(

            Name = ‘db_wanglei_data’,

            Filename=’D:/database/db_wanglei_data.mdf’,

            Growth=15%

)

Log on

(

            Name=’db_wanglei_logData’,

            Filename=’D:/database/db_wanglei_logData’,

            Growth=15%

)

Go

 

2)  删除数据库

If  exists (select  *  from  sysdatabase  where  name =’db_wanglei’)

Drop  database  db_wanglei

go

3、  使用SQL语句创建和删除表

1)       创建表

If  exists (select  *  from sysobjects  where name =’userInfo’)

Drop  table userInfo

go

Create  userInfo

           userId  int  primary key  identity (1,1)  not  null,

           username  varchar(20) not null,

    userPwd   varchar(20) not null,

           userEmail           varchar(20) not null,

           userTelephone varchar(20) not null

 

3)  删除表

If  exists (select  *  from sysobjects  where name =’userInfo’)

Drop  table userInfo

go

4、  使用SQL语句创建和删除约束

1)  创建约束

Alter  table  tableName  add  constraint  ConstraintName  constraintType  contraintDesciption

Example:

---primary key constraint

Alter   table userInfo

Add constraint PK_userId primary key (userId)

---unique constraint

Alter  table  userInfo

Add  constraint  UQ_userId  unique (userId)

--default constraint

Alter  table userInfo

Add  constraint DF_Address  default (‘北京海淀’)

--check constraint

Alter  table  userInfo

Add  constraint  CK_userEmail  check(userEmail like ‘%@%’)

--foreign key constraint

Alter  table diaryInfo

Add  constraint  FK_userInfo forerign key (diaryUid) references userInfo(userId)

 

2)  删除约束

Alter  table  tableName 

Drop  constraint  constraintName

5、  使用SQL创建登陆

1)  创建登陆账户

Exec sp_grantlogin ‘window域名/账户

Exec sp_addLog  账户名’ ,‘密码’

 

2)  创建数据库用户

Exec sp_grantdbaccess ‘登陆账户’,’数据库用户

 

3)  向数据库用户授权

Grant 权限[on 表名] to 用户

 

三、        T-SQL编程

1、  变量的使用

1)  局部变量

Declare  @userName  varchar (20)

Set @userName =’wanglei’

Select  * from  userInfo  where username = @userName

Go

注:局部变量赋值都要使用set关键字来设置;

2)  全局变量

全部变量通常是系统变量,无需声明,可以直接使用;

@@error—错误号

 

@@identity –最后一次插入的标识列值

 

@@Language –返回使用语言的名称

 

@@Max_connections –可以创建的同时连接的最大数目

 

@@RowCount –受上一个SQL语句影响的行数

 

@@ServerName ---本地服务器名称

 

@@Timeticks—当前计算机上每刻度的微妙数

 

@@version ---当前使用SQL版本信息

 

@@Transcount ---当前打开的事务数

 

 

2、  输出语句的编写

Print  toBeOutString

 

3、  批处理

可以提高程序的执行效率,结束标志是Go

4、  逻辑控制语句的编写

1)  IF-ELSE

在这里和Java中的if-else语法基本一样,只不过原来的括号换成了begin-end;而且功能一样。

 

 

2)  WHILE

While 是用于执行循环操作,和Java中的类似;

 

3)  CASE

 

注:case后面必须有end结束,而且在两个when之间不能有逗号;

四、        高级查询

1、  简单子查询

 

注:子查询和运算符连用时,必须保证子查询的返回值不能超过一个;

2、  INNOT IN子查询

In后面加的是范围,是一组值的罗列,而后面紧跟的这组值不仅仅是int类型,什么类型都可以;

varchar类型举例:

 

not in 则恰恰相反是查询不在罗列的值之内的数据;

 

注:in后面的子查询可以返回多条记录而不像比较运算符;

3、  EXISTSNOT EXISTS子查询

EXISTS NOT EXISTS多结合if-else进行逻辑设计,判断是否存在,返回类型为bit类型;

If  exists (查询条件)

---查询到执行代码

Else

---未查询到所执行的代码

 

五、        事务、索引以及视图

1、  事务

1)  为什么需要事务

银行转账是个例子,由此可见事务的重要性,不容忽视;

2)  什么是事务

我理解的事务就是“一荣俱荣 一损俱损”,多条语句要么执行,要么回滚;

3)  事务的特征

原子性

一致性

隔离性

持久性

4)  如何创建事务

Begin  transaction

---事务代码

事务的例子:

 

2、  索引

1)  为什么要使用索引

之所以使用索引,是因为索引能够在查询时高效执行,就如同我们在使用新华字典在查找字一样,快速,提高数据库的性能!

2)  什么是索引

索引就是在数据库中,某个表中一列或者若干列值的集合和相应的指向表中物理标示这些物理标示这些值的数据页的逻辑指针清单,使用索引可以提高执行效率,改善数据库的性能;

换句话说,索引就是数据查询的路由;而索引页就是指类似于字典的目录页,它是用来存放行的地址指针;

3)  如何创建索引

索引的分类:

     主键索引:当用户在定义一个主键后,会自动创建一个主键索引;

     唯一索引:不允许有两行是相同的索引值;

     聚集索引:它是指表中物理顺序和逻辑顺序相同,而且一个表只能包含一个聚集索引;

     非聚集索引:它和聚集索引的区别是一个表中可以创建多个;

4)  如何创建索引

Create  index  index_name

On  table column_name

 

3、  视图

1)  为什么使用视图

使用视图便于查看一个表或多个表的数据,而且便于数据的部分隐藏;

2)  什么是视图

视图就是一张虚拟表,它通常是由一张或多张数据库表的某些列和在一起创建的;便于直观地将数据展示给用户,开发数据更容易,便于应用程序的维护,限制数据的检索更容易;

3)  如何创建视图

Create   view

As

Select 语句

 

六、        存储过程

1、  什么是存储过程

存储过程就相当于C语言中的函数,便于结构化执行,模板化设计大大提高了执行的效率,减少网络流量(请求时只需要发送一条请求函数调用的指令就可以,而不需要一条一条将数据发送到服务器端),安全机制高(类似于Java里定义的封装一样,这样可以调用某个存储过程直接执行某项功能,而不需要了解其内部的具体实现)。

2、  常用的系统存储过程

Exec sp_databases

Exec sp_helpdb

Exec sp_renamedb

Exec sp_tables

Exec sp_password

Exec sp_stored_procedures

 

3、  自定义存储过程

1)  创建不带参数的存储过程

 

2)  创建带参数的存储过程

 

3)  创建带返回值的存储过程

 

七、        触发器

1、  为什么需要触发器

在多表之间执行特殊的业务规则或保持复杂的数据逻辑关系。

2、  触发器的定义

它是一种特殊的存储过程,同时也具有事务的功能,它能够在对表进行插入、更新或删除操作时自动执行的存储过程;

3、  如何创建触发器

1)  创建INSERT触发器

当向表中插入数据时触发,自动执行触发器所定义的sql语句;

2)  创建DELETE触发器:当对表执行delete操作时,自动执行触发器所定义的sql语句;

3)  创建UPDATE触发器:当更新表中记录时触发,自动执行触发器所定义的sql语句;

八、        锁机制

单独拿出来和大家共享;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值