1. SQL Server数据库基本概念
SQL Server是一款关系型数据库管理系统(RDBMS),由Microsoft开发和维护。它可以让用户存储、查询、修改和删除数据,并且支持多种操作系统和编程语言。下面是一些SQL Server的基本概念:
1.1 数据库
数据库是一个集合,其中包含一个或多个相关的数据表、视图、存储过程和其他对象。每个数据库都有一个名称和一组相关的属性,例如安全性、备份和恢复。SQL Server中的所有数据都存储在数据库中。
1.2 实例
实例是一个SQL Server安装的副本,其中包含一个或多个数据库。每个实例都有一个唯一的名称、一组相关的属性(例如网络设置和安全性)和一个一般默认的端口号(TCP 1433),在计算机上可以安装多个实例。
1.3 客户端
客户端是一种应用程序,可以连接到SQL Server实例并执行查询和其他操作。常见的SQL Server客户端包括SQL Server Management Studio(SSMS)和Visual Studio中的SQL Server Management Objects(SMO)。
2. SQL Server数据库组成
SQL Server数据库由多个相关的对象组成,包括数据表、视图、存储过程、触发器、索引和约束。下面是SQL Server数据库中的一些常用对象:
2.1 数据表
数据表是SQL Server数据库中最基本的对象之一。它包含列和行,每个列定义了一个数据类型,并且每个行包含了列的一组值。数据表的操作包括插入、查询、更新和删除。
--创建一个名为products的数据表
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(50),
price DECIMAL(10,2)
);
2.2 视图
视图是一个虚拟表,根据指定的查询语句动态生成结果集。视图的作用包括隐藏数据表中的敏感信息、简化复杂的查询和限制对数据的访问。
--创建一个名为product_prices的视图
CREATE VIEW product_prices AS
SELECT name, price
FROM products;
2.3 存储过程
存储过程是一种预编译的代码块,可以在SQL Server中包含查询、控制流程语句和业务逻辑。存储过程可以接受输入参数并返回输出参数或结果集。
--创建一个名为get_product_price的存储过程
CREATE PROCEDURE get_product_price
@product_id INT
AS
BEGIN
SELECT price
FROM products
WHERE id = @product_id;
END;
2.4 触发器
触发器是在数据表上定义的一种特殊类型的存储过程,可以在事件(例如插入、更新或删除)发生时自动执行。触发器可以用于记录数据变更、执行其他操作或检查和限制对数据表的访问。
--创建一个名为update_product_trigger的触发器
CREATE TRIGGER update_product_trigger
ON products
AFTER UPDATE
AS
PRINT 'Product updated';
2.5 索引和约束
索引和约束是SQL Server数据库中的两个重要概念。索引是一种数据结构,可以加速数据表查询操作;约束是一种规则,可以保证数据表中的数据满足特定的要求。
SQL Server支持多种索引类型,包括主键索引、唯一索引、聚簇索引和非聚簇索引。约束可以分为多种类型,包括主键约束、唯一约束、默认约束和检查约束。
--在products数据表上创建一个名为PK_products的主键约束
ALTER TABLE products
ADD CONSTRAINT PK_products PRIMARY KEY (id);
3. SQL Server常用对象与约束
3.1 数据表对象
数据表是SQL Server数据库中最基本的对象之一,它定义了一组相关的列和行。在创建数据表时,可以指定每个列的数据类型、约束条件和默认值。
列属性
每个数据表列都具有以下属性:
名称:列的名称必须唯一,并且不能超过128个字符。
数据类型:列的数据类型可以是数字、字符、日期、二进制或其他类型。
长度:对于字符和二进制类型,需要指定列的长度。
约束:可以为列定义约束条件,例如主键约束、唯一约束和检查约束。
默认值:可以为列定义默认值,如果没有指定值,则会使用默认值。
标识符:可以为整数列定义标识符,以便自动为新行分配唯一的值。
主键约束
主键约束是一种特殊类型的唯一约束,它要求列的值在整个数据表中都唯一且非空。主键约束通常与自增或其他标识符一起使用,用于为每个新行分配唯一的值。
--在products数据表上创建一个名为PK_products的主键约束
ALTER TABLE products
ADD CONSTRAINT PK_products PRIMARY KEY (id);
唯一约束
唯一约束要求列的值在整个数据表中都唯一,但可以包含NULL值。如果在添加或修改数据时违反唯一约束,则会引发错误。
--在customers数据表上创建一个名为UQ_customers_email的唯一约束
ALTER TABLE customers
ADD CONSTRAINT UQ_customers_email UNIQUE (email);
检查约束
检查约束要求列的值满足指定的条件,例如值必须大于0或小于100。如果在添加或修改数据时违反检查约束,则会引发错误。
--在employees数据表上创建一个名为CK_employees_salary的检查约束
ALTER TABLE employees
ADD CONSTRAINT CK_employees_salary CHECK (salary > 0);
3.2 视图对象
视图是一个虚拟表,根据指定的查询语句动态生成结果集。视图的作用包括隐藏数据表中的敏感信息、简化复杂的查询和限制对数据的访问。
创建视图
可以使用CREATE VIEW语句创建视图:
--创建一个名为product_prices的视图
CREATE VIEW product_prices AS
SELECT name, price
FROM products;
更新视图
可以使用UPDATE语句更新视图。由于视图是虚拟表,因此必须先更新基础数据表,然后再更新视图。
--更新products数据表中的一行
UPDATE products
SET price = 99.99
WHERE id = 1;
--更新product_prices视图
--注意:不能直接更新视图
--必须使用包含表的UPDATE语句
UPDATE product_prices
SET price = 99.99
WHERE name = 'Product A';
删除视图
可以使用DROP VIEW语句删除视图。
--删除product_prices视图
DROP VIEW product_prices;
3.3 存储过程对象
存储过程是一个预编译的代码块,可以在SQL Server中包含查询、控制流程语句和业务逻辑。存储过程可以接受输入参数并返回输出参数或结果集。
创建存储过程
可以使用CREATE PROCEDURE语句创建存储过程。
--创建一个名为get_product_price的存储过程
CREATE PROCEDURE get_product_price
@product_id INT
AS
BEGIN
SELECT price
FROM products
WHERE id = @product_id;
END;
执行存储过程
可以使用EXECUTE语句执行存储过程。
--执行get_product_price存储过程
EXECUTE get_product_price 1;
更新存储过程
可以使用ALTER PROCEDURE语句更新存储过程的定义。
--更新get_product_price存储过程
ALTER PROCEDURE get_product_price
@product_id INT,
@new_price DECIMAL(10,2)
AS
BEGIN
UPDATE products
SET price = @new_price
WHERE id = @product_id;
END;
3.4 触发器对象
触发器是在数据表上定义的一种特殊类型的存储过程,可以在事件(例如插入、更新或删除)发生时自动执行。
创建触发器
可以使用CREATE TRIGGER语句创建触发器。
--创建一个名为update_product_trigger的触发器
CREATE TRIGGER update_product_trigger
ON products
AFTER UPDATE
AS
PRINT 'Product updated';
更新触发器
可以使用ALTER TRIGGER语句更新触发器的定义。
--更新update_product_trigger触发器
ALTER TRIGGER update_product_trigger
ON products
AFTER UPDATE
AS
PRINT 'Product updated'
--执行其他操作
;
删除触发器
可以使用DROP TRIGGER语句删除触发器。
--删除update_product_trigger触发器
DROP TRIGGER update_product_trigger;
3.5 索引与约束
索引和约束是SQL Server数据库中的两个重要概念。索引是一种数据结构,可以加速数据表查询操作;约束是一种规则,可以保证数据表中的数据满足特定的要求。
创建索引
可以使用CREATE INDEX语句创建索引。
--在products数据表上创建一个名为IX_products_name的非聚簇索引
CREATE NONCLUSTERED INDEX IX_products_name
ON products (name);
更新索引
可以使用ALTER INDEX语句更新索引的定义。
--更新IX_products_name索引
ALTER INDEX IX_products_name
ON products
REBUILD;
删除索引
可以使用DROP INDEX语句删除索引。
--删除IX_products_name索引
DROP INDEX IX_products_name ON products;
创建约束
可以使用ALTER TABLE语句添加约束。
--在products数据表上创建一个名为DF_products_discount的默认约束
ALTER TABLE products
ADD CONSTRAINT DF_products_discount DEFAULT 0.00 FOR discount;
更新约束
可以使用ALTER TABLE语句更新约束的定义。
--更新DF_products_discount约束
ALTER TABLE products
DROP CONSTRAINT DF_products_discount;
ALTER TABLE products
ADD CONSTRAINT DF_products_discount DEFAULT 0.10 FOR discount;
删除约束
可以使用ALTER TABLE语句删除约束。
--删除DF_products_discount约束
ALTER TABLE products
DROP CONSTRAINT DF_products_discount;
结论
综上所述,SQL Server是一款强大的关系型数据库管理系统,由多个相关的对象组成,包括数据表、视图、存储过程、触发器、索引和约束。熟悉SQL Server的基本概念和常用对象,并且能够熟练使用相关语句创建、更新和删除数据库对象和约束条件,对于开发和维护数据库应用程序具有重要的意义。