Sql Server数据库设计高级查询
-------------------------------------第一章 数据库的设计-------------------------------------
软件开发周期:
(1)需求分析
(2)概要设计
(3)详细设计
(4)编码
(5)集成测试
(6)上线运行
(7)后期维护
1,数据库设计步骤:
(1)收集信息
(2)标识对象(确定数据库中有哪些表)
(3)标识对象的属性(确定每个表中的例)
(4)标识对象的关系(两个表的关系)
4种关系:
1对1
1对多
多对1
多对多
2,E-R 实体关系图
矩形 表示,实体集(即表)
椭圆 表示,属性(即列)
菱形 表示,关系集(即关系)
3,数据库的三大范式:(在实际工作中不一定遵循)
衡量数据库设计是否优秀的标准
第一范式:确保每一列的数据不可再分
第二范式:要求每个表只描述一件事
第三范式:要求每一列与主键有直接关系,即确保表中每一列都直接依赖于主键
--------------------------------------第二章 数据库的实现------------------------------------------
1,数据库操作
(1)使用语句创建数据库
create database 数据库名
on primary{ --设置数据库文件
//逻辑名称
name='逻辑名称', --不用带后缀.mdf
//设置初始大小
size=3mb, --sql server2014最小不可小于5mb
//增量
filegrowth=1mb,
//路径包括文件,即物理名称
filename='路径',
//增长的最大值
maxsize='100mb'
}
log on{ --设置事物日志文件
//与上相同
}
例:
create database bbsDB
on primary
(
name='bbsDB',size=3mb,filegrowth=1mb,
filename='E:\SQL Sever\SQL Server 高级编程\数据库\bbsDB.mdf'
)
log on
(
name='bbsDB_log',size=1mb,filegrowth=1mb,
filename='E:\SQL Sever\SQL Server 高级编程\数据库\bbsDB_log.ldf'
)
(2)删除数据库
drop database 数据库名
(3)判断数据库是否存在
1>sysdatabases表:保存在master数据库中,这张表保存了所有数据库的信息
sysobjects表:数据库的系统表
例: 判断数据库是否存在,如果存在输出a,否则输出b
if(exists(select * from sysdatabases where name='students'))
begin
select 'a'
end
else
begin
select 'b'
end
2,表操作
(1)创建表
identity 标识列
primary key 主键
not null 不为空
create table 表名
(
id int not null primary key identity,
name varchar(20) not null,
..................................
)
(2)删除表
drop table 表名
3,约束
(1)主键约束 primary key
(2)检查约束 check
(3)默认值约束 default
(4)主外键约束 foreign key
1>添加约束:
添加主键约束:
alter table 表名
add constraint 主键约束名(规范"pk_"开头)
primary key(列名)
添加检查约束:
alter table 表名
add constraint 检查约束名(规范"ck_"开头) check(表达式);
添加默认值约束
alter table 表名
add constraint 默认值约束名(规范"df_"开头)
default('默认值') for 列名
添加主外键约束:
alter table 表名(外键表)
add constraint 外键约束名(规范"fk_"开头)
foreign key(外键名)
references 主键表名 (主键列名)
注:
也可同时给一个表添加多个约束
2>删除约束
alter table 表名
drip constraint 约束名
4,使用命令创建用户和删除用户的6步
(1)创建:
第一步:创建sqlserver登录用户
exec addlogin '登录名','密码'
第二部:创建对应数据库的用户
exec grantdbaccess '登录名','用户名'
第三步:添加用户对指定表的操作权限
grant insert,upadat,select on 表名 to 用户名
(2)删除
第一步:撤销权限
revoke 权限 on 表名 from 用户名
第二步:删除数据库用户
exec sp_dropuser '用户名'
第三步:删除登录账号
exec sp_droplogin '登录名'
---------------------------------------------第三章 T-SQL编程-------------------------------------------------
1,局部变量(自定义变量)
declare @变量名 数据类型 。。。。后面可定义多个
2,变量的赋值
(1)set赋值
set @变量=值
(2)select赋值
select @变量=列名 from 表名
注:这种赋值方式只适合用户查到的数据只有一条时,如果查询到的结果为多条语句,则给变量赋的值是最后一条语句的值
3,输出变量
(1)print 变量:以文本的方式输出
(2)select 变量:以表元素的方式输出
4,全局变量
常用:
@@error 获取上一条语句的错误号
@@identity 获取最后一次产生的标识值
@@rowcount 受上一条语句所受影响的行数
不常用:
@@language 当前使用的语言名称
@@max_connections 可以创建的同时连接的最大数目
@@servername 本地服务器的名称
@@servicname 本地计算机上的SQL服务的名称
@@timeticks 当前计算机上每刻度的微秒数
@@version 当前sql server的版本号
5,逻辑控制语句
if(条件)
begin
end
else
begin
end
例:
declare @username varchar(10)
set @username='许超'
if(@username='超')
begin
print '呵呵'
end
else
begin
print '呜呜。。。'
end
6,while循环语句
while
begin
end
例:
declare @i int
set @i=0;
while(@i<10)
begin
print @i
set @i=@i+1
end
7,case ...end 多分支结构
case
when 条件1 then 结果1
when 条件2 then 结果2
else
其他情况
end
注:case...end 不能单独使用必须嵌套在sel语句中使用
8,批出理
关键字:go
---------------------------------------第四章 高级查询-------------------------------------------
1,子查询的特点:
(1)当子查询返回的值只有一个时可以使用比较运算符,当子查询的值不只一个时要用in 或not in
(2)子查询中查询的列只能是一列
(3)子查询中的类型要和条件的类型一致
(4)子查询可以应用在 insert,update,select,delete 语句中
(5)如果子查询中使用了order by 就必须包含top关键字
2,简单子查询
例:select * from stuinfo where scoreid=(select id from stuscore where score=60)
3,in和not in 子查询
例:select * from stuinfo where scoreid in(select id from stuscore where score>60)
例:select * from stuinfo where scoreid not in(select id from stuscore where score>60)
4,exists和not exists
检查查询的数据是否存在,存在返回true,不存在返回false
用法:
exists(语句)
not exists(语句)
-------------------------------------------第五章 事物、索引和视图-------------------------------------
1,事物
(1)事物作为一个整体,要么都执行,要么都不执行。
1>开始事物
begin tran (或begin transaction)
2>提交事物
commit tran
3>回滚事物
rollback tran
(2)事物的属性:
原子性:是一个整体,不可再分,要么都执行,要么都不执行
一致性:事物开始之前和事物结束之后,数据的状态保持一致
隔离性:对同一个数据的操作,事物之间是彼此隔离的,要么A先执行,要么B先执行
永久性:事物对数据的影响是永久的
2,索引
(1)分类:
1>聚集索引:(主键索引属于聚集索引)
特点:
*每个表只能有一个聚集索引
*索引页的顺序和数据页的数据是一致的
*创建主键会自动创建聚集索引
*当查询范围值时特别有效
2>非聚集索引
每个表最多可健249个,因为没个表最多可以有249个列
选择索引列的标准:
*频繁作为查询条件的列
*唯一值较多的列
*不经常被更新的列
(2)使用SQL语句创建索引
非聚集索引:
create index 索引名称 on 表名(列名1,列名2,.....)
聚集索引:
create clustered index 索引名称 on 表名(列名1,列名2,.....)
3,视图
创建视图:
create view 名称(一般以vi_开头)
as
内容
使用视图:
select * from 视图名
--------------------------------------------第6章 存储过程------------------------------------------------
(一),存储过程
1,存储过程的优点:
(1)执行速度更快
(2)允许模块化程序设计
(3)提高系统安全性
(4)减少网络流通量
2,常见的系统存储过程
sp_database 显示当前系统中的所有数据库信息
sp_helpdb 显示所有或指定数据库的详细信息
sp_renamedb 修改数据库名称 例:sp_renamedb '旧名','新名'
sp_tables 显示当前数据库下所有表的信息 例:sp_tables 或 sp_tables '表名'
sp_columns 显示某个表列的信息 例:sp_columes '表名'
sp_help 查看某个表的所有信息 例:sp_help 或 sp_help '表名'
sp_helpconstraint 查看某个表的约束 例:sp_helpconstraint '表名'
sp_helpindex 查看某个表的索引 例:sp_helpindex '表名'
sp_stored_procedures 显示当前数据库下的所有存储过程 例:sp_stored_procedures
sp_password 修改当前登录用户的密码 例:sp_password '旧密码','新密码'
sp_helptext 显示默认值、未加密的存储过程、用户定义的存储过程、触发器或试图的实际文本 例:sp_helptext
3,自定义存储过程(一般以proc_开头)
语法:
create procedure 名称
参数1,参数2,......输出参数 output
as
内容
(二),触发器
在执行增删改查时会自动触发
1,优点:
(1)触发器会自动执行
(2)可以对表进行级联修改
(3)可以实现强制约束
2,两个重要的表
inserted表:存在内存中的临时表,存放最新插入的数据,修改后的数据在inserted表中
deleted表:临时保存了删除的记录,存放修改前的数据
3,触发器的使用
插入触发器:insert
修改触发器:update
例:
插入的触发器:
create trigger 触发器名 on 表名
for insert
as
declare @id int,@count int
select @id=scoreid from inserted
update stuscore set score=20 where id=@id
修改的触发器:
create trigger 触发器名 on 表名
for update
as
declare @id int
select @id=scoreid from deleted
update stuscore set score=50 where id=@id
删除存在的触发器:
drop trigger 触发器名
Sql Server数据库设计高级查询的更多相关文章
- SQL Server数据库(高级查询)
高级查询 1.连接查询 有外键关系的两张表,通过关系一次查询两张表 (1)select * from 表名,表名 --- 直接使用出现笛卡尔积,两个表数据一一对应,查询出的结果数目是两个表的行的乘积, ...
- 【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》
一.课程笔记 1.1 软件开发周期 (1)需求分析阶段 分析客户的业务和数据处理需求. (2)概要设计阶段 设计数据库的E-R模型图,确认需求信息的正确和完整. /* E-R图:实体-关系图(Ent ...
- SQL Server 数据库设计、命名、编码规范
https://blog.csdn.net/songguozhi/article/details/5858159 SQL Server 数据库设计.命名.编码规范
- 如何使用SQL SERVER数据库跨库查询
SQL Server中内置了数据库跨库查询功能,下面简要介绍一下SQL Server跨库查询.首先打开数据源码:OPENDATASOURCE不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分 ...
- SQL Server 数据库设计
一.数据库设计的必要性 在实际的软件项目中,如果系统中需要存储的数据量比较大,需要设计的表比较多,表与表之间的关系比较复杂,那我们就需要进行规范的数据库设置.如果不经过数据库的设计,我们构建的数据库不 ...
- SQL server 数据库基础语句 查询语句
这一章要学习查询语句 我看car这一数据 我们就开始打上 select *from car 条件修改 update 表名 set 列名1=值1 where 列名2=值2 //当列名2=值2时 ...
- SQL SERVER数据库多条件查询
例如:查询挂号超500的数据select CONVERT(VARCHAR(10),DGH,23),COUNT(*) from yxhis2017..VTBMZGHMX2017 where bth=0 ...
- SQL Server数据库 优化查询速度
查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...
- 查询Sql Server数据库对象结构
查询Sql Server数据库对象结构 查询数据库 查询架构 查询表 查询列 查询存储过程 查询视图 1.查询某一服务器下所有数据库 select t.[name] as 数据库 from sys.d ...
随机推荐
- ExtJS4.x动态加载js文件
动态加载js文件是ext4.x的一个新特性,可以有效的减少浏览器的压力,提高渲染速度.如动态加载自定义组件 1.在js/extjs/ux目录下,建立自定义组件的js文件. 2.编写MyWindow.j ...
- 解决获取IP地址时出现“在一个非套…
今天单位的一台机器在用IPCONFIG/RENEW时遇到了这个问题,上网查了一下,网上的版本在对XP不太好用,网上的版本如下: 1.从注册表中备份以下项:(当然也可以用Erunt备份整个注册表)HKE ...
- 代码初始化 故事板初始化 xib初始化总结
对象的初始化有三种方式 // 代码创建 - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { ...
- OC——NSDictionary和NSMutableDictionary
//初始化 NSString *key1 = @"key1"; NSString *key2 = @"key2"; NSString *key3 = @&quo ...
- mysql插入返回当前生成的主键
1:sql中需要添加属性 keyColumn="base_price_id" keyProperty="basePriceId" useGeneratedKe ...
- 「北京」京东 JD.COM 招聘中/高级前端工程师
工作职责: 负责前端界面的前端构建,各类交互设计与实现: 前端样式和脚本的模块设计及优化: 协同后台开发人员完成项目: 职位要求: 专科及以上学历,2年以上前端重构与脚本开发经验,计算机或相关专业者优 ...
- Ecsotre 参考
2.dbschema dbschema 字段属性 ‘type’ => ‘int unsigned’, //字段类型 ‘extra’ => ‘auto_increment’,//定义自增 ‘ ...
- cocos2d-x中的Box2D物理引擎
在Cocos2d-x中集成了2个物理引擎,一个是Chipmunk,一个是Box2D.前者是用C语言编写的,文档和例子相对较少:Box2D是用C++写的,并且有比较完善的文档和资料.所以在需要使用物理引 ...
- iOS中判断设备系统版本
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- UVa230 Borrowers (STL)
Borrowers I mean your borrowers of books - those mutilators of collections, spoilers of the symmet ...