SQL基础:SQL Server数据库基本概念、组成、常用对象与约束

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的基本概念和常用对象,并且能够熟练使用相关语句创建、更新和删除数据库对象和约束条件,对于开发和维护数据库应用程序具有重要的意义。

数据库标签