mysql怎么约束_mysql-约束

4、约束:1)、对一个列添加的约束叫列级约束。对两个或两个以上的列添加的约束叫做表级约束。2)、表级约束只能在字段后面添加,列级约束既可以添加在字段后面,也可以在最后添加。3)、非空、默认只存在列级约束。主键、唯一、外键都既有表级约束又有列级约束。4)、约束有:primary key (主键)、unique (唯一)、not null (非空) 、default (默认)、foreign key (外键)。5)、unsigned (无符号整数,从 0 到 int 的最大值)6)、auto_increment (自增长,必须与主键同时使用)1、主键:(primary key)

添加:一般添加主键的时候都会再添加 auto_incrementalter table tb_name add primary key(field_name);

删除:删除主键之前必须先删除 auto_incrementalter table tb_name drop primary key;2、外键:(foreign key)

外键的使用条件:

① 两个表必须是 Engine=InnoDB 表,MyISAM表暂时不支持外键

InnoDB 是MySQL的数据库引擎之一,其支持事务的4大特性并兼容事务。

ISAM(索引顺序存取方法:indexed sequential access method)也是一种数据库引擎在其中数据组织成固定长度的记录,并按顺序存储。

MYISAM 每个MYISAM在磁盘上存储成三个文件,每个文件都是以表明开头,扩张名支出文件的类型:

.frm:存储表定义

.MYD(MYData)存储表的数据

.MYI(MYIndex)存储表的索引

② 外键列必须建立了索引,MySQL4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立;

③ 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

外键的好处:

① 可以使得两张表关联,保证数据的一致性和实现一些级联操作。

外键就是:引用字段的值必须在被引用字段中存在,除非引用字段是NULL

被引用字段必须有唯一约束或主键约束。

添加:添加外键之前一定要保证引用字段和被引用字段的类型一致,以及数据库引擎一致(既:都为 InnoDB )alter table tb1_name add constraint fk_name foreign key (field1_name) referencestb2_name (field2_name);

建表时添加外键:foreign key (field1_name) referencestb2_name (field2_name);

删除:alter table tb_name drop foreign keyfk_name;

外键的完整定义:alter table tb1_name add constraintfk_nameforeign key(field_name)referencestb2_name (field_name)

match[simple/full]外键匹配模式:引用字段全不为空,则强匹配,否则,若匹配。on delete [cascade/no action]为cascade时,删除被引用表中数据时,引用表中的数据也会删除。为no action时,删除被引用表中的数据之前要先删除引用表中的数据,否则会返回错误。on update [cascade/no action]更新时时一样的。同上。

对于ondelete 和 on update来说,默认的都是 no action 。

当添加外键失败时,有两种情况:

① 数据类型不一致

② 数据库引擎不对,检查是不是InnoDB

自动键更新和删除:

外键可以保证新插入的记录的完整性,但是,如果在REFERENCES从句中已命名的表删除记录会怎么样?在使用同样的值作为外键的辅助表中会发生什么?

很明显,那些记录也应该被删除,否则在数据库中就会有很多无意义的孤立记录,MYSQL可以通过向FOREIGNKEY...REFERENCES修饰符添加一个ON DELETE或ON UPDATE子句简化任务,它告诉了数据库在这种情况如何处理孤立任务

关键字 含义CASCADE删除包含与已删除键值有参照关系的所有记录SET NULL修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)RESTRICT拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)

NO ACTION 啥也不做

请注意,通过ONUPDATE 和 ONDELETE规则,设置MYSQL能够实现自动操作时,如果键的关系没有设置好,可能会导致严重的数据破坏,

例如:如果一系列的表通过外键关系和ONDELETE CASCADE规则连接时,任意一个主表的变化都会导致甚至只和原始删除有一些将要联系的记录在没有警告的情况被删除,所以,我们在操作之前还要检查这些规则的,操作之后还要再次检查.

所有tables必须是InnoDB型 ,它们不能是临时表。

· 在引用表中,必须有一个索引,外键列以同样的顺序被列在其中作为第一列。这样一个索引如果不存在,它必须在引用表里被自动创建。

· 在引用表中,必须有一个索引,被引用的列以同样的顺序被列在其中作为第一列。

· 不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中, 这是因为对这些列的索引必须总是包含一个前缀长度。

· 如果CONSTRAINTsymbol 被给出,它在数据库里必须是唯一的。如果它没有被给出,InnoDB自动创建这个名字。3、唯一约束(unique)

添加:alter table tb_name add unique(field1_name,field2_name, ... );

删除:alter table tb_student drop index/keyname;4、自增长约束(auto_increment)

auto_increment 的添加和删除都是使用 change 来进行的。其实质是:新建一个同名字段来代替原有字段,但是在这个过程中primary key是不会改变的。

如元字段为:idint(10) unsigned primary keyauto_increment

删除:alter table tb_name change id id int(10) unsigned; (其结果为:id int(10) unsigned primary key)

添加:alter table tb_name change id id int(10) unsigned auto_increment; (其结果为:id int(10) unsigned primary keyauto_increment)5、change

列级约束都可以通过change 来实现修改。default 、unsigned 、not null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值