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提交事务之前,不允许其