数据库的基本概念
1、数据库(关系型数据库)----存储效率高 查询效率高 其实存储在硬盘上的一个文件
MsSQLServer mysql等
2、数据库(内存型) 将数据存储在内存上 定时更新到硬盘上mangoDB redis
3、数据库管理软件(DBMS)DataBase Manage System
数据库管理软件 将命令发给数据库服务 数据库服务将命令执行
4、SQL--------结构化查询语言 用来操作数据库的
SQLServer -----也是一门语言 在SQL的基础上扩展
MSSQLSERVER -----微软的数据库
5、数据库和数据库服务器
存储数据的时候 分门别类的存储 不同的数据要存在不同的数据库中
l 6、数据库DataBase,不同类的数据应该放到不同的数据库中
- 便于对各个数据类别的进行个性化管理 (分布式部署)
- 避免命名冲突
- 安全性更高
l Table(表):关系数据库中的关系指的就是表。不同的货物要放到各自的货物架,将这种区域叫做“表”(Table)。不同的表根据放的数据不同进行空间的优化,找起来也方便。
l 列(Column)实体 记录 字段
l 用表格格式化数据:即便是引入了自动识别设备也很容易识别。
l MS SQLServer的每个数据库包含:
- 1个主数据文件(.mdf)必须。存储数据
- 1个事务日志文件(.ldf)必须。记录日志 对数据文件的每一个操作都记录在日志文件中 可以根据日志文件还原数据库到任意时刻
l 可以包含:
- 任意多个次要数据文件(.ndf)
- 多个事务日志文件
l 文件组:可将多个数据文件逻辑的分到一组,方便日后管理维护(备份、将表建在指定的文件组上等等。)
主外键
l 主键就是数据行的唯一标识。不会出现重复数据的列才能当主键。一个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都要设定主键
l 主键有两种选用策略:业务主键和逻辑主键。业务主键是使用有业务意义的字段做主键,比如身份证号、银行账号等;逻辑主键是使用没有任何业务意义的字段做主键,完全给程序看的,业务人员不会看的数据。因为很难保证业务主键不会重复(身份证号重复)、不会变化(帐号升位),因此推荐用逻辑主键。
1.主键的作用:唯一标识表中的一条记录。
2.选择多列同时作为一个主键→组合主键(复合主键).(一般不建议采用)
3.尽量选择单列作为主键:
1>必须唯一(不能有重复),
2>该列不能为空值。
3>比较稳定的列(不经常更新的,最好是建好以后再也不更新。)
4>选择主键列的时候,推荐使用“逻辑主键”(例如:自动编号、guid等。),不推荐“业务主键”(选择有实际意义的列作为主键(例如:身份证号,工号、学号等。))
Guid:
uniqueidentifier 数据类型
Select newid(),获取guid
Microsoft Windows SDK v6.0A → Tools → GUID生成器
主键的作用:用来唯一标识一条记录。
选择主键:1.不重复、不常改
主键(复合主键、组合主键)
1.唯一的。
2.不经常变化的(稳定)
3.大量字符串的列不适合作为主键
4.优先选择单列作为主键(避免使用组合主键)
5.优先使用逻辑主键(没有意义的),避免使用业务主键(身份证号、工号等。)
自动编号只会向前增长,不会倒退。
如果插入数据出错,自动编号也会增长,下次插入时,编号会“跳过”。
自动编号列是不能人为修改的。(一般情况)
l 数据冗余-数据重复出现 占用空间多。想修改厂家信息得修改很多行,每次录入新的货物的话必须把厂家地址、厂家电 话等信息重新录入一次。
l 数据冗余:
1.存储空间的浪费
2.更新数据的时候需要将表中所有原数据都更新。
l 拆成两张表。
减少数据冗余,保证数据库的正确性,但是查询麻烦了
l 假设两张表中都有主键,A表,B表。A表中的主键为AId。B表中的主键为Bid.
这时,A表中引用了B表中的Bid作为一列,这时,我们就叫A表位B表的外键表,而B表叫做主键表
系统数据库
Master
记录SQLServer系统的所有系统级别信息,所有的登录账户和系统配置设置,所有其他的数据库及数据库文件的位置 SQLServer的初始化信息
Tempdb
保存所有的临时表和临时存储过程 以及临时生成的工作表,每次服务启动时 这个数据库都会重新创建
Model数据库
用于在系统上创建的所有数据库的模板 例如 使用sql语句创建1个信的空白数据库是 将使用模板中规定的默认值来创建
Msdb
提供sqlserver代理程序调度警报 作业以及记录操作时使用 另外有关数据库备份和还原的记录 有会计量员在这个数据库里
Resource:记录其他数据库的信息
分类 |
备注和说明 |
类型 |
说明 |
|
二进制数据类型 |
存储非子符和文本的数据 |
Image |
可用来存储图像 |
|
文本数据类型 |
字符数据包括任意字母、符号或数字字符的组合 |
Char,8000 英文字母占一个字符,其他字符占两个 |
固定长度的非 Unicode 字符数据。固定长度的字符串 相对于可变长度的字符串来说效率要高一些,在数据 长度固定的情况下优先选用固定长度,省去了计算长 度的过程,提高效率 |
|
Varchar,8000 |
可变长度非 Unicode 数据 |
|
||
Nchar,4000 |
固定长度的 Unicode 数据 |
|
||
Nvarchar,4000 |
可变长度 Unicode 数据 |
|
||
Text varchar(max) |
存储长文本信息(指针,2G) varchar(max),大字符串类型可以保存非常多 的字符,但是对于这种类型的数据DBMS经常 将它们保存到单独的空间中,这就导致了数 据的保存和加载速度比较慢,因此除非必要, 否则不要使用。 |
|
||
Ntext nvarchar(max) |
Nvarchar(max)代替 |
|
||
日期和时间 |
日期和时间在单引号内输入 |
Datetime |
日期和时间 |
|
数字数据 |
该数据仅包含数字,包括正数、负数以及分数 |
int smallint |
整数 |
|
float real |
数字 |
|
||
货币数据类型 |
用于十进制货币值,money 和 smallmoney 数据类型精确到它们所代表的货币单位的万分之一。 |
Money(C#:double) |
|
|
Bit数据类型 |
表示是/否的数据 |
Bit |
存储布尔数据类型(1-true 0-false) |
|
据类型的意义:
1>提高效率。(减少空间,提高访问效率,‘1234567’如果用字符串存储占7个字节,如果用整型则占4个字节。);
2>能对数据进行正确的计算1+1,如果是整型则为2,如果为字符串则为11.
在SQLSERVER帮助上数据 数据类型,然后找 数据类型【SQL Server】 ---------------------》数据类型 [SQL Server]
Char(10),10表示10个字符。能存储10个ASCII字符和5个Unicode字符。长度为1-8000
存储10个ASCII字符,占10个字节
存储5个Unicode字符占10个字节。
Nchar(10),能存储10个ASCII字符或10个Unicode字符。长度为1-4000
存储10个ASCII字符占20个字节
存储10个Unicode字符也占20个字节。
Bit类型在管理器上只能用true和false
在写程序代码的时候只能用1和0
数据类型 (可用len()函数和Datalength()函数的来测试)
非unicode英文字母占一个字节 其他占两个字节
固定长度:char 如果存储成的数据不满指定的数 实际长度任然是设定的4个
可变长度:实际存储的字符数 有多长就有多长
不管
数据库实例:
在一个电脑上可以装多个数据库系统 用实例名来区分
默认实例 :mssqlserver
命名实例: chenjinsqlserver
192.168.10\ chenjinsqlserver 在服务器地址后面写一个斜杠在写上实例名字
自动增长的字段 这个记录放在master数据库中 删除一条记录的时候不会去减
清空表数据 并且重置自动增长列