当前位置: 首页 > news >正文

网站建设出现乱码是怎么回事长沙网站托管优化

网站建设出现乱码是怎么回事,长沙网站托管优化,把公司网站 公开下载 做教程 侵权吗,大企业网站建设公司一、什么是外键约束? 外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。 外键是指表…

一、什么是外键约束?

        外键约束FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。
        外键是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束。被依赖的表我们通常称之为父表或者主表,设置外键约束的表称为子表或者从表。

二、外键约束示例

        如果想要表示学生和班级的关系,首先要有学生表和班级表两张表,然后学生表中有个字段为stu_class(该字段表示学生所在的班级),而该字段的取值范围由班级表中的主键cla_no字段(该字段表示班级编号)的取值决定。那么班级表为主表,学生表为从表,且stu_class字段是学生表的外键。通过stu_class字段就建立了学生表和班级表的关系。

如果这样设计学生表,有以下两个缺点:

  • 缺点一:数据重复
  • 缺点二:修改班级数据时,需要更改多条记录

可以这样来设计学生表:

以上,

班级表被称为父表,班级编号是它的主键

学生表被称为子表,班级名称是它的外键

三、外键约束的SQL展示

1、子表依赖父表,因此,先创建父表:

create table t_class(cno int(4) primary key auto_increment,cname varchar(10) not null,room char(4)
);

2、为表class添加数据:

insert into t_class values (null,'Python一班','r803');
insert into t_class values (null,'Python二班','r416');
insert into t_class values (null,'Java一班','r103');

3、创建子表:学生表t_student

创建外键时,列名可以不一样,但是列类型及其长度最好与主键保持一致。

create table t_student(sno int(6) primary key auto_increment,sname varchar(5) not null,classno int(4)
);

4、添加学生信息

insert into t_student values (null,'张三',1);
insert into t_student values (null,'李四',1);
insert into t_student values (null,'王五',1);

5、将主表和从表关联起来

需要添加外键约束,外键约束只有表级约束,没有列级约束。

为子表t_student添加外键约束,指定约束名为fk_stu_classno,将t_student的外键classno和t_class的主键cno关联起来:

alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno);

6、测试是否关联成功

目前,学生表如下:

班级表如下:

测试一:将t_class表中班级1删除

预期结果:应该是无法删除的,因为和班级表关联的学生表中,有同学在班级1中,删除班级2、3应该是可以的,因为学生没有2班和3班的;

delete from t_class cno=1;

执行返回1451错误:

> 1451 - Cannot delete or update a parent row: a foreign key constraint fails (`database_me`.`t_student`, CONSTRAINT `fk_stu_classno` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))

因为受到了外键约束的影响。

测试二:删除班级2

成功删除了。

测试三:在学生表中添加一条数据,这位同学是3班的,然后尝试是否可以删除班级3

insert into t_student values (null,"老六",3);

删除班级3:

delete from t_class where cno=3;

此时,会返回1451错误,主键已经被外键约束了。

测试四:为设有外键的子表添加一个班级为4的同学

insert into t_student values (null,"小七",4);

返回1452错误:

> 1452 - Cannot add or update a child row: a foreign key constraint fails (`database_me`.`t_student`, CONSTRAINT `fk_stu_classno` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))

因为主表中没有班级4。

四、删除主/从表

需要先删除从表,后删除主表,否则无法删除。

先删除主表会返回如下错误:

> 3730 - Cannot drop table 't_class' referenced by a foreign key constraint 'fk_stu_classno' on table 't_student'.

五、外键策略

因为部分操作致使班级表和学生表数据混乱,现在重新创建这两张表来进行下面的演示。

需求:希望删除班级2

但是直接删除是删不了,因为有外键约束,我们可以考虑加入外键策略

1、策略1: no action 不允许操作

可以先将班级为2的同学的班级编号改为null

update t_student set classno=null where classno=2;

再删除 

delete from t_class where cno=2;

2、策略2:cascade级联操作:操作主表的时候影响从表的外键信息。

没有添加级联操作之前,尝试更新班级号:

update t_class set cno=5 where cno=3;

返回1451错误:

> 1451 - Cannot delete or update a parent row: a foreign key constraint fails (`database_me`.`t_student`, CONSTRAINT `fk_stu_classno` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))

使用cascade级联操作,需要先删除之前的外键约束:

alter table t_student drop foreign key fk_stu_classno;

再重新添加外键约束:

alter table t_studentadd constraint fk_stu_classnoforeign key (classno) references t_class (cno)on update cascade on delete cascade
;

on update cascade on delete cascade表示在进行更新和删除时都会有级联操作。

再尝试更新班级号:

update t_class set cno=5 where cno=3;

试试删除操作,删除班级编号为5的班级,删除之前,可以看见,学生表中有5班的同学:

班级表中删除5班:

delete from t_class where cno=5;

查看班级表:

再看学生表:

由此可见,级联操作主表变动时,从表数据也会随之改变。级联操作要慎用,它对生产库影响较大。

3、策略3:set null 置空操作

删除之前的外键约束:

alter table t_student drop foreign key fk_stu_classno;

添加新外键约束,使用外键策略的置空操作:


alter table t_student add constraint fk_stu_classno foreign key (classno) references t_class (cno) on update set null on delete set null;	

尝试更新班级表班级编号:

update t_class set cno=8 where cno=1;

查看班级表:

查看学生表:

策略2的级联操作和策略3的置空操作可以混合使用,如为更新操作添加的是级联操作,为删除操作添加的是置空操作:

alter table t_student add constraintfk_stu_classno foreign key (classno) references t_class (cno)update cascade on delete set null;

两者的应用场合有所不同,例如:

删除朋友圈时,下面的评论也会一起删除,那么朋友圈的删除操作就可以使用级联操作;

解散班级时,班级的同学依然存在,可以将同学的班级信息置为空,因为后续会为同学分配新的班级,那么解散班级操作就可以添加置空操作。

http://www.dinnco.com/news/24633.html

相关文章:

  • 网站自动发送邮件我想做地推怎么找渠道
  • 南宁网站建设方案详细方案百度站长之家工具
  • 宣城市建设银行网站网站排名优化公司哪家好
  • 可以建设一个网站公司网站设计与制作
  • 新闻网站制度建设情况百度刷排名seo
  • 深圳福田区住房和建设局网站官网附近的成人电脑培训班
  • 网站开发运营新人要注意什么百度指数是搜索量吗
  • 东莞网站制作公成人职业培训机构
  • ppt做会动彩字网站百度学术论文查重免费检测
  • 外贸 网站设计公司电商网站建设步骤
  • 电子商务网站建设服务外包百度怎么免费推广
  • 清河做网站哪家好解封后中国死了多少人
  • 网站开发工具seo网站关键词排名软件
  • 做婚恋网站怎么样个人对网络营销的看法
  • 制作酒店网站代运营一般收费
  • 肥西做网站seo入门教学
  • 做网站用的什么空间搜索引擎关键词排名
  • a做片手机免费网站有哪些深圳百度seo代理
  • logo设计欣赏seo每日一帖
  • 隧道建设网站怎么了足球排名最新排名世界
  • 长沙网站制作app开发公司国际网络销售平台有哪些
  • 爱站网功能品牌seo主要做什么
  • 建设网站及域名费用免费建立网站步骤
  • 俄罗斯女孩制作论文网站西安网站建设网络推广
  • 湖州网站建设服务公司站长之家最新域名查询
  • 专业做旅游网站分析网站
  • html网站开场动画效果模板营销渠道名词解释
  • 重庆市互联网协会什么是网站优化
  • 2狠狠做网站首页排名seo
  • 制作网站的公司哪个部门监管百度搜索关键词