博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MSSQL 基础知识001
阅读量:5223 次
发布时间:2019-06-14

本文共 2870 字,大约阅读时间需要 9 分钟。

数据库概述:

DBMS(Database Management System,数据库管理系统)和数据库。

平时谈到“数据库”可能有两种含义:MSSQLServer、Oracle等某种DBMS;存放一堆数据表的一个分类( Catalog )。

不同品牌的DBMS有自己的不同的特点:

  MySQL(速度很快,适合对数据要求并不是十分严谨的地方,去掉了很多中小型企业中不常用的功能)

  MSSQLServer(与.net结合很好,只能运行在windows平台下,大数据量、大交易量表现并不十分好,功能比MySQL多)

  DB2(大型)、Oracle(大型)、Access(文件)、 SQLite(极其轻量级数据库) 、Sybase等。对于开发人员来讲,大同小异

  SQL(语言)<>SQLServer<>MSSQLServer。最常见的错误。

  除了Access、SQLServerCE、SQLite等文件型数据库之外,大部分数据库都需要数据库服务器才能运行。学习、开发时是连接本机的数据库,上线运行时是数据库运行在单独的服务器。

1:数据库附加时候报错:拒绝访问:数据库文件权限不够

2:SQL Server数据库身份验证

 Windows身份验证:以当前登录本机的账户去登陆SQL Server,若有权限,则登录;和本机有多少实例账户无关

                            在企业中同一个域名中的电脑都可以使用Windows身份验证登录SQL Server

 SQL Server账户验证:用你在SQL Server中自己建的用户名和密码进行登录,和Windows没有关系

1 create database dbone 2 on primary 3 ( 4     name='dbone', 5     filename='C:\dbone.mdf', 6     size=10MB; 7     maxsize=1000M, 8     filegrowth=10% 9  10 )11 log on12 (13     name='dbone_log',14     filename='C:\dbone_log.ldf',15     size=2MB;16     maxsize=100M,17     filegrowth=10M18 )
Create DB Demo

3:向自动编号插入值:

 1):必须把列名写全

 2):必须设置IDENTITY_INSERT为ON

      语法:set IDENTITY_INSERT 表名 on

4:数据删除

 truncate table 表名的作用与Delete from  表名一样

 1):truncate语句非常高效,由于truncate操作采用按最小方式来记录日志,所以效率非常高,

       对于数百万条数据使用truncate删除只要几秒钟,而使用Delete则可能耗费几小时。

 2):truncate语句会把表中的自动编号重置为默认值。

 3):truncate语句不会触发Delete触发器

5:保证表中的记录不能重复,增加主键约束。

6:约束--保证数据完整性

 非空约束;主键约束[PK];唯一约束[UQ];默认约束[DF];检查约束[CK];外键约束[FK]

 保证列的记录必须唯一,唯一约束【唯一约束,要求表中的列必须唯一,只能有一个null值】

7:事务(Transaction)

事务:同生共死

 指访问并可能更新数据库中各种数据项的一个程序执行单元(uint)--也就是由多个sql语句组成,必须作为一个整体执行

这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行

语法步骤:

 开始事务:begin transaction

 事务提交:commit transaction

 事务回滚:rollback transaction

判断某条语句执行是否出错:

 全局变量@@error

 @@error只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计

 例如:set @errorSum=@errorSum+@@errorSum

 set implicit_Transactions{on|off}} --隐身事务

 
8:存储过程---就像数据库中运行方法(函数)

 和C#里的方法一样,由存储过程名/存储过程参数组成/可以有返回结果

 优点:

  1.执行速度更快---在数据库中保存的存储过程语句都是编译过得

  2.运行模块化执行---类似方法的复用

  3.提高系统安全性---防止SQL注入

  4.减少网络流通量---只要传输存储过程的名称

系统存储过程:由系统定义,存放在master数据库中,名称以"sp_"开头或者"xp_"开头

自定义存储过程:由用户在自己的数据库中创建的存储过程usp,自定义的存储过程可以以usp_开头

1 --定义存储过程的语法 2     CREATE  PROC[EDURE]  存储过程名  3     @参数1  数据类型 = 默认值 OUTPUT, 4     @参数n  数据类型 = 默认值 OUTPUT 5     AS 6       SQL语句 7 --参数说明: 8  --参数可选 9  --参数分为输入参数、输出参数 10  --输入参数允许有默认值11 12 EXEC  过程名  [参数]13 14 创建存储过程Procedure语法
存储过程的语法

9:触发器

After触发器:

  在语句执行完毕之后触发

  按语句触发,而不是所影响的行数,无论所影响为多少行,只触发一次。

  只能建立在常规表上,不能建立在视图和临时表上。(*)

  可以递归触发,最高可达32级。

  update(列),在update语句触发时,判断某列是否被更新,返回布尔值。

instead of触发器:

  用来替换原本的操作

  不会递归触发

  可以在约束被检查之前触发

  可以建在表和视图上(*)

1 CREATE TRIGGER triggerName ON 表名 2     after(for)(for与after都表示after触发器)   3     |instead of 4  UPDATE|INSERT|DELETE(insert,update,delete) 5  AS 6  begin 7  … 8  end 9 10 触发器Trigger语法
Trigger语法

触发器使用建议:

 1.尽量避免在触发器中执行耗时操作,因为触发器会与SQL语句认为在同一个事务中。(事务不结束,就无法释放锁)

 2.避免在触发器中做复杂操作,影响触发器性能的因素比较多(如:产品版本、所使用架构等等)

    要想编写高效的触发器考虑因素比较多(编写触发器容易,编写复杂的高性能触发器难!)。

 3.触发器编写时注意对多行触发时的处理。(一般不建议使用游标,性能问题!)

转载于:https://www.cnblogs.com/DrHao/p/5193566.html

你可能感兴趣的文章
zabbix电话告警V1
查看>>
eclipse把局部变量提为全局变量的快捷键是什么
查看>>
《研磨设计模式》——可配置的简单工厂
查看>>
为网站添加免费的访问计数统计和加入微博
查看>>
ubuntu root用户 默认密码
查看>>
对百度搜索法的分析评价
查看>>
网络知识之ipset
查看>>
Credit Memo和Debit Memo在AR以及AP中的概念比较
查看>>
在Azure上部署Sqlserver网络访问不了的问题
查看>>
hdu 1561 The more, The Better(树形dp入门)
查看>>
最小度限制生成树模板
查看>>
树状数组总结
查看>>
3.shell编程-文件查找之find命令
查看>>
SourceTree windows免注册免登陆使用方法
查看>>
Android Studio 快捷键和常用技巧汇总
查看>>
POJ 1195 Mobile phones(二维树状数组)
查看>>
GridView 72般绝技 (http://blog.csdn.net/21aspnet/)
查看>>
win7创建共享给windows和linux机器
查看>>
java RE Validation常用
查看>>
How to change MAC address in windows 7
查看>>