关系模型的完整性是对关系的某种约束条件,这些条件实际上是现实世界的要求。关系模型有三类完整性约束:
- 实体完整性:主码的值不能为空
- 参照完整性:如果关系R2的外码与关系R1的主码相对应,则外码X的每个值(如果不取空值)必须在R1的主码值中找到
- 用户定义完整性:某一具体应用所涉及的数据必须满足的语义要求
在关系模式中各属性之间常常会相互依赖、相互制约的现象,称为函数依赖(Functional Dependency)。
SQL语言按用途可分为3个组成部分:
- 数据定义语言DDL。在数据库系统中,数据库、表、视图、索引等都是数据库对象,用于定义这些对象的SQL语句称为DDL;
- 数据处理语言DML。用于对数据对象中的数据进行插入、修改和查询操作的SQL语句称为DML。
- 数据控制语言DCL。用于实现数据库总数据完整性、安全性、一致性等控制的SQL语句称为DCL。
不是每个表中都需要主键。一般,如果多个表之间进行连接操作时需要用到主键。因此不需要为每个表建立主键,甚至有些情况最好不使用主键。
外键约束不能跨引擎使用。
AUTO_INCREMENT约束的字段值,表示新增的记录,如果没有设定相应属性,则该属性的值为前一条插入记录中值+1;
HAVING关键字和WHERE关键字都是用来过滤数据的,重要的一点区别是,HAVING在数据分组(GROUP)之后进行过滤来选择分组,而WHERE在分组之前用来选择记录,WHERE排序的记录不再包括在分组中。
数据库的全局属性只包含:默认字符集和排序规则;可以用ALTER
来更改。
ALTER DATABASE [db_name] [CHARACTER SET charset] [COLLATE collation]
其中charset表示服务器支持的某个字符集名字,collation表示与该字符集兼容的某种排序规则。
MySQL的存储引擎
存储引擎 | 描述 |
---|---|
ARCHIVE | 用于数据存档的引擎(行被插入后就不能更改了) |
BLACKHOLE | “黑洞”:会丢弃写操作,读操作会返回空内容 |
CSV | 这种存储引擎在存储数据时,会以逗号作为数据项之间的分隔符 |
FEDERATED | 用来访问远程表的存储引擎 |
InnoDB | 具备外键支持功能的事物处理引擎 |
MEMORY | 置于内存的表 |
MERGE | 用来管理由多个MyISAM表构成的表集合 |
MyISAM | 主要的非事物处理存储引擎 |
NDB | MySQL集群专用存储引擎 |
表的磁盘存储方式:无论管理表的存储引擎是哪一种,每个表都只会有一个对应的.frm
文件。各个存储引擎还可能会为表再创建几个特定的文件,用以存储表的内容。每个表的与之相关的所有文件都集中存放在包含该表数据库所对应的而目录里。
存储引擎 | 磁盘文件 |
---|---|
InnoDB | .ibd(数据和索引) |
MyISAM | .MYD(数据)、.MYI(索引) |
CSV | .CSV(数据)、.CSM(元数据) |
默认情况下,InnoDB引擎会把表的数据和索引存储在它的系统表空间里。也就是说,所有InnoDB表的内容都集中存储在一个共享的存储区域里——除非管理员对InnoDB进行了配置。
使用CREATE TABLE table IF NOT EXIST
时,MySQL不会把已有的表结构与欲建的表进行比较,即,只要同名表在数据库中存在,则不会新建table
。如果不想冒险,最好在CREATE TABLE
前使用DROP TABLE IF EXISTS
。