MySql中的完整性约束

约束·

  • 约束保证数据的完整性和一致性
  • 约束分为表级约束和列级约束
  • 约束类型包括:
    –NOT NULL
    –PRIMARY KEY
    –UNIQUE KEY
    –DEFAULT
    –FOREIGN KEY

列级约束:对一个数据列建立的约束
表级约束:对多个数据列建立的约束
列级约束既可以在定义时声明,也可以在定以后声明。表级约束只能在列定义后声明。

MySql中的完整性约束主要包括下面这些:
NOT NULL
非空约束,当我们给某个字段添加非空约束后,我们添加的记录的时候,就必须给该字段赋值,如果不赋值则会报错。

AUTO_INCREMENT
自动编号,且必须与主键组合使用;默认情况下,起始值为1,每次的增量为1.这样就可以保证该字段的唯一性。

PRIMARY KEY
主键约束,每张数据表只能存在一个主键,主键保证的记录的唯一性,主键自动为NOT NULL。如果我们只设置主键,而不设置AUTO_INCREMENT,当我们插入记录的时候,需要自己主动添加主键字段,并且主键字段不能重复。如果,我们给某个字段同时添加PRIMARY KEY和AUTO_INCREMENT。那么就不需要,我们主动添加该字段,mysql会自动的帮我们添加该字段。一般我们在一个表中通常会添加一个id字段并同时添加PRIMARY KEY和AUTO_INCREMENT。该字段没有任何具体的含义,主要是为了保证记录的唯一。

UNIQUE KEY
唯一约束,也可以保证表中某个字段的惟一性。与PRIMARY KEY不同的地方是唯一约束的字段可以为空值,而且一张表中可以同时存在多个唯一约束。而主键约束在一张表中只存在一个。

DEFAULT
默认约束,如果我们给一个字段添加默认约束。当插入记录时,如果我们给该字段赋值了,该字段的值即为我们设置的值。如果没有给该字段明确赋值,则自动赋予默认值。

FOREIGN KEY
1 具有外键列的表为字表,字表外键列参照的表为父表
2 父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
3 数据表的存储引擎只能为InnoDB
4 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
5 外键列和参照列必须创建索引。如果外键列不存在索引的话,Mysql将自动创建索引。

编辑数据表的默认存储引擎
在mysql的安装目录中找到my.ini,在my.ini文件中找到default-storage-engine=INNODB,可以看出默认的存储引擎INNODB,在这里我们也可以自己修改默认的存储引擎。修改后需要重启mysql服务。

外键约束的参照操作
1 CASCADE:从父表删除或更新行同时自动删除或更新子表中匹配的行
2 SET NULL:从父表删除或更新行同时设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
3 RESTRICT:拒绝对父表的删除或更新操作。
4 NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同

在实际开发过程中很少使用物理的外键约束,一般都使用逻辑的外键约束(即我们定义表的结构的时候,按照表的逻辑结构去定义,但不使用关键字FOREIGN KEY)。因为FOREIGN KEY 只支持INNODE引擎,不支持其他的引擎。

CREATE TABLE subject(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,   
username VARCHAR(20) UNIQUE NOT NULL   
);


CREATE TABLE user(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 创建id并设置AUTO_INCREMENT
username VARCHAR(20) UNIQUE NOT NULL,   将username添加唯一约束,并且非空
age SMALLINT UNSIGNED DEFAULT 20, 将age的默认值设置为20
sid INT UNSIGNED, 
FOREIGN KEY (sid) REFERENCES subject(id) ON DELETE CASCADE
); 将user表中的sid字段设为外键,参照subject表中的id字段,外键约束参照操作ON DELETE CASCADE, 即从父表中删除记录时,同时删除子表中相关联的记录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值