1-2数据库系统概述.ppt
1-2数据库系统概述博创华宇科技有限公司MySQL约束约束是保证数据库中数据完整性的基础。如:保约束是保证数据库中数据完整性的基础。如:保证记录的唯一性、有相互依赖数据时保证该数据证记录的唯一性、有相互依赖数据时保证该数据不被删除、不允许输入空值等。不被删除、不允许输入空值等。根据约束数据列的限制,约束可以分为:根据约束数据列的限制,约束可以分为:单列约束:每个约束只约束一列多列约束:每个约束约束多列数据MySQL的约束保存在的约束保存在information_schema数据库的数据库的table_constraints表中,可以通过该表查询约束信息表中,可以通过该表查询约束信息 博创华宇科技有限公司unique 唯一约束唯一约束是指定列或列组合不能重复,保证数据唯一约束是指定列或列组合不能重复,保证数据的唯一性。虽然唯一约束不允许出现重复的值,的唯一性。虽然唯一约束不允许出现重复的值,但是可以为多个但是可以为多个null。同一个表可以有多个唯一。同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束的时约束,多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束名称就默认和列名相同。候,如果不给唯一约束名称就默认和列名相同。同时同时mysql会为唯一约束的列上默认创建一个唯会为唯一约束的列上默认创建一个唯一索引一索引 博创华宇科技有限公司unique 唯一约束创建表级别约束语法:创建表级别约束语法:create table 表名(类列表,constraint 唯一约束名称 unique(使用逗号分割的列的列表,但如果只有一列不需要逗号);添加唯一约束:添加唯一约束:alter table 表名 add unique(列的列表);alter table 表名 modify 列名 数据类型及长度 unique;删除约束:删除约束:alter table 表名 drop index 约束名称;博创华宇科技有限公司primary key 主键约束主键约束相当于唯一约束主键约束相当于唯一约束+非空约束的组合,主键约束非空约束的组合,主键约束列不允许重复,也不允许出现空值;如果是多列组合的列不允许重复,也不允许出现空值;如果是多列组合的主键约束,那么这些列都不允许为空值,并且组合的值主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。每个表最多只允许有一个主键约束,建立不允许重复。每个表最多只允许有一个主键约束,建立主键约束可以在列级别上创建,也可以在表级别上创建。主键约束可以在列级别上创建,也可以在表级别上创建。MySQL的主键名总是的主键名总是primary。当创建主键约束时,系。当创建主键约束时,系统默认会在所在的列或列组合上创建对应的唯一索引统默认会在所在的列或列组合上创建对应的唯一索引.博创华宇科技有限公司primary key 主键约束列级模式创建:列级模式创建:create table 表名(列名 数据类型及长度 primary key,其他列的列表);如:create table classes(cid int primary key,cname varchar(20);表级模式创建:表级模式创建:create table 表名(列的列表,constraint 主键名称 primary key(使用逗号分割的主键列的列名列表,但如果只是一列不需要逗号));如:create table classes(cid int,cname varchar(20),constraint pk_cid primary key(cid);博创华宇科技有限公司primary key 主键约束alter删除主键约束删除主键约束alter table 表名 drop primary key;alter添加主键约束添加主键约束alter table 表名 add primary key drop primary key(使用逗号分割的主键列的列名列表,但如果只是一列不需要逗号));alter修改列为主键修改列为主键alter table 表名 modify 列名 数据类型及长度 primary key另外:可以使用另外:可以使用auto_increment自增模式设置自增模式设置主键为自动增加。主键为自动增加。博创华宇科技有限公司foreign key 外键约束外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。也就是说从表的外键值必须个字段或是两个表的两个字段之间的参照关系。也就是说从表的外键值必须在主表中能够找到或者为空。当主表的记录被从表参照时,主表的记录将不在主表中能够找到或者为空。当主表的记录被从表参照时,主表的记录将不允许被删除,如果要删除数据,必须先删除从表中依赖该记录的数据,然后允许被删除,如果要删除数据,必须先删除从表中依赖该记录的数据,然后才可以删除主表的数据。还有一种就是级联删除子表数据。注意:外键约束才可以删除主表的数据。还有一种就是级联删除子表数据。注意:外键约束的参照列,在主表中引用的只能是主键或具有唯一约束的列,假定引用的主的参照列,在主表中引用的只能是主键或具有唯一约束的列,假定引用的主表列不是唯一的记录,那么从表引用的数据就不确定记录的位置。对于同一表列不是唯一的记录,那么从表引用的数据就不确定记录的位置。对于同一个表可以有多个外键约束。个表可以有多个外键约束。博创华宇科技有限公司foreign key 外键约束创建外键约束创建外键约束(列级创建列级创建):主表:create table classes (cid int auto_increment primary key,classname varchar(20);从表:create table student (sid int auto_increment,sname varchar(20),constraint pk_sid primary key(sid),classes_cid int references classes(cid);博创华宇科技有限公司foreign key 外键约束表级别创建外键约束:表级别创建外键约束:create table student (sid int auto_increment primary key,sname varchar(20),classes_cid int,foreign key(classes_cid)references classes(cid);该创建方法没有指定约束名称,系统会默认为外键约束该创建方法没有指定约束名称,系统会默认为外键约束分配外键约束名称,命名分配外键约束名称,命名student_ibfk_n,其中其中student是表名,是表名,n是当前约束从是当前约束从1开始的整数。开始的整数。博创华宇科技有限公司foreign key 外键约束当然也可以指定约束名称:当然也可以指定约束名称:create table student (sid int auto_increment primary key,sname varchar(20),classes_cid int,constraint fk_classes_cid foreign key(classes_cid)references classes(cid);另外,对于多列的组合外键必须使用表级别的约束语法另外,对于多列的组合外键必须使用表级别的约束语法创建,要把多个列使用逗号分割,关联的列出现的位置创建,要把多个列使用逗号分割,关联的列出现的位置要匹配。要匹配。博创华宇科技有限公司foreign key 外键约束删除外键约束:删除外键约束:alter table 表名 drop foreign key 外键约束名增加外键约束:增加外键约束:alter table 从表名称 add foreign key(需要创建外键的列的列表)references 主表名称(主表关联列的列表);自关联自关联(树状表、递归表树状表、递归表)、自引用、自引用create table tree(tid int auto_increment primary key,tname varchar(30),parent_id int,foreign key(parent_id)references tree(tid);博创华宇科技有限公司主从表数据的级联删除级联删除:如果删除主表数据时,想实现与之关联的从级联删除:如果删除主表数据时,想实现与之关联的从表数据也删除,则需要在建立外键约束时在后面增加表数据也删除,则需要在建立外键约束时在后面增加on delete cascade或或on delete set null,前者是级联删除,前者是级联删除,后者是将从表的关联列的值设置为后者是将从表的关联列的值设置为null。create table student (sid int auto_increment primary key,sname varchar(20),classes_cid int,constraint fk_classes_cid foreign key(classes_cid)references classes(cid)on delete cascade on select cascade );数据规范三大范式:三大范式:第一范式(1st NF First Normal Form)第二范式(2nd NFSecond Normal Form)第三范式(3rd NF Third Normal Form)博创华宇科技有限公司第一范式(1st NF)第一范式的目标是确保每列的原子性第一范式的目标是确保每列的原子性如果每列都是不可再分的最小数据单元(也称如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式为最小的原子单元),则满足第一范式(1NF)第二范式(2nd NF)如果一个关系满足如果一个关系满足1NF,并且除了主键以外的其他列,都依赖于,并且除了主键以外的其他列,都依赖于该主键,则满足第二范式(该主键,则满足第二范式(2NF)第二范式要求每个表只描述一件事情第二范式要求每个表只描述一件事情RoomRoomStateRoomType第三范式(3nd NF)如果一个关系满足如果一个关系满足2NF,并且除了主键以外的其他,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式列都不传递依赖于主键列,则满足第三范式(3NF)RoomRoomRoomType表创建好后就可以操作表中的数据了,表创建好后就可以操作表中的数据了,表中数据的操纵分为:表中数据的操纵分为:增添数据(insert)删除数据(delete)修改数据(update)查询数据(select)表数据操作向表中插入数据向表中插入数据INSERT INTO 表名(列名1 int,varchar.)VALUES(1,nan值表达式,.)INSERT INTO 表名SET 列名=值表达式,.INSERT INTO 表名1(列名,.)SELECT*|列名,.FROM表名2注意:在MySQL3.0.2之后into关键字在INSERT中是可以省略的,但是基于标准考虑建议大家在书写时保留该关键字向表中插入数据更新表中数据更新表中数据UPDATE 表名 SET 列名=更新后的值,WHERE 条件子句删除表中数据删除表中数据DELETE FROM 表名 WHERE 子句更新和删除表中数据此此课件下件下载可自行可自行编辑修改,修改,仅供参考!供参考!感感谢您的支持,我您的支持,我们努力做得更好!努力做得更好!谢谢!