SQL数据库基础入门知识

因本人较懒,有些图片缺失和东西写的比较简单,请多包涵

编码规范: 命名的规范(入乡随俗)

编码习惯:

团队合作: 团队配置管理软件: (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)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxgwz.html