Sql Server(1)数据库基础

一:核心数据库概念简绍(掌握)

1.关系型数据库

①字段(又叫域和属性)

行(又叫记录和实列)

②DBMS:数据库管理系统(SQL Server的如SSMS就像我们的navat)

③RDBMS:关系型数据库管理系统

④DataBase Server  数据库服务器

SQL Server的如SSMS就像我们的navat

2.常见的数据库组件

①:--单行注释   /*  多行注释

②:大小写不敏感

③:sql命令不支持全角字符

④:可以在查询分析的时候选中哪行执行哪行

---------------------------------------------

系统数据库:master:元数据存储的地方,记录所有有关sql server的系统信息,包括:初始信息,登录账户

                   model:模板

                   msdb:比如我们在一周时间进行数据库的更新(专供sql server代理程序使用的数据库,它存放有关警告,作业,数据备份,数据复制)

                   tempdb:用来存放所有暂时的数据表和存储过程(一定要有一定的(磁盘空间)存储空间)

二:关系概念(理解)

数据建模(建立表与表之间的关系)那么怎么判断数据建模符合呢?(那就是范式)

属于第三范式就是符合了:

  1. 第一范式:(1NF)无重复的列   无重复的列,是最基本的范式,所有字段都是不可分解的原子值-->列不可分

  2. 第二范式:(2NF)属性完全依赖于主键  数据不存在部分依赖的情况,一张表中所有列都依赖主键-->不能部分依赖

  3. 第三范式:(3NF)属性不依赖于其它非主属性   数据每一列都和主键直接相关,不能间接相关-->不能存在传递依赖

       就是第一范式要求原子不可分割,就比方说一个东西不能拆分用两个东西表示 第二范式是消除部分依赖,第三范式是消除传递依赖

1.第一范式:原子性(每一列都不重复)符合1NF的关系中的每个属性都不可再分。

 

 

 修改后:

 

 

 

2.第二范式:其改进是,2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖第一范式基础上(其实就是每一行有一个主键和别的行区分),不存在非主属性对于码(码)的部分函数依赖   解决方法进行拆表

                    部分函数依赖(指的是我们的码有多个,其中有些非主属性可以通过多个码中一个就可以进行确定)

                   组成码的所有属性就是表的主属性(主键),其它就是非主属性  

                    码:码可以是一个字段也可以是多个字段的组合

3.第三范式:在第二范式的基础上,删除所有与主键无关的列(消除传递依赖)

有时候我们不得不在第二范式中:因为我们在第二范式的查询效率会高

第三范式容易造成数据一致性问题(比如某个表的数据有点差错影响其他的表)

4.数据引用完整性

约束(constraint)
定义:在建表时,为某些列添加特定的规则,保证数据库的数据满足用户的要求。添加约束之后,在往表中(插入、更新)数据时,如果数据不满足约束,则该条语句不能执行
分类:
1、非空约束 not null
2、唯一键约束 unique(若有值则唯一,若没值,null可以重复)
3、自定义检查约束 check(设定自定义检查条件)
4、主键约束 primary key(表示主列的约束关系)
5、外键约束 foreign key(表示两张表之间的关系)

主键的约束(一般大型企业不会用)在当前表唯一,外键约束:在其主表必须存在(一般大型企业不会用),级联删除

三:创建数据库与数据库对象(掌握)

数据类型:1.数字类型(整数int bigint smallint tinyint,精确数值decimal(20,2) numeric,日期datetime,字符类型Unicode字符类型什么都可以存储(因为存储的字节大 比如多国语言)nchar  (固定的) nvarchar(可变的))

 

索引:主键设置索引,频繁用到的字段设置索引,连接俩个表的字段设置索引,频繁的排序和过滤

点开表中的索引,后点击新建索引-》非聚集索引

 脚本sql(将我们数据库中的表给客户,将我们自己的脚本sql复制就行):打开表后进行编写表脚本为

四:DML(掌握)

动作select name,地址from PO,条件where id=0;

表别名:可以运用到sql语句的任意

字段别名:只可以在我们的最后显示的时候用到,不能在别的地方(比如where中)

---------------------------------------------------------------------------------

delete  字段 from 表名  where  条件

--------------------------------------------------------------------------------

select * into  a from b ;将我们的b中数据,放入到a中

区别***:delete unit_bak where funitname=N'张';(为啥我们加N呢,因为我们创建的时候是Unit类型的)

--------------------------------------------

(动作)insert into   目标(表)(列1,列2)   values(列1值,列2值);

 

 上面一般不这样一次性插入所有的数据,我们一般将我们插入的字段要写清楚

-------------------------------------------------------------------------

update 表名   set name1=?, name2=?  where 条件;

 

 因为是Unit格式的,所以要加入N

用一个表更新另一个表(表的关联):

底下的from是将 我们的数据连接起来看结果,然后进行from前面的更新(重点就是建立俩表的关联(就是从笛卡尔积中找到符合条件的),用inner join)

 

 

五:表关联的俩个条件

①在from子句中定义表连接

②联接语法:A inner join B  on 联接条件

posted @ 2021-07-14 19:58  iLisa  阅读(208)  评论(0编辑  收藏  举报