SQLServer 学习笔记之超详细基础SQL语句 Part 9
Sqlserver 学习笔记
-----------------------接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的更多相关文章
- SQLServer 学习笔记之超详细基础SQL语句 Part 3
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 2------------------- 13. 使用compute对查 ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 11------------------- 现在,我们希望从 " ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 11
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 10------------------- DECLARE @myavg ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 10
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 9------------------- 删除约束的语法 ALTER T ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 8
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 7------------------- --触发器str_trigge ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 7
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 6------------------- 29 存储过程和触发器 存储过 ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 6
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 5------------------- 28 聚合函数 --求平均分 ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 5
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 4------------------- 21使用默认 默认(也称默认值 ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 4
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 3------------------- 17 带比较运算符的嵌套查询 ...
随机推荐
- (转) JVM Crash with SIGSEGV - problematic frame - libzip.so
原文:https://stackoverflow.com/questions/38057362/jvm-crash-with-sigsegv-problematic-frame-libzip-so h ...
- php -- 文件上传下载
----- 026-upload.php ----- <!DOCTYPE html> <html> <head> <meta http-equiv=" ...
- 《第一本Docker书》
Docker简介 Docker依赖写时复制(copy-on-write),使修改应用程序非常迅速. Docker推荐单个容器只运行一个应用或进程,鼓励面向服务的架构和微服务架构. Docker的核心组 ...
- java学习--高效的除模取余运算(n-1)&hash
没有测试过使用取余运算符和位运算符都做同一件事时的时间效率! 取余运算符% 如3除以2取余数 a = a%; 结果为1 上面是传统的方式进行求余运算. 需要先将10进制转成2进制到内存中进行计算,然后 ...
- 老司机的应用级监控——spring actuator(转)
转自:https://www.jianshu.com/p/c043d3c71f47 什么是spring actuator? 这是一个研发老司机与运维同学都会非常喜欢的东西,随着点融集团的扩张,点融网的 ...
- GoogLeNetv3 论文研读笔记
Rethinking the Inception Architecture for Computer Vision 原文链接 摘要 卷积网络是目前最新的计算机视觉解决方案的核心,对于大多数任务而言,虽 ...
- Cglib invoke以及invokeSuper的一点区别
简单记录下,解决的一个问题,Cglib的invoke和invokeSuper的区别: 简而言之,invoke方法调用的对象没有增强过,invokeSuper方法调用的对象已经是增强了的,所以会再走一遍 ...
- Eclipse 处理 Console 打印信息自动删除
开发中,特识是需要项目运行打印日志很长的时候需要查看打印的日志, Eclipse没经过设定的话,会自动80000行之前的日志记录. 想要日志一直打印下去处理方法: Preferences --> ...
- PowerBuilder编程新思维2:嵌入(Thread多线程)
PowerBuilder编程新思维2:嵌入(Thread多线程) 在PB中使用多线程,在网上有大量的文章介绍.不过深入研究并试着给出更易用的模型的,目前还只有"路人甲cw"的一篇& ...
- [NOI 2016]循环之美
Description 题库链接 给出十进制下的 \(n,m,k\) ,求 \(\frac{i}{j},i\in[1,n],j\in[1,m]\) 在 \(k\) 进制下不同的纯循环小数个数. 纯循环 ...