SQL Server (一) 对表的增删改查、事务、锁

本文介绍了SQL Server中的数据库命名规则,重点讲解了并发控制,包括事务的并发访问问题(丢失更新、脏读、非重复读、幻象读)以及解决方案。接着详细阐述了SQL Server的锁机制,事务的阻塞问题以及如何通过动态管理视图sys.dm_os_waiting_tasks监控和解决阻塞。最后讨论了死锁的产生、处理以及预防措施,提供了具体的SQL脚本示例。
摘要由CSDN通过智能技术生成

1、数据库命名规则(老版本,2008之前版本)

  • 名称长度不能超过128个字符,本地临时表名称不能超过116个字符。
  • 名称的第一个字符尽量使用英文字母、中文(或其他语言的字母)、下划线、“@”或“#”符号。
  • 除第一个字符外的其他字符,还可以包括数字和“$”符号。
  • 名称中间不允许有空格或其他特殊字符。
  • 名称不能是保留字。

2、基本操作

/*创建表*/
CREATE TABLE Class(
 cId INT PRIMARY KEY,
 cNum INT NOT NULL,
 cMteacher VARCHAR(20)
)
CREATE TABLE Student(
sId INT  PRIMARY KEY,
sName VARCHAR(20),
sAge INT,
sTel INT,
cId INT NOT NULL ,FOREIGN KEY(cId) REFERENCES class(cId)
)
CREATE TABLE Teacher(
 tId int NOT NULL,
 tName VARCHAR(20) NOT NULL,
 tAge int,
 cId int
)

/*删除表*/

DROP TABLE Teacher;

/*删除表数据*/
TRUNCATE TABLE Class;

/*更改表名*/
SP_RENAME Student,Studentinfo

/*更改表结构 -添加字段*/
ALTER TABLE Student ADD sAddress VARCHAR(50);

/*更改表结构 -删除字段*/
ALTER TABLE Student DROP COLUMN sAddress ;

/*添加组合主键*/

ALTER TABLE [dbo].[Teacher]
ADD
CONSTRAINT PK_test PRIMARY KEY NONCLUSTERED (tId,tName )

/*添加外键约束*/
ALTER TABLE dbo.Teacher 
WITH CHECK 
ADD CONSTRAINT FK_Teacher FOREIGN KEY(cId)REFERENCES dbo.Class(cId)

/*添加check约束 */
ALTER TABLE dbo.Teacher
WITH NOCHECK 
ADD CONSTRAINT CK_Teacher CHECK(tAge > 0 AND tAge <70)

/* 插入数据*/
INSERT INTO Class VALUES(1,30,'王小红'),
                        (2,30,'张小明')

/*利用显示事务控制DML操作 */
BEGIN TRANSACTION tr_Teacher
INSERT INTO test.dbo.Teacher VALUES(01,'张小明',28,2)
GO
UPDATE test.dbo.Teacher
SET tAge = 29
WHERE tId = 01
GO
COMMIT TRANSACTION tr_Teacher 

/*打开隐式事务后,每次执行操作,都会开始一个新事务,需要用COMMIT或ROLLBACK结束*/
SET IMPLICIT_TRANSACTIONS ON 
INSERT INTO Teacher VALUES(02,'王小红',35,1)
GO
UPDATE Teacher
SET tAge = 34
WHERE tId = 02
GO
COMMIT 
SET IMPLICIT_TRANSACTIONS OFF

SELECT * FROM Teacher

/*设置事务保护点和事务回滚至保护点的语法*/
SAVE TRANSACTION savepoint_name
ROLLBACK TRANSACTION savepoint_name

--并发控制

当多个用户同时访问同一数据时,为了保证数据的准确性,将对事务进行并发控制。

(1)并发访问的问题:

丢失更新数据:

 解决:在A完成数据修改并提交事务之前,B客户端不允许访问相同的数据文件

脏读:

解决:事务A提交事务之前,不允许其

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值