几个缩写的全称:Data Definition Language (DDL), Data Manipulation Language (DML), and Data Control Language (DCL)。


以下三种范式我的理解就是规范,用来保证数据关系的正确性和减少冗余。

  • 第一范式:表中的每一行必须是唯一的。
  • 第二范式:首先必须满足第一范式。其次,想获得任何非键属性值,就必须提供“整个候选键”(候选键(candidate key)就是能唯一确定一行的一个或多个属性)。例如:表Orders主键为orderid和productid(由两个属性组成的候选键),但通过orderid(只是候选键的一部分)就可以确定某个customerid(非键属性值),所以必须拆成两个表:Orders和OrderDetails,如下图1-3所示。
  • 第三范式:首先必须满足第二范式。其次,非键属性值之间必须互相独立,不能互相依赖。例如:表Orders中有customerid和companyname,这两个属性就是互相依赖的,所以必须再增加一个Customers表,其主键为customerid,非键属性为companyname,然后将Orders表中companyname删去。

下图为应用了第三范式后的数据模型:


一个SQL Server实例是指一个SQL Server数据库引擎/服务。一台电脑上可以安装很多个SQL Server实例,并且他们之间是完全互相独立的。

可以把数据库当成是各种对象的容器,这些对象包括表、视图、存储过程等等。

其实刚才说简单了,数据库包含多个构架(Schema),而Schema又包含各种对象(表,视图什么的),如下图所示:



控制权限在Schema这一层,比如可以设置某些用户对dbo这个Schema只能SELECT。Schema也起到命名空间的作用,所以一个schema-qualified object name长这样:Sales.Orders。你也可以省略schema name让SQL Server猜一下你是指哪个schema。如果你新创建一个数据库,会自动创建一个默认的叫dbo的schema,如果你不指定schema名,就当你是指dbo。


主键约束(Primary Key Constraints)。主键能唯一标示一行数据,可以任意选择一个列(或多个列的组合)作为主键(primary key)。每个表只能有一个主键。语法:

ALTER TABLE dbo.Employees
ADD CONSTRAINT PK_Employees
PRIMARY KEY(empid);

唯一约束(Unique Constraints)。唯一约束用来表示这个列中数据的唯一(最典型的就是用户id)。可以在一个表中定义多个唯一约束。主键约束和唯一约束都会使SQL Server在幕后创建索引,索引是一种物理机制,也可以加快查询速度。语法:

ALTER TABLE dbo.Employees
ADD CONSTRAINT UNQ_Employees_ssn
UNIQUE(ssn);

外键约束(Foreign Key Constraints)用来引用其他表中的候选键,只能取其他表的候选键中出现过的值。外键可以引用当前表他自己的其他的列。语法:

ALTER TABLE dbo.Orders
ADD CONSTRAINT FK_Orders_Employees
FOREIGN KEY(empid)
REFERENCES dbo.Employees(empid);

默认下,当试图删除或更新被引用的行时,如果在引用表中存在相关的行,则此操作不能执行。也可以在外键定义中将ON DELETE和ON UPDATE选项定义为:CASCADE(改变被引用表,则自动改变引用表),SET DEFAULT(改变被引用表,则将引用表中相关行设置为列的默认值),SET NULL(改变被引用表,则将引用表中相关行设置为NULL)。
检查约束(Check Constraints)。语法:

ALTER TABLE dbo.Employees
ADD CONSTRAINT CHK_Employees_salary
CHECK(salary > 0.00);

之后如果你试图插入负数的工资进去,会被拒绝。当添加检查约束和外键约束时,你也可以指定一个选项WITH NOCHECK,意思是不必对现有的数据进行检查。
默认约束(Default Constraints)。语法:

ALTER TABLE dbo.Orders
ADD CONSTRAINT DFT_Orders_orderts
DEFAULT(SYSDATETIME()) FOR orderts;

如果标识符里面有特殊字符(比如有空格),那么就需要用分隔符,比如[Order Details] 。标准的SQL是用双引号。另外,每句的结尾记得写分号。

《SQL Server 2012 T-SQL基础》读书笔记 - 1.背景的更多相关文章

  1. SQL Server Window Function 窗体函数读书笔记二 - A Detailed Look at Window Functions

    这一章主要是介绍 窗体中的 Aggregate 函数, Rank 函数, Distribution 函数以及 Offset 函数. Window Aggregate 函数 Window Aggrega ...

  2. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)

    为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程.最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程. 关系和存储引擎 如图所示 ...

  3. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)

    计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ...

  4. SQL Sever 各版本下载 SQL Server 2012下载SQL Server 2008下载SQL Server 2005

    SQL Server 2012SQL Server 2012 开发版(DVD)(X64,X86)(中文简体)ed2k://|file|cn_sql_server_2012_developer_edit ...

  5. sql server 2012 导出sql文件

    导出表数据和表结构sql文件 在工作中,经常需要导出某个数据库中,某些表数据:或者,需要对某个表的结构,数据进行修改的时候,就需要在数据库中导出表的sql结构,包括该表的建表语句和数据存储语句!在这个 ...

  6. SQL Server Window Function 窗体函数读书笔记一 - SQL Windowing

    SQL Server 窗体函数主要用来处理由 OVER 子句定义的行集, 主要用来分析和处理 Running totals Moving averages Gaps and islands 先看一个简 ...

  7. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)

    一个简单的更新查询 现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么.这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答. 庆幸的是,直到存取方法 ...

  8. SQL Server 2012 - 动态SQL查询

    动态SQL的两种执行方式:EXEC @sql 和 EXEC sys.sp_executesql @sql DECLARE @c_ids VARCHAR(200) SET @c_ids ='1,2' - ...

  9. SQL Server 2012 - 数据库的基础操作

    数据库基本操作 --新建数据库卡 use master go create database SchoolDB on ( Name=SchoolDB, FileName='D;\DB\SchoolDB ...

  10. Win7 安装SQL SERVER 2012需要SP1补丁

    在操作系统Win7上安装SQL Server 2012时,报如下错误: 也就是说SQL Server 2012如要要安装在Windows 7 上,则至少需要安装SP1补丁.否则就会弹出上面提示信息.关 ...

随机推荐

  1. 【转】sql server数据收集和监控

    转自:https://www.cnblogs.com/zhijianliutang/p/4476403.html 相关系列: https://www.cnblogs.com/zhijianliutan ...

  2. vue vuex应用

    vue结构图: vuex为vue的一个插件,用来管理共享数据的,局部数据声明在自己组件内部. 没有使用vuex时,所有共享数据和操作数据的方法都声明在父组件内,数据的通信用props及pubsub等. ...

  3. textarea标签输出内容时不能顶格(左对齐)输出

    我用textarea输出文本内容的时候出现下面的问题:文本内容在action里测试没有问题(文本内容前面没有空格),但是在jsp页面textare标签中输出文本内容时,文本内容前面却出现一些多余的空格 ...

  4. xilinx基础入门

    2019.09.03 一.基础部分及语法 一.FPGA程序的固化 [USF-XSim-62] 'simulate' step failed with errors. Please check the ...

  5. [Nest] 01.初见nest.js

    github nest 介绍 Nest 是一个用于构建高效,可扩展的 Node.js 服务器端应用程序的框架.它使用渐进式 JavaScript,内置并完全支持 TypeScript(但仍然允许开发人 ...

  6. Pose &&Get的区别

    从一个页面转向另一个页面的请求方式有两种,Post和Get. 如果从原理上来探究他们的区别,涉及到Http传输协议的细节,本文不加探究,只讨论一下表象. 1.Post传输数据时,不需要在URL中显示出 ...

  7. Python 中Semaphore 信号量对象、Event事件、Condition

    Semaphore 信号量对象 信号量是一个更高级的锁机制.信号量内部有一个计数器而不像锁对象内部有锁标识,而且只有当占用信号量的线程数超过信号量时线程才阻塞.这允许了多个线程可以同时访问相同的代码区 ...

  8. Centos安装PHP PS:LAMP环境时,为少出错误,先安装一下编译环境

    下面安装PHP时数显很多问题,为了减少问题,直接安装先yum一下 yum -y install gcc pcre pcre-devel gcc-c++ autoconf libxml2 libxml2 ...

  9. 微信授权获取code/openid

    微信网页授权 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域名的说明 1.在微信公众号请求用户网页授权之前,开发者需要 ...

  10. Python字符串(str)方法调用

    # str# n = 'pianYU'# v = n.capitalize() # 将字符串的首字母大写# print(v)## n = 'pianYI'# v1 = n.isupper() # 判断 ...