当前位置:文档之家› mysql_完整性约束条件

mysql_完整性约束条件

静态列级约束:是对一个列的取值的说明
对数据类型的约束:数据的类型、长度、单位、精度等;
Mysql支持数据类型的名称后面指定该类型的显示宽度;虽设置显示
宽度,但仍然可以插入大于显示宽度的值。

varchar() 存储一个字符,使用2字节表示实际数据长度,一共需要3bytes物理存储空间。

VARCHAR(N)中,N指的是字符的长度
对数据格式的约束:YYYY-MM-DD
对于日期格式可以以字符串直接insert .
字段约束:
1、NULL和NOT NULL修饰符;mysql默认情况下指定字段为NULL修饰符。

2、default修饰符
可以使用DEFAULT修饰符为字段设定一个默认值。

当插入记录时,忘记传该字段的值,MySQL会自动为您设置上该字段的默认值。

虽能创建成,但有警告。

如果指定字段可以为NULL,则mysql为其设置默认值NULL。

如果NOT NULL,则,MySQL对于数值类型插入0。

3、auto_increment修饰符(只适用于int字段,表明自动为该字段生成一个数(每次在上一次生成的数值上加1))
在插入记录时,默认情况第一条记录的值从1开始自增。

因此,该字段不可能出现相同的值。

注意:通常情况下,auto_increment 作为id字段的约束条件,并将id 字段作为表的主键
不加primary key ,则创建不成功
从主键(primary key )、外键(foreign key)、唯一性约束(unique):1、设置段主键
作用
1、唯一标识一行;
2、作为一个可以被外键所有效引用的对象(非空);
3、保证数据的完整性;
创建表的时候加上primary key
1、
2、
但如果建立表后已经输入记录,表中的记录要设为主键的字段出现相同的,则此时不能设置主键成功。

2、设置多个字段的主键;
1、创建表的时候设置
此时的主键是由多个属性组合而成,设置时应该统一设置。

下面不能成功创建主键:(这样就与主键的唯一性相矛盾)
2、表已经创建好
A在创建好的表中已有一个主键,此时再创建主键(主键的唯一性)
则不会成功。

B创建好的表中没有设置主键
会成功创建主键。

外键:通过外键字段将父表与子表建立关联关系
作用:1、外键约束主要维护两个表之间的数据的一致性
2、表的外键就是另一个表的主键,外键将两个表联系起来。

一般情况下,要删除一张表中的主键必须首先确保其他表中没有相同的外键
设置外键的原则:必须依赖与数据库中已经存在的父表的主键;外键可以为空值。

“FOREIGN 约束”
外键定义满足的条件:
相关联的所有表必须是innoDB型引擎;
外键字段是索引类型中的一种(外建索引);
相关联的字段必须采用类似的数据结构。

比如父表的字段是TINYINT类型,则子表只能采用TINYINT、SMALLINT、INT、BIGINT等几种类型。

查询建立的表的状态信息:
一、相关联的所有表必须是innoDB型引擎:
1、创建表时设置外键(example3是子表,example2是父表.example3表中的stu_id和course_id依赖于父表的主键stu_id和course_id)
注意:插入(insert into)数据时,应先将父表中的数据插入,才能向子表中插入数据,并且插入子表中的数据要一致。

注意:删除时,先删除子表中的行(一条记录),才可以删除父表中对应的记录。

否则不能删除。

2、创建好后进行设置外键
Stu_info 是父表,study是子表。

注意:父表中的主键创建先于子表中的外键
二、创建表时并指定表为innoDB型的引擎
create table 表名(字段列表)engine=存储引擎名;
注:在指定之前需要用showengine;查看所支持的引擎,Support 列为是否支持!
三、创建完后修改表的搜索引擎为innoDB型
alter table 表名engine=存储引擎名;
级联:
级联delete:
删除时:
结果:
级联update:
结果:
查看外键:show create table 表名;
删除外键:alter table 表名drop foreign key 外键名;
cascade 表示父表在更新或删除时,更新或删除子表对应记录
set null 表示父表在更新或删除时,子表对应字段被设置为NULL;RESTRICT 相当于no action 既不进行任何操作,拒绝父表update外键关联列,delete记录。

注意:若delete from orders where (条件);
//此时只是将在orders(子表)满足条件的条件的记录删除。

对于父表并未影响;
若delete from users where (条件);
//此时将父表与子表满足条件的记录都删除;(区别于未使用级联删除时,若先删除父表中的记录就会出错)
表的唯一性约束unique
唯一性约束将保证所有的记录中该字段的值不能重复出现。

可以为一个或多个字段定义unique约束。

1、创建表时并添加unique约束;
2、创建表后添加unique约束
alter table tb_simple_vote add unique(outer_id,outer_type);
主键(primary key)与唯一性(unique)的不同点:
1、唯一性约束所在的列允许空值,但主键约束所在的列不允许空值;
2、唯一性约束强制所在指定的列上创建一个唯一性索引,在默认的情况下,创建唯一性的非聚集索引,但也可以指定所创建的索引是聚集索引。

3、建立主键的目的是为了让外键引用。

4、一个最多只有一个主键,但可以有很多唯一键。

相关主题