MySQL里面的主键外键都是什么意思,看不太明白,谁能通俗的说下,谢谢~~ 怎么样理解好。
3个回答
展开全部
其实不止是mysql里,所有的数据库都有主键外键的概念。举个简单的例子。
因为在中国有不少人姓名相同,所以虽然在你家里能用名字做统一标识,但是在中国这个范围却不行,所以就有了身份证号,这是主键,保证每一个人有一个。
然后你会上学,上学的话就有学籍这么个东西,虽然有学籍号还有学籍信息,但是我现在想要通过身份证号知道你的学历的话,在学籍这个表中,就要加入你的身份信息,这个身份信息与学籍信息当然不是在一个表里的,最简单的方法,是把身份信息都复制到学籍信息这个表里,不过很显然,这样数据库就有两份记录,一份在身份信息表里,一份在学籍信息表里,而且都是身份信息。这叫做冗余,不但占多了空间,还不能保证修改时候的同步,而且你也许还有社会保险啦,驾驶证之类更多的信息存在,我也不可能每个表都复制身份信息过去。这时就出现在外键,我只需要在这些表中插入身份证号这个列做为外键,那我到时候通过这个唯一的编号去身份信息这个表里找就好了,而且修改身份信息的话也只要在身份信息这个表做就好了,很方便很简单不是吗
因为在中国有不少人姓名相同,所以虽然在你家里能用名字做统一标识,但是在中国这个范围却不行,所以就有了身份证号,这是主键,保证每一个人有一个。
然后你会上学,上学的话就有学籍这么个东西,虽然有学籍号还有学籍信息,但是我现在想要通过身份证号知道你的学历的话,在学籍这个表中,就要加入你的身份信息,这个身份信息与学籍信息当然不是在一个表里的,最简单的方法,是把身份信息都复制到学籍信息这个表里,不过很显然,这样数据库就有两份记录,一份在身份信息表里,一份在学籍信息表里,而且都是身份信息。这叫做冗余,不但占多了空间,还不能保证修改时候的同步,而且你也许还有社会保险啦,驾驶证之类更多的信息存在,我也不可能每个表都复制身份信息过去。这时就出现在外键,我只需要在这些表中插入身份证号这个列做为外键,那我到时候通过这个唯一的编号去身份信息这个表里找就好了,而且修改身份信息的话也只要在身份信息这个表做就好了,很方便很简单不是吗
展开全部
废话少说,直接进入主题。 主键:指的是,唯一标识这张表的字段,例如,书号是图书表的主键
外间:指的是 可以跟其他表建立关系的字段,例如 图书表的书名 可以在 借阅信息表中出现,这样图书表和借阅信息表之间建立了关系。
外间:指的是 可以跟其他表建立关系的字段,例如 图书表的书名 可以在 借阅信息表中出现,这样图书表和借阅信息表之间建立了关系。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
约束的分类:
在实际中,约束主要分为以下五种约束:
主键约束: 主键表示一个唯一的标识,本身不能为空
例如:身份证编号是唯一的,不可重复的,不可为空的
唯一约束: 在一个表中只允许建立一个主键约束,而其他如果不希望出现重复的话,则
就可以使用唯一约束。
检查约束: 检查一个列的内容是否合法
例如: 年龄,只能在0-150岁
例如: 性别,只能是男、女
非空约束: 姓名这样的字段里面的内容就不能为空
外键约束: 在两张表中进行约束操作
例子:
外键约束是对于两张表:一张学生表student ,另一张课程表course。一门课程里面必须有一个字段属于哪个学生
create table tb_person(
p_id int(11) ,
name varchar(50),
age varchar(2),
sex varchar(10),
address varchar(200)
);
create table tb_book(
b_id int(11) auto_increment primary key,
name varchar(100)
p_id int(11) // 表示对应的那个人是谁 直接指向 t_peson表的的id编号
);
首先插入:t_peson表的数据
insert into tb_peson (p_id,name,age,sex,address) values(1,'ttt','22','男','地球');
再向t_book 表插入数据:
insert into tb_book (b_id,name,'00000',2); 的话就会插入成功
(如果此编号人都不存在的话,则该数据不应该插入。解决问题就是要使用主-外键关联; 关联之后子表的数据要跟随父表数据的内容变动)
就好比一个儿子要有一个父亲,你不能说没有父亲突然蹦了一个儿子出来,就违反常理了。
外键加这句内容: constraint t_peson_book_p_id_fk foreign key(p_id) references t_person(p_id)
如下:
create table tb_book(
b_id int(11) auto_increment primary key,
name varchar(100)
p_id int(11),
constraint t_peson_book_p_id_fk foreign key(p_id) references t_person(p_id)
);
如果你不加外键约束的话: 就会出现
再插入这句就不会成功: insert into tb_book (b_id,name,'00000',2);(违反约束条件)
这样就狂野保证表的完整性,不会出现找不到对应数据的情况
在使用主-外键关联时要注意:
1、在子表中设置外键在父亲中必须是主键
2、删除时应该先删除子表,再删除父表
在实际中,约束主要分为以下五种约束:
主键约束: 主键表示一个唯一的标识,本身不能为空
例如:身份证编号是唯一的,不可重复的,不可为空的
唯一约束: 在一个表中只允许建立一个主键约束,而其他如果不希望出现重复的话,则
就可以使用唯一约束。
检查约束: 检查一个列的内容是否合法
例如: 年龄,只能在0-150岁
例如: 性别,只能是男、女
非空约束: 姓名这样的字段里面的内容就不能为空
外键约束: 在两张表中进行约束操作
例子:
外键约束是对于两张表:一张学生表student ,另一张课程表course。一门课程里面必须有一个字段属于哪个学生
create table tb_person(
p_id int(11) ,
name varchar(50),
age varchar(2),
sex varchar(10),
address varchar(200)
);
create table tb_book(
b_id int(11) auto_increment primary key,
name varchar(100)
p_id int(11) // 表示对应的那个人是谁 直接指向 t_peson表的的id编号
);
首先插入:t_peson表的数据
insert into tb_peson (p_id,name,age,sex,address) values(1,'ttt','22','男','地球');
再向t_book 表插入数据:
insert into tb_book (b_id,name,'00000',2); 的话就会插入成功
(如果此编号人都不存在的话,则该数据不应该插入。解决问题就是要使用主-外键关联; 关联之后子表的数据要跟随父表数据的内容变动)
就好比一个儿子要有一个父亲,你不能说没有父亲突然蹦了一个儿子出来,就违反常理了。
外键加这句内容: constraint t_peson_book_p_id_fk foreign key(p_id) references t_person(p_id)
如下:
create table tb_book(
b_id int(11) auto_increment primary key,
name varchar(100)
p_id int(11),
constraint t_peson_book_p_id_fk foreign key(p_id) references t_person(p_id)
);
如果你不加外键约束的话: 就会出现
再插入这句就不会成功: insert into tb_book (b_id,name,'00000',2);(违反约束条件)
这样就狂野保证表的完整性,不会出现找不到对应数据的情况
在使用主-外键关联时要注意:
1、在子表中设置外键在父亲中必须是主键
2、删除时应该先删除子表,再删除父表
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |