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:用来存放所有暂时的数据表和存储过程(一定要有一定的(磁盘空间)存储空间)
二:关系概念(理解)
数据建模(建立表与表之间的关系)那么怎么判断数据建模符合呢?(那就是范式)
属于第三范式就是符合了:
-
第一范式:(1NF)无重复的列 无重复的列,是最基本的范式,所有字段都是不可分解的原子值-->列不可分
-
第二范式:(2NF)属性完全依赖于主键 数据不存在部分依赖的情况,一张表中所有列都依赖主键-->不能部分依赖
-
第三范式:(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 联接条件