完整性约束
3NF:三范式
- 第一范式:若关系R的所有属性均为简单属性,即所有属性不可在分,则满足第一范式。
- 第二范式:如果关系R满足第一范式,且非主键字段完全依赖于主键(例:可以根据主键查询出其他非主键信息),则关系R满足第二范式。
- 第三范式:如果关系R满足第二范式,且非主键之间不存在依赖关系,则关系R满足第三范式。
一个基本的关系型数据库要满足第一范式,一个完整的关系数据库要满足第三范式。
ER图
图形表示:
- 矩形:实体集
- 椭圆:属性
- 菱形:联系(集)
- 双椭圆:多值属性
- 虚线椭圆:派生属性
ER图通过线段链接
实体之间的联系:一对一,一对多,多对多。
常见关系型数据库:
Oracle:(大型企业)应用广泛,功能强大,分布式数据库系统,可移植性好(即跨平台,可以在不同的操作系统中使用)
MySQL:(中小型企业)开源,免费,于php组成经典的LAMP,快速,可靠,易于使用,可移植。
SQL server:web上最流行的用于存储数据的数据库;易用性好但只能在windows上使用。
数据库操作
创建数据库:create database 数据库名
删除数据库:drop database 数据库名
mySQL数据类型
-
数值型
int:整型
decimal:小数类型;小数格式(总长度,小数位)decimal(5,2)要求你传递过来的数据数据总长度是5位,小数位是两位。123.45 -
字符串类型
char(字符串的长度)定长
varchar(字符长度)变长
例:姓名 char(10) : tom–>3字符 即定义了10个字符使用了3个字符,剩余7个字符的空间系统不会释放会使用空格填满。
varchar(10) tom–>3 同样还剩下7个字符,系统会把剩下的空间释放。
数据库建表
查找数据库中的建表数量:SELECT count(*)TABLES,table_schema FROM information_schema.TABLES WHERE table_schema=‘数据库名’ GROUP BY TABLE_SCHEMA
数据库名一定要单引号引起来
表的创建语法:
Create table 表名(属性名1 数据类型 [约束条件],
属性名2 数据类型 [约束条件],
属性名3 数据类型[约束条件]);
- []中括号中的内容是可选内容
- 最后一个属性后没有逗号
修改表:
- 添加列(属性):alter table 表名 add 属性名 数据类型;
- 删除列(属性):alter table 表名 drop 属性名;
- 修改数据类型:alter table 表名 modify 属性名 数据类型;
- 修改字段名:alter table 表名 change 旧字段名 新字段名 数据类型;
实体完整性约束
目的:在表中至少有一个唯一的标识,主属性字段中不能为空,不能重复。一个表中有且只有一个主键约束。
主键约束:唯一,不重复,不能为空 (primary key)
- 创建表的同时创建主键约束
- 格式1: create table 表名(
列名 数据类型 primary key); - 格式2:主键约束的写法 PK_列名 create table 表名 (列名1 数据类型, 列名2 数据类型,constrat 主键约束的名字 primary key (列名1));
- 格式3:create table 表名(列名1 数据类型, 列名2 数据类型, primary key(列名1));
通过alter语句:
alter table 表名 modify 列名 数据类型 primary key
alter table 表名 add primary key (列名)
alter table 表名 add contraint 主键约束名 primary key(列名)
删除主键约束:
alter table 表名 drop primary key
唯一约束: unique
- 不允许有重复的值,保证数据的唯一性。
- 可以有空值
- 在一个表中可以有多个唯一约束
- 默认情况下,唯一约束的名字与列名保持一致
- 添加唯一约束索引,系统将会默认给这个列添加一个唯一索引(索引:等同于书的目录,将来能够加快数据的查询速度)
创建表的同时创建唯一约束 UN_列名
格式1:
create table (列名1 数据类型,
列名2 数据类型,
constraint 唯一约束的名字 unique(列名1)
);
格式2:
create table (列名1 数据类型 unique,
列名2 数据类型
);
删除唯一约束
格式:alter table 表名 drop index 唯一约束的名字
添加联合主键:联合主键,指的是把两个列看成是一个整体,这个整体是不为空,唯一,不重复
1.创建表的同时创建联合主键
格式:
create table 表名(
列名1 数据类型,
列名2 数据类型,
constraint 主键约束的名字 primary key(列名1,列名2)
);
格式三:
create table 表名(
列名1 数据类型,
列名2 数据类型,
primary key(列名1,列名2)
);
2.针对已经存在表,添加联合主键
格式:alter table 表名 add primary key(列名1,列名2);
格式:alter table 表名 add constraint 主键约束的名字 primary key(列名1,列名2);
3.删除主键约束格式:alter table 表名 drop primary key;
域完整性约束:保证在表中不会输入无效的数据
默认约束:defult 当默认约束修饰某个列时,即使该列不输入属于也会有一个默认的值。
-
创建表的同时创建默认约束
格式:
create table (列名1 数据类型 default ‘字符串类型或日期类型的默认值’,
列名2 数据类型 defualt 数值,
列名3 数据类型
); -
针对已经存在的表,添加默认约束
格式:alter table 表名 modify 列名 数据类型 default ‘值’; -
删除默认约束
格式:alter table 表名 modify 列名 数据类型
非空约束:not null 当前列必须有值
格式:
create table (列名1 数据类型 not null,
列名2 数据类型 not null ,
列名3 数据类型
);
通过alter(针对已经存在的表)
alter table 表名 Modify 列名 数据类型 not null ;
删除非空约束:
alter table 表名 modify 列名 数据类型。
参照完整性
外键约束foreign key
1.创建表的同时创建外键约束
主表(接下来创建新表的时候,要参考的表)
create table 表1(
列名1 数据类型 primary key;
列名2 数据类型
);
从表(外键约束所在表) FK_列名
create table 表名2(
列名1 数据类型,
列名2 数据类型,
constraint 外键约束的名字 foreign key(从表的列名1) references 主表的表名1(列名1)
)
2.针对已经存在的表,添加外键约束
alter table 从表表名 add constraint 外键约束的名字 foreign key (从表列名1) references 主表(主表列名)
3.删除外键约束
alter table 表名 drop foreign key 外键约束的名字。
注意:关于引用列的要求:从表的列和主表的列,列名可以不一样,但是这两个列的数据类型和内容必须保持一致。
删除时,更新时有四个选项 :
CASCADE 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录
NO ACTION 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。
RESTRICT 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。
SET NULL 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)