因本人较懒,有些图片缺失和东西写的比较简单,请多包涵
编码规范: 命名的规范(入乡随俗)
编码习惯:
团队合作: 团队配置管理软件: (TFS SVN)
第一章
更改身份验证模式:服务器 属性 安全性
Master: 记录所有系统信息
Model: 模板
Msdb: 自动备份
Tempdb: 临时资源
常用的数据库对象: 表, 视图, 存储过程, 触发器, 用户自定义的函数, 索引等
文件构成:主数据文件(主数据文有且只有一个.mdf), 次要数据文件.ndf(0 ~ n个), 事务日志文件(增删(修改一条)改(修改两条).ldf)(至少一个)
第二章
Catalog(数据库)
数据库就是数据的仓库
由表, 关系, 操作对象组成
数据存储在表中(数据以记录的形式存在表中, 记录是客观存在的一个事物, 表的列)
定义表: 先定义表结构(列或字段 数据类型 约束)(从对象来的)
定义类: 属性(字段), 方法(class 类名 { })(从对象来的)
行(record) 列(colum) 字段(field)
常用数据类型
Unicode(用两个字节的长度 存储一个字符)
Char比varchar效率高
数据完整性: 实体完整性(对象: 数据行 要求所有行都有唯一的标识符(主键))(实施手段: 主键约束, 唯一约束, 标识列和GUID列),
域完整性(列, 字段)(数据类型, 格式, 值域范围, 是否允许为空)(限制数据类型, 检查约束, 外键约束, 默认值和非空约束),(字符, datatime加单引号)
参照完整性(引用完整性)(主外键关系)(不允许引用不存在的实体),
用户自定义完整性(多用触发器实现)(指数据的精确性和可靠性)
主键是数据行的唯一标识, 不重复的列才能当主键
业务主键 逻辑主键
主键选取原则(量少性, 稳定性)
GUID数据类型(uniqueidentifier)(newid()函数调用)
在字表中创建主外键关联(外键引用主表的主键)
(删除数据truncate, 主表用不了)
外键在子表中建 (自引用是允许的(递归中可以出现))
第三章
SQL
T-SQL (微软的), PL/SQL(Oracle的(甲骨文公司的))
数据查询语言: DQL(query: 查询)select(侧重对数据的操作)
数据操作语言: DML(insert, update, delete)(对数据库)
事物处理语言: TPL (begin transaction 开始事务, commit提交, rollback回滚)
数据控制语言: DCL (grant授权 revoke取消授权)
数据定义语言: DDL (create(创建) drop(删除) alter(更新/修改)(定义数据库及其对象(侧重结构))
指针控制语言:CCL (declare cursor(声名游标), fetch into(获取游标中的数据到变量中))
sys.sysdatabases
DB_ID(判断数据库)
创建表
1. 确定表结构
2. 确定每列的数据类型
3. 添加约束
4. ...
OBJECCT_ID(判断表)
ALTER TABLE
add constraint 添加约束
drop constraint
PK主键(primary key)
UQ唯一(unique)
CK检查(check)
DF默认
FK外键(foreign key references(引用))
第四章
insert: 插入语句
批量插入
--创建数据库
use master;
--select * from sys.sysdatabases;
go
if DB_ID(\'StuDB\')is not null drop database StuDB;
go
create database StuDB;
go
--创建表
use StuDB; --打开数据库
go
--select * from sys.sysobjects;
if OBJECT_ID(\'t_classInfo\') is not null drop table t_classInfo; --t_bassic_classInfo TBa_ClassInfo
go
create table t_classInfo
(
ClassId char(3) not null primary key,
ClassName varchar(30) not null,
Comment varchar(150)
)
if OBJECT_ID(\'t_student\') is not null drop table t_student;
go
create table t_student
(
StuId char(3) not null primary key,
StuName varchar(30) not null,
Birthday date,
Gender varchar(4),
ClassId char(3)
)
--添加约束
alter table t_student
add constraint DF_t_student_Gender default(\'男\') for Gender;
alter table t_student
add constraint CK_t_student_Gender check(Gender in (\'男\', \'女\', \'未知\'));
alter table t_student
add constraint FK_t_student_ClassId foreign key (ClassId) references t_classInfo(ClassId);
--科目表 t_course(CourseId, CourseName, Comment)
if OBJECT_ID(\'t_course\') is not null drop table t_course;
go
create table t_course
(
CourseId char(3) not null primary key,
CourseName varchar(30),
Comment varchar(150)
)
go
--成绩表t_score(Id, StuId, CourseId, Score)成绩大于等于0 小于等于100 兼容一位小数
if OBJECT_ID(\'t_score\') is not null drop table t_score;
go
create table t_score
(
Id int identity primary key,
StuId char(3), --references t_student(StuId),
CourseId char(3), --references t_course(CourseId),
Score numeric(4,1)
)
go
--添加约束
alter table t_score
add constraint FK_t_score_StuId foreign key (StuId) references t_student(StuId);
alter table t_score
add constraint FK_t_score_CourseId foreign key (CourseId) references t_course(CourseId);
alter table t_score
add constraint CK_t_score_Score check(Score >= 0 and Score <= 100)
select * from t_classInfo
insert into dbo.t_classInfo(ClassId, ClassName) values(\'C01\',\'Web班\');
insert into dbo.t_classInfo(ClassId, ClassName) values(\'C02\',\'.net班\'),
(\'C03\',\'java班\'),
(\'C04\',\'php班\');
--把查询结果插入到现有表中(insert select(表必须预先存在))
insert into dbo.t_classInfo(ClassId, ClassName)
select \'\',\'\' union
select \'\',\'\' union
select \'\',\'\';
--用查询结果生成新表
--不使用create语句创建一个表结构和t_classInfo表结构相同的表,里面不插入任何数据
select * from t_classInfo
select top 0 * into t_class from t_classInfo
drop table t_class
select * from t_class
--#表名(临时表(保存在服务器内存中 会话结束会自动销毁))
--修改数据 不加where就是修改全表数据
update t_classInfo set ClassName = \'DotNet班\',comment = \'123\' where ClassId = \'C02\';
--删除数据行
delete from t_classInfo where ClassId = \'C04\';
--*代表所有字段
第五章
is null
is not null(正规)(获取非空数据)
not + 字段 + is null (对条件取反)
规格:在sql语句中 如果字符串中有”’”,需要使用两个”’”进行替代
distinct:去除重复记录
union: 将多个查询结果合并成一个,自动去除重复行(加all 保留重复行)
使用union 进行数据排序要写在最后一个select中 并且只能使用第一条语句中出现的字段
表联结
交叉连接(cross join)
内联结(inner join) 执行原理:首先执行cross join(进行笛卡儿积产生笛卡尔集)使用on中的条件进行过滤(等值连接)
外联结:
左外联结: (left join)
右外联结: (right join)