mysql 数据完整性

一、实体完整性(表中的一行或一条数据。行级约束

1、主键约束(数据唯一且不能为NULL。)

create table stu(id int primary key,name varchar(20));
create table stu(id int,name varchar(20),primary key(id));
create table stu(id int,name varchar(20),primary key(id,name)); #联合主键
alter table  stu add constraint primary key(id);

2、 唯一约束(指定列数据不可重复,允许为NULL。)

create table person(id int,name varchar(20) unique);

3、自动增长列(指定列数据自动增长)

复制代码
create table stu(id int primary key auto_increment,name varchar(20));

设置初始值及步长
create table stu(id int primary key auto_increment,name varchar(20))AUTO_INCREMENT=1000 ; #设置初始值
alter table stu auto_increment = 1000; #修改初始值
 
 全局设置?  
set @@auto_increment_increment=2; --设置步长为2
set @@auto_increment_offset=2; --设置初始值为3
复制代码

二、域完整性(单元格约束

1、数据类型

 

2、非空约束(NOT NULL)

create table stu(id int,name varchar(20) not null);

3、默认值约束(DEFAULT)

create table stu(
   id int primary key auto_increment,
   name varchar(20) unique,
   gender enum('','') default '',
   salary int not null
);

三、引用完整性

CREATE table stu(id int PRIMARY key,name varchar(20)) ENGINE=INNODB;
CREATE table score(id int,score int,sid int ,CONSTRAINT sco_stu_fk FOREIGN KEY(sid) REFERENCES stu(id))ENGINE=INNODB;
在创建表时一直提示[Err] 1005 - Can't create table 'db1.score' (errno: 150),使用CHAT检查提示:
这个错误通常是由于外键约束引起的。在创建`score`表时,你定义了一个外键约束`sco_stu_fk`,它引用了`stu`表的`id`列作为参考列。然而,在创建外键约束时,需要确保参考列的数据类型和大小与被引用列的数据类型和大小完全匹配。 请检查一下两个表的`id`列的数据类型是否一致。如果数据类型不一致,你需要确保它们完全匹配,包括数据类型和大小。例如,如果`stu`表的`id`列是`
int(11)`类型,那么`score`表的`sid`列也应该是相同的类型和大小。 此外,还要确保被引用的列有一个主键或唯一索引。如果`stu`表的`id`列没有主键或唯一索引,你需要先为它添加一个主键或唯一索引,然后再创建外键约束。 如果你确认了上述问题都没有出现,仍然无法创建外键约束,可能是由于其他原因导致的。你可以将错误详细信息提供给我,我会尽力帮助你解决问题。

我应该是犯了第二个错误,加上主键后创建成功。

创建表后,添加外键约束。
CREATE TABLE teacher(id int PRIMARY key, name VARCHAR(20)) ENGINE=INNODB;
CREATE table stu(id int PRIMARY key,name VARCHAR(20))ENGINE=INNODB;
CREATE table stu_tea_rel(tid int,sid int)ENGINE=INNODB;

alter table stu_tea_rel add CONSTRAINT stu_tea_rel__tea_fk  FOREIGN key(tid)  REFERENCES teacher(id);
alter table stu_tea_rel add CONSTRAINT stu_tea_rel__stu_fk FOREIGN key(sid)  REFERENCES stu(id);
posted @   系统显示名称已被使用  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示