数据库管理系统(DBMS)特点
- MySQL
- 速度快,适合对数据要求并不是十分严谨的地方,去掉了很多中小型企业中不常用的功能
- MSSQLServer
- 与.net结合很好,只能运行在windows平台下,大数据量、大交易量表现不够好,功能比MySQL多
- DB2(大型)、Oracle(大型)、Access(文件)、 SQLite(极其轻量级数据库) 、Sybase等
- 对于开发人员来讲,大同小异
- 除Access、SQLServerCE、SQLite等文件型数据库外,大部分数据库需数据库服务器才能运行。学习开发时连接本机数据库,上线时数据库运行在单独的服务器
- SQL(语言)<>SQLServer<>MSSQLServer
数据库:数据的仓库
- 数据库文件
- 数据库包含两个文件:主数据文件(.mdf)、日志文件(.ldf)
- 除此之外还可包含:次要数据文件(.ndf)、其他日志文件(.ldf)
- 数据库文件的分离和附加
- 当前数据库中的表必须先进行分离才能拷贝到其他目录
- 附加数据库文件,文件数据加载到该库下的表
- 脱机、联机更加简便高效
- 附加权限不足时:数据库文件->属性->安全性->编辑->添加“everyone”->允许->应用->确定
- 数据库包含两个文件:主数据文件(.mdf)、日志文件(.ldf)
- 表:关系表,排货架
- column:列,字段
- row:行,元组
- primary key:主键,唯一标识表中的一条记录
- 分类:业务主键、逻辑主键(推荐)
- 选择依据
- 不能重复
- 不能为空或null
- 稳定的列:保存的数据不经常改变
- 与实际业务没有关系的列
- 单列作为主键(不推荐组合主键)
- 优先选择数字类型的列(不推荐字符串和数据类型大的列)
- 表中只能有一个主键
- 建立主键后默认会建立索引,磁盘储存顺序和主键列保持一致,因为实际物理顺序只有一种,所以一个表中只能有一个主键
- 外键
- 外键列:把数据拆分成两张表时每个表中都有自己的主键,其中一张表除主键外多了一列,这列用来引用另外一张表中的主键,这列就是第一张表的“外键列”
- 外键列中的数据必须是在另一张表的主键列中已经存在的数据
- 外键表:有外键列的表就叫做“外键表”
- 主键表:主键被引用的那张表就叫做“主键表”
- 外键列:把数据拆分成两张表时每个表中都有自己的主键,其中一张表除主键外多了一列,这列用来引用另外一张表中的主键,这列就是第一张表的“外键列”
- 数据冗余
- 问题
- 造成存储空间浪费
- 更新异常、删除异常
- 解决
- 把原来表中的数据拆分成多个表来存储
- 新问题
- 如何将这两张表中的数据关联起来
- 使用主外键将不同表中的数据关联起来
- 如何将这两张表中的数据关联起来
- 新问题
- 把原来表中的数据拆分成多个表来存储
- 问题
- sql server中的常用数据类型
- image类型
- 用来存储byte[]
- 字符串类型
- char、nchar、varchar、nvarchar、text、ntext、varchar(max)、nvarchar(max)
- 带n和不带n的区别
- 不带n的数据类型,存储中文等双字节字符,占用2个字节;存储英文,数字等每个字符占用1个字节
- 不带n的这些数据类型,长度最长可以设置为8000
- 带n的,无论存储中文、英文还是数字等,每个字符都是占用2个字节
- 带n的这些数据类型,长度最长可以设置为4000
- 不带n的数据类型,存储中文等双字节字符,占用2个字节;存储英文,数字等每个字符占用1个字节
- 带var和不带var的区别
- 带var的表示可变长度
- 可变长度会根据实际存储数据大小动态重新分配存储空间,节省存储空间
- 不带var的表示固定长度,不够的自动补空格
- 不用重新计算分配存储空间,更加高效
- 带var的表示可变长度
- text|ntext、varchar(max)|nvarchar(max)区别
- 前者为老版本数据库中的数据类型(2005之前)
- 单列最多可存储4G大小,多用于论文等的存储
- 帮助->索引->输入“数据类型”->SQL server数据类型中查看
- image类型
- 设置数据更改保存权限
- 工具->选项->Designers->“阻止保存要求重新创建表的更改”去掉钩