1. 简介
SQL Server是微软公司开发的企业级数据库管理系统,是目前国内比较流行的数据库管理系统之一。与Oracle、MySQL等数据库相比,SQL Server具有使用方便、性能高、安全可靠等优点,在互联网开发以及企业级系统开发等领域都被广泛使用。
2. SQL Server基础知识
2.1 数据类型
在SQL Server中,数据类型非常丰富,包括常见的整数类型、浮点数类型、字符类型、日期时间类型以及二进制类型等。以下是SQL Server中一些常用的数据类型:
INT -- 整数类型
FLOAT -- 浮点数类型
CHAR -- 定长字符类型
VARCHAR -- 变长字符类型
DATETIME -- 日期时间类型
BIT -- 布尔类型
BLOB -- 二进制类型
2.2 创建表
在SQL Server中,创建表需要使用CREATE TABLE语句。例如,创建一个学生信息表:
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
sex BIT,
birthday DATETIME
)
以上SQL语句创建了一个名为student的表,包含id、name、age、sex和birthday五个字段。其中,id字段被指定为主键。
2.3 插入数据
在SQL Server中,插入数据需要使用INSERT INTO语句。例如,向student表中插入一条数据:
INSERT INTO student (id, name, age, sex, birthday)
VALUES (1, 'Tom', 20, 1, '2000-01-01')
以上SQL语句向student表中插入了一条数据,数据包含id、name、age、sex和birthday五个字段的值。
2.4 更新数据
在SQL Server中,更新数据需要使用UPDATE语句。例如,将学号为1的学生信息中的姓名改为'Jack':
UPDATE student SET name = 'Jack' WHERE id = 1
以上SQL语句更新了学号为1的学生的姓名为'Jack'。
2.5 删除数据
在SQL Server中,删除数据需要使用DELETE FROM语句。例如,删除学号为1的学生信息:
DELETE FROM student WHERE id = 1
以上SQL语句删除了学号为1的学生的信息。
2.6 查询数据
在SQL Server中,查询数据需要使用SELECT语句。例如,查询student表中的所有数据:
SELECT * FROM student
以上SQL语句查询了student表中的所有数据。
3. SQL Server高级知识
3.1 索引
在SQL Server中,索引是一种用于提高数据查询效率的机制。可以通过CREATE INDEX语句在表上创建索引。例如:
CREATE INDEX idx_student_name ON student(name)
以上SQL语句在student表上创建了一个名为idx_student_name的索引,索引的键值为name字段。
3.2 存储过程
在SQL Server中,存储过程是一种预编译的SQL脚本,可以重复使用,减少了SQL语句重复编写的工作量,并且常用于进行复杂的数据处理。创建存储过程的语法如下:
CREATE PROCEDURE procedure_name AS
BEGIN
-- SQL 语句
END
例如,创建一个名为get_student_by_age的存储过程,用于获取指定年龄的学生信息:
CREATE PROCEDURE get_student_by_age @age INT AS
BEGIN
SELECT *
FROM student
WHERE age = @age
END
以上SQL语句创建了一个名为get_student_by_age的存储过程,使用了一个名为@age的参数,当调用这个存储过程时,可以传入具体的年龄值。
3.3 触发器
在SQL Server中,触发器是一种在某些行为发生时自动触发执行的SQL脚本。常用于记录数据变化的历史记录。创建触发器的语法如下:
CREATE TRIGGER trigger_name
ON table_name
FOR INSERT, UPDATE, DELETE
AS
BEGIN
-- SQL 语句
END
例如,创建一个名为student_log的触发器,用于在student表中插入、更新、删除数据时向一个日志表中记录变化的信息:
CREATE TRIGGER student_log
ON student
FOR INSERT, UPDATE, DELETE
AS
BEGIN
IF @@ROWCOUNT = 0
RETURN
DECLARE @log VARCHAR(MAX)
SELECT @log = COALESCE(@log + ';', '') + CONVERT(VARCHAR(50), GETDATE()) + ' '
+ CASE
WHEN EXISTS(SELECT * FROM inserted) AND EXISTS(SELECT * FROM deleted) THEN 'UPDATE'
WHEN EXISTS(SELECT * FROM inserted) THEN 'INSERT'
WHEN EXISTS(SELECT * FROM deleted) THEN 'DELETE'
END
+ ' student id=' + CONVERT(VARCHAR(50), ISNULL(inserted.id, deleted.id))
+ ', name=' + ISNULL(''''+inserted.name+'''', '''''')
+ ', age=' + CONVERT(VARCHAR(50), ISNULL(inserted.age, deleted.age))
+ ', sex=' + CONVERT(VARCHAR(50), ISNULL(inserted.sex, deleted.sex))
+ ', birthday=' + ISNULL(''''+CONVERT(VARCHAR(50), inserted.birthday, 120)+'''', '''''')
INTO #temp
FROM inserted
FULL OUTER JOIN deleted ON inserted.id = deleted.id
INSERT INTO student_log (log)
SELECT @log
FROM #temp
WHERE @log IS NOT NULL
DROP TABLE #temp
END
以上SQL语句创建了一个名为student_log的触发器,当向student表中插入、更新、删除数据时,会记录其变化的信息到一个名为student_log的日志表中。
4. 总结
本文介绍了SQL Server的基础和高级知识,包括数据类型、创建表、插入数据、更新数据、删除数据、查询数据、索引、存储过程、触发器等方面。掌握了这些知识,可以方便地进行SQL Server数据库的开发和管理。