创建示例数据库

USE master;
GO
IF DB_ID (N'mytest') IS NOT NULL
DROP DATABASE mytest;
GO
CREATE DATABASE mytest;
GO
USE mytest;
GO
IF OBJECT_ID(N'dbo.Orders') IS NOT NULL
DROP TABLE dbo.Orders;
GO
CREATE TABLE dbo.Orders
(
ProductID INT NOT NULL,
MadeFrom CHAR(20),
Sales MONEY NOT NULL
);

删除数据库

use master -- 设置当前数据库为master,以便访问sysdatabases表
go
if exists(select * from sysdatabases where name='stuDB')
drop database stuDB
go
或者
IF DB_ID (N'mytest') IS NOT NULL
DROP DATABASE mytest;

创建数据表

标准语法
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
); 示例
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);

删除表包含结构

Drop table tablename

视图

create view  视图名字
as
查询代码 demo:
create view view_user
as
select id from user
go
/*以上为创建一个视图,视图里面存储的是user表的ID列*/ /*删除视图*/
if exusts(select * from sysobjects where name='视图名字')/*如果数据库中存在这个视图,就删除该视图,查不查询随便你*/
drop view 视图名字 /*执行删除视图语法*/

视图注意事项:注意事项:
1.一个视图可以嵌套另一个视图,但最后不要超过3层
2.视图定义中的select语句不能包括下列内容
*order by排序子句,除非在select语句中带有一个top子句
*into关键字
*引用临时表或表变量

存储过程

存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。

存储过程的好处:
1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。
2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。
3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。

示例:

--查询存储过程

IF OBJECT_ID (N'PROC_SELECT_STUDENTS_COUNT', N'P') IS NOT NULL
DROP procedure PROC_SELECT_STUDENTS_COUNT;
GO
CREATE procedure PROC_SELECT_STUDENTS_COUNT
AS
SELECT COUNT(ID) FROM Students
GO --执行 EXEC PROC_SELECT_STUDENTS_COUNT

带参数

--查询存储过程,根据城市查询总数

IF OBJECT_ID (N'PROC_SELECT_STUDENTS_BY_CITY_COUNT', N'P') IS NOT NULL
DROP procedure PROC_SELECT_STUDENTS_BY_CITY_COUNT;
GO
CREATE procedure PROC_SELECT_STUDENTS_BY_CITY_COUNT(@city nvarchar(50))
AS
SELECT COUNT(ID) FROM Students WHERE City=@city
GO -- 执行 EXEC PROC_SELECT_STUDENTS_BY_CITY_COUNT N'Beijing'

带通配符

--3、查询姓氏为李的学生信息,含通配符

IF OBJECT_ID (N'PROC_SELECT_STUDENTS_BY_SURNNAME', N'P') IS NOT NULL
DROP procedure PROC_SELECT_STUDENTS_BY_SURNNAME;
GO
CREATE procedure PROC_SELECT_STUDENTS_BY_SURNNAME
@surnName nvarchar(20)='李%' --默认值
AS
SELECT ID,Name,Age FROM Students WHERE Name like @surnName
GO --执行 EXEC PROC_SELECT_STUDENTS_BY_SURNNAME
EXEC PROC_SELECT_STUDENTS_BY_SURNNAME N'李%'
EXEC PROC_SELECT_STUDENTS_BY_SURNNAME N'%李%'

带输出参数

--根据姓名查询的学生信息,返回学生的城市及年龄

IF OBJECT_ID (N'PROC_SELECT_STUDENTS_BY_NAME', N'P') IS NOT NULL
DROP procedure PROC_SELECT_STUDENTS_BY_NAME;
GO
CREATE procedure PROC_SELECT_STUDENTS_BY_NAME
@name nvarchar(50), --输入参数
@city nvarchar(20) out, --输出参数
@age int output --输入输出参数
AS
SELECT @city=City,@age=Age FROM Students WHERE Name=@name AND Age=@age
GO --执行
declare @name nvarchar(50),
@city nvarchar(20),
@age int;
set @name = N'李明';
set @age = 20;
exec PROC_SELECT_STUDENTS_BY_NAME @name,@city out, @age output;
select @city, @age;

存储过程实现增删改

1、新增demo

--1、存储过程:新增学生信息

IF OBJECT_ID (N'PROC_INSERT_STUDENT', N'P') IS NOT NULL
DROP procedure PROC_INSERT_STUDENT;
GO
CREATE procedure PROC_INSERT_STUDENT
@id int,
@name nvarchar(20),
@age int,
@city nvarchar(20)
AS
INSERT INTO Students(ID,Name,Age,City) VALUES(@id,@name,@age,@city)
GO --执行 EXEC PROC_INSERT_STUDENT 1001,N'张三',19,'ShangHai'

2、修改

--修改学生信息

IF OBJECT_ID (N'PROC_UPDATE_STUDENT', N'P') IS NOT NULL
DROP procedure PROC_UPDATE_STUDENT;
GO
CREATE procedure PROC_UPDATE_STUDENT
@id int,
@name nvarchar(20),
@age int,
@city nvarchar(20)
AS
UPDATE Students SET Name=@name,Age=@age,City=@city WHERE ID=@id
GO --执行 EXEC PROC_UPDATE_STUDENT 1001,N'张思',20,'ShangHai'

3、删除

--根据id删除记录

IF OBJECT_ID (N'PROC_DELETE_STUDENT_BY_ID', N'P') IS NOT NULL
DROP procedure PROC_DELETE_STUDENT_BY_ID;
GO
CREATE procedure PROC_DELETE_STUDENT_BY_ID
@id int
AS
DELETE FROM Students WHERE ID=@id
GO --执行 EXEC PROC_DELETE_STUDENT_BY_ID 1001

存储过程实现分页

-- ROW_NUMBER分页查询

IF OBJECT_ID (N'PROC_SELECT_BY_PAGE', N'P') IS NOT NULL
DROP procedure PROC_SELECT_BY_PAGE;
GO
CREATE procedure PROC_SELECT_BY_PAGE
@startIndex int,
@endIndex int
AS
SELECT * FROM (SELECT ID,Name,Age,City,ROW_NUMBER() OVER(ORDER BY ID DESC) AS RowNumber FROM Students) AS Temp
WHERE Temp.RowNumber BETWEEN @startIndex AND @endIndex
GO --执行 EXEC PROC_SELECT_BY_PAGE 1,10
--使用TOP分页

IF OBJECT_ID (N'PROC_SELECT_BY_PAGE_WITH_TOP', N'P') IS NOT NULL
DROP procedure PROC_SELECT_BY_PAGE_WITH_TOP;
GO
CREATE procedure PROC_SELECT_BY_PAGE_WITH_TOP
@pageIndex int,
@pageSize int
AS
SELECT TOP(@pageSize) * FROM Students
WHERE ID >=(SELECT MAX(ID) FROM (SELECT TOP(@pageSize*(@pageIndex-1) + 1) ID FROM Students ORDER BY ID) AS Temp)
GO --执行 EXEC PROC_SELECT_BY_PAGE_WITH_TOP 1,2

事务

事务是什么?事务关键在与其原子性。原子性概念是指可以把一些事情当作一个执行单元来看待。从数据库角度看待。他是指应该全部执行或者全部不执行一条或多条语句的最小组合。当处理数据时候经常确保一件事发生另一件事也随之发生。或者二件事都不发生。实际上可能达到程度是有几十件事情或者更多的事情都必须一起发生或者都不发生。来看一个一个经典事例。这个事例各大书籍讲事务都有。就是你去银行转帐给朋友。转了100元sql如下:你的帐号扣了100元,你朋友帐号加了100元。看起来很完美。其实有个BUG存在,你的帐号被扣100元后在执行你朋友帐号加100元时候,数据出现错误,没有添加进去。

ACID事务

如果你的系统被设计为使用ACID事务,则不会出现上面那种情况。ACID事务

1.原子性:事务会全部执行,要么全部不执行。

2.一致性:需要遵循所有约束以及其他数据库完整性规则,并且完全的更新所有相关的对象(数据和索引页)

3.隔离性:每一个事务与其他任何事务完全的隔离。一个事务动作不会受其它事务动作干扰。

4.持久性:完成事务后,它的作用结果永久保存在系统内部。数据是“安全的”。这是指不会在停电或者系统故障或设备故障不会导致数据写入一半的情况发生。

事务简单操作简介

你需要一种办法确保第一条SQL语句执行,第二条也跟着执行。实际上不存在这样一种可完全控制可能。从硬件故障到违反数据完整性规则简单事情。都有可能发生错误。然而幸运的是;有一种可能达到相同的目地方法-基本忘记从前发生什么事。至少可以强制这个概念:如果某件事没有发生,那什么不会发生,至少事务的作用范围内部就是这样。

如何标志标志是开始和结束,回滚

BEGIN TRAN : 设置为起点

COMMIT TRAN :让事务成为数据中心永久的,不可逆的一部分

ROLLBACK TRAN:不考虑所有更改,本质上想说忘记以前发生的一却

SAVE TRAN:创建一个特定标识符,只允许部分回滚

BEGIN TRAN 事务开始很好理解,它唯一目的就是表示一个执行单元开始。高级部分不讨论了,因为面向DBA的高级特性。

COMMIT TRAN  提交事务一个终点,当发出COMMIT TRAN命令时候,可以认为该事务是持久性

ROLLBACK TRAN 每当考虑ROLLBACK TRAN 时候表示。表示该执行单元有错误。或者回到起点重新开始。(忘记过去,重新开始)

SAVE TRAN 保存事务创建书签。创建书签在数据回滚时候,回滚到每个书签上。记住ROLLBACK在回滚会清除所有书签。如果保存了5个书签,一旦执行ROLLBACK,5个书签全部清空。

demo

 Create Procedure  MyProcedure
AS
Begin
Set NOCOUNT ON;
Set XACT_ABORT on; --这句话非常重要 Begin Tran --开始事务 insert into userinfo(username,userpwd,RegisterTime) values('admin','admin',getdate())
insert into userinfo(username,userpwd,RegisterTime) values('jack','jack',getdate()) Commit Tran --提交事务
End

注意:

SET XACT_ABORT ON是设置事务回滚的!
当为ON时,如果你存储中的某个地方出了问题,整个事务中的语句都会回滚
为OFF时,只回滚错误的地方

欢迎关注我的微信公众号:互联网碎片搜集

SQl常用语句总结(持续更新……)的更多相关文章

  1. SQL常用短语小记-持续更新

    创建链接服务器语句 --//创建链接服务器[在本地服务器创建] exec sp_addlinkedserver '链接服务器名称','','SQLOLEDB','远程服务器地址' -- exec sp ...

  2. sql常用语句备忘录随时更新

    一.查询最新的一条数据 SELECT * FROM Table a WHERE NOT EXISTS (SELECT FROM Table b WHERE a.Date>b.Date) 二.查询 ...

  3. Hive 常用语句(持续更新中)

    1)按包含关键字在指定库中查找表名:show tables in dw '*_fab_*';   2)查看和删除自己hdfs系统所用的空间和文件(与shell命令合用):hive命令行下: --查看仓 ...

  4. MySQL常用语句汇总--持续更新(2017-08-10)

    修改表的字段结构: 表:mission_picture,新增字段:content,字段类型:text ALTER TABLE mission_picture ADD content text:

  5. 【数据库】 SQL 常用语句

    [数据库] SQL 常用语句 1.批量导入 INSERT INTO Table2(field1,field2,...) SELECT value1,value2,... FROMTable1 要求目标 ...

  6. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  7. 【github&&git】4、git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  8. 【数据库】 SQL 常用语句之系统语法

    [数据库] SQL 常用语句之系统语法 1. 获取取数据库服务器上所有数据库的名字 SELECT name FROM master.dbo.sysdatabases 2. 获取取数据库服务器上所有非系 ...

  9. 【笔记】git 的常用操作命令(持续更新。。。)

    项目正在如火如荼的开展,代码量的繁多不得不令我们运用 git 这个有用的工具去管理我们共同协作的代码 git 在这里不作什么介绍了,百度一大堆的教程 首推廖雪峰老师的:http://www.liaox ...

  10. 总结js常用函数和常用技巧(持续更新)

    学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...

随机推荐

  1. WinDbg探究CLR底层(1) - 应用程序域

    一.什么是应用程序域 操作系统由于其稳定性与可靠性的要求,都会使用隔离层,来确保运行在某个隔离层内的代码不会对其他隔扇层的代码产生影响.如Windows通过进程来实现这种隔离机制,所能的可执行代码.数 ...

  2. 企业项目开发--cookie(1)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注:本章代码基于<第五章 企业项目开发--mybatis注解与xml并用>的代码,链接如下: h ...

  3. MariaDB 库的基本操作(2)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  4. cad 关键字被保留了?选择集关键字保留了? N S W E关键字无法用?

    N S W E是东南西北四个方位,s是南方270度,在设置关键字的时候必须避开这四个关键字. 设置早期的R14 也有.

  5. SpringCloud服务注册与服务发现之Eureka

    Eureka是SpringCloud Netflix的子模块之一,用于云端的服务发现,服务定位,实现云端中间层服务发现和故障转移.服务注册与发现对于微服务系统来说十分的重要,有了服务注册与发现,就省去 ...

  6. C# Windows Service中执行死循环轮询

    用C#编写Windows Service时,执行轮询一般有两种方式,一种是用Timer,System.Timers或者是System.Thread下的,这种执行是按时间循环执行,缺点是也许上个执行还没 ...

  7. Liferay-Activiti 企业特性功能介绍 (新版Liferay7)

    前言 如果你是开发者 你已经是多少次开发一个项目,一次次的用一些框架,一次次的写类似的重复的代码,一次次建表\写类和方法\写HTML\CSS\JAVASCRIPT,一次次测试,一次次的写Bug...如 ...

  8. 开发ASP.NET MVC 开发名片二维码生成工具 (原创)

    在网上找了很多,都只能生成网址,不能生成名片二维码,于是自己动手. 第一步,写视图界面,主要代码如下: <script type="text/javascript"> ...

  9. vue路由router的三种传参方式

    方法三: 传参页面传递参数方式: this.$router.push({ path: 'indexTwoDetails', query: { "id": id } }) 接受参数页 ...

  10. div居中的几种方式

    摘自:https://www.cnblogs.com/ones/p/4362531.html DIV居中的几种方法   1. 1 body{ 2 text-align:center; 3 } 缺点:b ...