《SQL Server 2012 T-SQL基础》读书笔记 - 1.背景
几个缩写的全称: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.背景的更多相关文章
- SQL Server Window Function 窗体函数读书笔记二 - A Detailed Look at Window Functions
这一章主要是介绍 窗体中的 Aggregate 函数, Rank 函数, Distribution 函数以及 Offset 函数. Window Aggregate 函数 Window Aggrega ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)
为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程.最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程. 关系和存储引擎 如图所示 ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)
计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ...
- 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 ...
- sql server 2012 导出sql文件
导出表数据和表结构sql文件 在工作中,经常需要导出某个数据库中,某些表数据:或者,需要对某个表的结构,数据进行修改的时候,就需要在数据库中导出表的sql结构,包括该表的建表语句和数据存储语句!在这个 ...
- SQL Server Window Function 窗体函数读书笔记一 - SQL Windowing
SQL Server 窗体函数主要用来处理由 OVER 子句定义的行集, 主要用来分析和处理 Running totals Moving averages Gaps and islands 先看一个简 ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)
一个简单的更新查询 现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么.这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答. 庆幸的是,直到存取方法 ...
- SQL Server 2012 - 动态SQL查询
动态SQL的两种执行方式:EXEC @sql 和 EXEC sys.sp_executesql @sql DECLARE @c_ids VARCHAR(200) SET @c_ids ='1,2' - ...
- SQL Server 2012 - 数据库的基础操作
数据库基本操作 --新建数据库卡 use master go create database SchoolDB on ( Name=SchoolDB, FileName='D;\DB\SchoolDB ...
- Win7 安装SQL SERVER 2012需要SP1补丁
在操作系统Win7上安装SQL Server 2012时,报如下错误: 也就是说SQL Server 2012如要要安装在Windows 7 上,则至少需要安装SP1补丁.否则就会弹出上面提示信息.关 ...
随机推荐
- linux中文件IO
一. linux常用文件IO接口 1.1. 文件描述符 1.1.1. 文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指 ...
- [LeetCode] 212. 单词搜索 II
题目链接:https://leetcode-cn.com/problems/word-search-ii/ 题目描述: 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在 ...
- [LeetCode] 84. 柱状图中最大的矩形
题目链接 : https://leetcode-cn.com/problems/largest-rectangle-in-histogram/ 题目描述: 给定 n 个非负整数,用来表示柱状图中各个柱 ...
- 最长公共子序列(LCS) Easy
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. ...
- 重写select
select 模拟 目前仿写select的方式 给tableIndex 来使 div(无法获取焦点的元素)来获取元素,这样便可以在失去焦点时,是否将下拉框收回 通过 document的点击,来判断是否 ...
- 在.NET使用Newtonsoft.Json转换,读取,写入json
首先,大家要明白什么是json,了解更多关于json方面资料大家可以点击https://www.ibm.com/developerworks/cn/web/wa-lo-json/ ,我在这里简单介绍下 ...
- luogu P1232 [NOI2013]树的计数
传送门 这题妙蛙 首先考虑构造出一个合法的树.先重新编号,把bfs序整成\(1,2,3...n\),然后bfs序就是按照从上到下从左往右的遍历顺序,所以可以考虑对bfs序分层,可以知道分层方式只会对应 ...
- POI读取文件的最佳实践
POI是 Apache 旗下一款读写微软家文档声名显赫的类库.应该很多人在做报表的导出,或者创建 word 文档以及读取之类的都是用过 POI.POI 也的确对于这些操作带来很大的便利性.我最近做的一 ...
- [七月挑选]IntelliJ IDEA常用设置
title: IntelliJ IDEA常用设置 设置idea的类注释快捷键 File -> Settings -> Live Templates 1.右边的 + -> Templa ...
- 执行rpm -ivh 时报错:error rpmdb BDB0113 Threadprocess 11690140458095421504 failed
执行rpm -ivh 时报错:error rpmdb BDB0113 Threadprocess 11690140458095421504 failed 1.具体报错如下: [root@heyong ...