当前位置:数据库 > SQLServer >>

sql 视图、约束、索引创建方法

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库教程中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。

SQL CREATE VIEW 语法
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据

二、约束

   1)检查约束【通常认为的“约束”】

   CHECK 约束用于限制列中的值的范围。

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
SQL CHECK Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。

My SQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)    创建检查约束:创建检查约束:

1 use edisondb;
2  alter table staffinfo
3  add constraint ck_StaffID check(StaffID between 5000 and 5999)

 

      成功创建之后:
      此时执行非法的插入行:
1 use edisondb;
2  insert into StaffInfo(StaffID,StaffName,Department)
3 values(6000,'Wade','Dev');
     执行结果为:
   2)唯一性约束
      StaffInfo表原始数据:
     创建唯一性约束:
1 use edisondb;
2  alter table staffinfo
3  add constraint uq_StaffName unique(StaffName);

     成功创建后:

          注:唯一性约束创建成功后,是在“键”中显示,而非“约束”中

     此时执行非法的插入行:
执行结果为:

1 use edisondb;
2  insert into StaffInfo(StaffID,StaffName,Department)
3 values(5003,'keven','Dev');

   


      说明:要使某列的值唯一,既可以通过主键来实现,也可以通过“唯一性约束”来实现
   3)默认约束
     创建默认约束:
1 use edisondb;
2  alter table staffinfo
3  add constraint df_Department default('部门待定') for Department;
     成功创建后:
    执行行插入:

执行结果为:

1 use edisondb;
2  insert into StaffInfo(StaffID,StaffName)
3 values(5003,'Murphy');

  


  注:主键和外键也属于一种约束

索引被创建于已有的表中,它可使对行的定位更快速更有效。可以在表格的一个或者多个列上创建索引,每个索引都会被起个名字。用户无法看到索引,它们只能被用来加速查询。

注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常用于搜索的列上面创建索引。

唯一的索引 (Unique Index)
在表格上面创建某个一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。

CREATE UNIQUE INDEX 索引名称
ON 表名称 (列名称)
"列名称" 规定你需要索引的列。

简单的索引
在表上创建一个简单的索引。当我们省略关键词 UNIQUE 时,就可以使用重复的值。

CREATE INDEX 索引名称
ON 表名称 (列名称)
"列名称" 规定你需要索引的列。

实例
本例会创建一个简单的索引,名为 "PersonIndex",在 Person 表的 LastName 字段:

CREATE INDEX PersonIndex
ON Person (LastName)
如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:

CREATE INDEX PersonIndex
ON Person (LastName DESC)
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:

CREATE INDEX PersonIndex
ON Person (LastName, FirstName)

补充:数据库,Mssql
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,