创建和管理架构
创建表
FILESTREAM、SPATIAL和DATE/TIME三种数据类型
创建计算列
定义约束,加强数据完整性
为压缩和稀疏行/列配置数据存储选项
任何数据库以及数据平台的目的 都是为了存储和管理数据。
对象的名称,即标识符。 有两种标识符:常规(regular)标识符和分隔(delimited)标识符。
标识符的规则:
(1)最大128个字符
(2)第一个字符必须是字母
(3)不能是T-SQL的保留字
(4)不能包含空格或特殊字符
不符合标识符规则的对象名称 必须用引号"或者方括号[]引起来。
数据库对象使用<实例>.<数据库>.<架构>.<对象>的4部分架构命名。
其中的实例、数据库、架构是可选的。 实力名未指定,对象名默认指向当前正在连接的实例;数据库名称未指定,使用连接的当前数据库上下文;架构名未指定,使用默认的架构。
数据库里的所有对象都在架构下创建。架构不仅提供对象分组方式,还提供了安全边界。
创建架构的通用语法:
CREATE SCHEMA schema_name AUTHORIZATION owner_name
CREATE SCHEMA HumanResources AUTHORIZATION dboGO
在数据库和电子表格之间最根本的差别之一是,数据库提供并增强了数据存储的结构。
在SQL Server中最常用的数据类型之一便是Numeric数据类型。有9种Numeric数据类型:tinyint(0~255, 1字节)、smallint(-2768~32767,2字节)、int(-2^31到2^31-1, 4字节)、bigint(-2^63到2^63-1, 8字节)、decimal(p,s) (-10^38+1到10^38-1)、numeric(p,s) (-214 748 .3648到214 748.3647, 4字节)、smallmoney(9字节)、money(4字节)、real(4字节或8字节)。
decimal数据类型有两个参数:精度和刻度。 精度,小数点左右的数字位数之和。精度,小数点右边的小数的位数。
字符数据类型:char(n)、varchar(n)、text、nchar(n)、nvarchar(n)、ntext。 前面三种类型,每字符1字节;后三种类型,每字符2字节。
Unicode字符类型以n开头,如nchar(n)、nvarchar(n)、ntext.
date、time,日期与时间数据
二进制数据bit、binary、varbinary
XML、FILESTREAM数据类型
空间数据类型:几何数据(geometry)与地理数据(geography)。
geometry数据类型支持平面或欧几里得(平面球)数据,用于存储点、线等数据。
geography数据类型可存储诸如GPS纬度和经度坐标之类的椭圆体(圆球)数据。
hierachyID数据类型,用于组织分层数据,如机构图表、流程图等。
列的属性。 最常见的三种列属性就是排序规则、标识、允许NULL值。
定义IDENTITY属性后,SQL Server将为您管理该列中的值。 IDENTITY的定义包含两个参数:SEED和INCREMENT。SEED表示该列的第一行的值,INCREMENT表示该列的行与行之间的增量值。
CREATE 创建一个对象,ALTER 修改一个对象,DROP 删除一个对象
在创建对应的架构之后,创建表
CREATE TABLE Customers.Customer( CustomerID INT IDENTITY(1,1), CompanyName VARCHAR(50) NULL, FirstName VARCHAR(50) NULL, LastName VARCHAR(50) NULL, ModifiedDate DATE NOT NULL)GO
创建带计算列的表
DROP TABLE Orders.OrderHeaderGOCREATE TABLE Orders.OrderHeader( OrderID INT IDENTITY(1,1), OrderDate DATE NOT NULL, SubTotal MONEY NOT NULL, TaxAmount MONEY NOT NULL, ShippingAmount MONEY NOT NULL, GrandTotal AS (SubTotal + TaxAmount + ShippingAmount), FinalShipDate DATE NULL)GO
向现有的表中添加计算列
ALTER TABLE Products.Product ADD ProductMargin AS (ListPrice - ProductCost)GO
稀疏列:该列允许NULL,且多数值为NULL,为节约存储空间,该列设置为SPARSE属性。
DROP TABLE Customers.CustomerAddressGOCREATE TABLE Customers.CustomerAddress( AddressID INT IDENTITY(1,1), AddressType VARCHAR(20) NOT NULL, AddressLine1 VARCHAR(50) NOT NULL, AddressLine2 VARCHAR(50) SPARSE NULL, AddressLine3 VARCHAR(50) SPARSE NULL, City VARCHAR(50) NOT NULL, StateProvince VARCHAR(50) NULL, Country VARCHAR(70) NULL, CONSTRAINT pk_customeraddress PRIMARY KEY (AddressID))GO
SQL Server中的约束:主键、唯一性、CHECK、默认值以及外键。
在一个设计得当的数据库中,主键是一种基础性的约束。
可以没有主键,但向没有主键的表中添加数据时,除非某一行数据能被地定义,否则将无法对其进行修改或删除。
创建带主键约束的表
DROP TABLE Customers.CustomerGOCREATE TABLE Customers.Customer( CustomerID INT IDENTITY(1,1), CompanyName VARCHAR(50) NULL, FirstName VARCHAR(50) NULL, LastName VARCHAR(50) NULL, ModifiedDate DATE NOT NULL, CONSTRAINT pk_customer PRIMARY KEY (CustomerID))GO
向现有的表中添加主键约束。
ALTER TABLE Orders.OrderDetail ADD CONSTRAINT pk_orderdetail PRIMARY KEY (OrderDetailID)GO
唯一性约束。用于定义一列或多列,这些列的值在表中必须是唯一的。
一张表只能有一个主键; 主键列中不能有NULL值。
当唯一性约束允许该列上有NULL值时,该表中只能有一行数据在该列上为NULL。
当唯一性约束被定义在多列上,则整张表中只允许出现一行数据——在受唯一性约束的各列上的值均为空。
创建带唯一性约束的表。
CREATE TABLE Products.ProductDocument( DocumentID UNIQUEIDENTIFIER ROWGUIDCOL UNIQUE, DoucumentType VARCHAR(20) NOT NULL, Document VARBINARY(MAX) FILESTREAM NULL, CONSTRAINT pk_productdocument PRIMARY KEY (DocumentID))GO
FILESTREAM只能使用在VARBINARY上。
默认FILESTREAM文件组在数据库"SQL2012SBS"中不可用。
可以在表的某列上使用CHECK约束,从而将该列的值限制在某个范围内。