Sqlserver 学习笔记

by:授客 QQ1033553122

-----------------------接Part 8-------------------


3

范式的概念

第一范式的目标是确保每列的原子性。

如果每列都是不可再分的最小单元(也称为最小的原子单位。),则满足第一范式(1NF)

第二范式要求每个表只描述一件事情。

如果一个关系满足1NF,并且除了主键以外的其它列,都依赖该主键,则满足第二范式。(2NF)

第三范式

如果一个关系满足2NF,并且除了主键以外的其它列都不传递依赖于主键,则满足第三范式(3NF)。

第一范式(1NF)的目标:确保每列的原子性。

第二范式(2NF)的目标:确保表中的每列,都和主键相关,即不存在部分依赖

第三范式(3NF)的目标:确保每列都和主键列直接相关,而不是间接相关,即不存在传递函数依赖


4 T-SQL
创建数据库的语法:

CREATE  DATABASE 
数据库名

ON [PRIMARY]

(

<</span>数据文件参数>
[,…n] 
[<</span>文件组参数>]

)

[LOG ON]

(

<</span>日志文件参数>
[,…n]

)

示例

--创建学生数据库:一个数据文件,一个日志文件

CREATE
DATABASE studentDB

ON
PRIMARY--默认就是属于PRIMARY主文件,可以省略

(

NAME='stdDB_data',--主数据文件的逻辑名

FILENAME='E:\SQL\stuDB.mdf',--主数据文件的物理名

SIZE=3mb,--主数据文件的初始大小

MAXSIZE=10mb,--主数据文件的增长的最大值

FILEGROWTH=10%--主数据文件的增长率

)

LOG
ON

(

NAME='stuDB_log',

FILENAME='E:\SQL\stuDB_log.ldf',

SIZE=3mb,

MAXSIZE=10mb,

FILEGROWTH=1mb

)

GO

注意:这里的两个name参数不能一样的逻辑名,否则会提示逻辑文件名xxx已被使用,请选择另一个名称

--创建学生数据库:多个数据文件,多个日志文件

CREATE
DATABASE employeeDB

ON
PRIMARY--默认就是属于PRIMARY主文件,可以省略

(

NAME='employee1_data',--主数据文件的逻辑名

FILENAME='E:\SQL\employee1.mdf',--主数据文件的物理名

SIZE=3mb,--主数据文件的初始大小

MAXSIZE=10mb,--主数据文件的增长的最大值

FILEGROWTH=10%--主数据文件的增长率

),

(

NAME='employee2_data',--主数据文件的逻辑名

FILENAME='E:\SQL\employee2.mdf',--主数据文件的物理名

SIZE=3mb,--主数据文件的初始大小

MAXSIZE=10mb,--主数据文件的增长的最大值

FILEGROWTH=10%--主数据文件的增长率

)

LOG
ON

(

NAME='employee1_log',

FILENAME='E:\SQL\employee1_log.ldf',

SIZE=3mb,

MAXSIZE=10mb,

FILEGROWTH=1mb

),

(

NAME='employee2_log',

FILENAME='E:\SQL\employee2_log.ldf',

SIZE=3mb,

MAXSIZE=10mb,

FILEGROWTH=1mb

)

GO

USE
master --设置当前数据库为master,以便访问sysdatabase表

GO

IF
EXISTS(SELECT *
FROM sysdatabases WHERE name='stuDB')

DROP DATABASE stuDB

CREATE
DATABASE stuDB

ON
PRIMARY

(

NAME='stdDB2_data',--主数据文件的逻辑名

FILENAME='E:\SQL\stuDB2.mdf',--主数据文件的物理名

SIZE=3mb,--主数据文件的初始大小

MAXSIZE=10mb,--主数据文件的增长的最大值

FILEGROWTH=10%--主数据文件的增长率

)

LOG
ON

(

NAME='stuDB_log',

FILENAME='E:\SQL\stuDB2_log.ldf',

SIZE=3mb,

MAXSIZE=10mb,

FILEGROWTH=1mb

)

GO

说明:EXISTS()语句:检测是否存在stuDB数据库如果存在stuDB数据库,则删除

--创建表

USE
stuDB--将当前数据库设置为stuDB

GO

CREATE
TABLE stuInfo

(

stuName VARCHAR(20)
NOT NULL, --姓名,非空(必填)

stuNo CHAR(6)
NOT NULL, --学号,非空(必填)

stuID NUMERIC(18,0),

stuSeat SMALLINT IDENTITY(1,1),
--座位号,自动编号

stuAddress TEXT --住址,允许为空,即可选输入

)

GO

说明:NUMERIC
(18,0)

代表18位数字,小数位数为0

IDENTITY(起始值,递增量)

5
约束

目的:确保表中数据的完整型

常用的约束类型:

1) 
主键约束(Primary Key
Constraint):要求主键列数据唯一,并且不允许为空

2) 
唯一约束(Unique
Constraint):要求该列唯一,允许为空,但只能出现一个空值。

3) 
检查约束(Check
Constraint):某列取值范围限制、格式限制等,如有关年龄的约束

4) 
默认约束(Default
Constraint):某列的默认值,如我们的男性学员较多,性别默认为“男”

5) 
外键约束(Foreign Key
Constraint):用于两表间建立关系,需要指定引用主表的那列

添加约束的语法:

ALTER TABLE
表名

ADD CONSTRAINT
约束名 
约束类型 
具体的约束说明

其中,约束名的取名规则推荐采用:约束类型_约束字段

a)

主键(Primary
Key)约束:如
PK_stuNo

b)

唯一(Unique
Key)约束:如
UQ_stuID

c)

默认(Default
Key)约束:如
DF_stuAddress

d)

检查(Check
Key)约束:如
CK_stuAge

e)

外键(Foreign
Key)约束:如
FK_stuNo

示例

--给stuInfo表添加约束

ALTER
TABLE stuInfo

ADD
CONSTRAINT PK_stuNo PRIMARY KEY
(stuNo)

ALTER
TABLE stuInfo

ADD
CONSTRAINT UQ_stuID UNIQUE(stuID)

ALTER
TABLE stuInfo

ADD
CONSTRAINT DF_stuAddress

DEFAULT
('地址不详')

FOR stuAddress

ALTER
TABLE stuInfo

ADD
CONSTRAINT CK_stuAge

CHECK(stuNo
BETWEEN 1 AND 60)

ALTER
TABLE stuInfo

ADD
CONSTRAINT FK_stuNo

FOREIGN
KEY(stuNo)
REFERENCES stuInfo(stuNo)

GO

SQLServer 学习笔记之超详细基础SQL语句 Part 9的更多相关文章

  1. SQLServer 学习笔记之超详细基础SQL语句 Part 3

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 2------------------- 13. 使用compute对查 ...

  2. SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 11------------------- 现在,我们希望从 " ...

  3. SQLServer 学习笔记之超详细基础SQL语句 Part 11

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 10------------------- DECLARE @myavg ...

  4. SQLServer 学习笔记之超详细基础SQL语句 Part 10

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 9------------------- 删除约束的语法 ALTER T ...

  5. SQLServer 学习笔记之超详细基础SQL语句 Part 8

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 7------------------- --触发器str_trigge ...

  6. SQLServer 学习笔记之超详细基础SQL语句 Part 7

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 6------------------- 29 存储过程和触发器 存储过 ...

  7. SQLServer 学习笔记之超详细基础SQL语句 Part 6

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 5------------------- 28 聚合函数 --求平均分 ...

  8. SQLServer 学习笔记之超详细基础SQL语句 Part 5

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 4------------------- 21使用默认 默认(也称默认值 ...

  9. SQLServer 学习笔记之超详细基础SQL语句 Part 4

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 3------------------- 17 带比较运算符的嵌套查询 ...

随机推荐

  1. odoo开发基础--模型之基本字段类型

    定义模型的时候,和python的其他框架类似,可以对比Django,同样是一个模型即:一个class对应生成数据库中的一张表, 只是odoo的继承机制比较复杂一点,在日常的开发中,定义模型的时候, 基 ...

  2. Storm的acker确认机制

    Storm的acker消息确认机制... ack/fail消息确认机制(确保一个tuple被完全处理) 在spout中发射tuple的时候需要同时发送messageid,这样才相当于开启了消息确认机制 ...

  3. oc中的枚举

    如果一个变量只有几种可能的值,比如星期有几天,一年有几个季节等.这个时候可以用枚举变量. 先定义类型再定义变量,如:enum siji{chun,xia,qiu,dong} 也可以定义匿名:enum{ ...

  4. 轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能 demo

    最新版wangEditor: 配置说明:http://www.wangeditor.com/doc.html demo演示:http://www.wangeditor.com/wangEditor/d ...

  5. TensorFlow object detection API应用--配置

    目标检测在图形识别的基础上有了更进一步的应用,但是代码也更加繁琐,TensorFlow专门为此开设了一个object detection API,接下来看看怎么使用它. object detectio ...

  6. Java设计模式之工厂方法模式(转) 实现是抽象工厂?

    Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站   文本Tag: 设计模式 Java [IT168 技术文章]         ...

  7. 数据序列化导读(3)[JSON v.s. YAML]

    前面两节介绍了JSON和YAML,本文则对下面的文章做一个中英文对照翻译. Comparison between JSON and YAML for data serialization用于数据序列化 ...

  8. linux下更改时区

    起因: 装系统时一走神把时区选错了,导致时间不正确,但是又不想重装,所以找了一下解决方法. 解决方案: 我的环境时这样的,其他的环境没试过. [root@werserver01 ~]# cat /et ...

  9. little eye 精简版

    https://github.com/salomon1184/PerfMan/ 代码没整理,特乱 来源于一次聊天,一天半做完,考虑继续深做

  10. java 写法推荐

    1. for循环 for (int i = 0; i < list.size(); i++) { int item = list.get(i); System.out.println(" ...