mysql学习笔记四

来源:互联网 发布:java 10 编辑:程序博客网 时间:2024/05/16 01:40

mysql维护数据的完整性

数据的完整性用于确保数据库数据遵从一定的
商业的逻辑规则。在oracle中,数据完整性可
以使用约束、触发器、过程三种方法来实现,
在这三种方法中,因为约束易于维护,并且具
有最好的性能,所以作为维护数据完整性的首选。

 维护数据的完整性—约束

约束用于确保数据库数据满足特定的商业规则。
在mysql中,约束包括: not null、unique,
primary key,foreign key,和check 五种.

(1)not null(非空)
如果在列上定义了not null,那么当插入数据时,必须为列提供数据。
字段名 字段类型 not null
(2)unique(唯一)
当定义了唯一约束后,该列值是不能重复的.但是可以为null。
字段名 字段类型 unique
(3)primary key(主键)
用于唯一的标示表行的数据,当定义主键约束后,该列不但不能重复而且不能为null。需要说明的是:一张表最多只能有一个主键,但是可以有多个unqiue约束。
字段名 字段类型 primary key    
注:一张表最多只能有一个主键,但是可以有多个unqiue约束。
(4)foreign key(外键)
   用于定义主表和从表之间的关系: 外键约束要定义在从表上,主表则必须具有主键约束或是unique约束.,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null (学生/班级 图示)
    FOREIGN KEY (本表字段名) REFERENCES 
主键表名(主键名或unique字段名)
如:
--外键指向的字段类型要一致
create table classes
(id varchar(64) primary key,
 name varchar(64)) type=innodb;
insert into classes values('1','aaa');
--创建student表
create table student
(id int primary key,
 name varchar(64) not null,
 classId varchar(32), --这里如果写成classId int 则不能创建外键成功!
 foreign key (classId) references classes(id)
);
 注:外键指向的表的字段,必须是primary key 或者是 unique
表的类型是innodb, 这样的表才支持外键
外键字段的类型要和主键字段的类型一致(长度可以不同)
外键字段的值,必须在主键字段中出现过,或者为null
(5)check
   用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000~2000之间如果不再1000~2000之间就会提示出错。
☞ oracle 和 sql server 均支持check ,但是mysql目前还不支持check ,只做语法校验,但不会生效。
   create table user4(id int primary key, name varchar(64) not null,
    sex varchar(6) check (sex in('man','woman')),
    salary int check (salary>=1000 and salary<=2000));
在mysql中实现check的功能,一般是在程序中控制,或者通过触发器完成。
 (6)删除约束
    当不再需要某个约束时,可以删除.
alter table 表名 drop {index|key} 约束名称;
在删除主键约束的时候,可能有错误,比如:
   alter table 表名 drop primary key
   这是因为有另外一张表的外键指向该主键,所以需要先删除指向该主键的外键,然后再删除该主键。
    删除外键:
   alter table 表名 drop foreign key fk_name