[MySQL]数据库原理8——喵喵期末不挂科

打印 上一主题 下一主题

主题 1021|帖子 1021|积分 3067


   盼望你开心,盼望你健康,盼望你幸福,盼望你点赞!
  最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!!
  喵喵喵,你对我真的很紧张!
  
目次
前言
数据约束和参照完整性
修改UNIQUE约束
FOREIGN KEY参照完整性约束
理解参照完整性
reference_definition语法格式
在创建表时创建外键
对已有的表添加外键
创建级联删除、级联更新
总结

前言

   这个章节快要完结啦!让我们去开启新的冒险之旅!!芜湖~
  
数据约束和参照完整性

修改UNIQUE约束

   
设置course表的c_no为UNIQUE约束。

  
Mysql>ALTER TABLE course

  
 ADD UNIQUE (c_name);

    思索与总结:
  
(1)尝试向course表中输入同名的课程,会出现什么环境?为什么?

  

  
(2)一个数据表只能创建一个主键。但一个表可以有多少个UNIQUE键,并且它们甚至是可以重合的。

  

  
(3)主键字段的值不允许为NULL,而UNIQUE字段的值可取NULL,但是必须使用NULL或NOT NULL声明。

  

  
(4)一样平常在创建PRIMARY KEY约束时,体系会自动产生PRIMARY KEY索引。创建UNIQUE约束时,体系自动产生UNIQUE索引。

  
FOREIGN KEY参照完整性约束

   理解参照完整性

  
  在关系型数据库中,表与表之间每每存在一种“父子”关系。 例如,字段s_no是一个表A的属性,且依靠于表B的主键。那么,称表B为父表,表A为子表。通常将s_no设为表A的外键,参照表B的主键字段,通过s_no字段将父表B和子表A建立关联关系。

  
  这种关联关系就是参照完整性约束,是一种特殊的完整性约束,实现为一个外键,外键是表的一个特殊字段。

  
     外键的作用是建立子表与其父表的关联关系,包管子表与父表关联的数据一致性。父表中更新或删除某条信息时,子表中与之对应的信息也必须有相应的改变。

  
reference_definition语法格式

   
可以在创建表或修改表时定义一个外键声明。

  
 reference_definition语法格式如下:

  1. REFERENCES tbl_name [(index_col_name,...)] [ON DELETE  {RESTRICT | CASCADE | SET NULL | NO ACTION}]
  2.     [ON UPDATE  {RESTRICT | CASCADE | SET NULL | NO ACTION}]
  3.  
复制代码
   

  
当要删除或更新父表中被参照列上在外键中出现的值时:

  
RESTRICT(限定):拒绝对父表的删除或更新操作。

  

  
CASCADE:自动删除或更新子表中匹配的行。

  

  
SET NULL:设置子表中与之对应的外键列为NULL。

  

  
NO ACTION:NO ACTION意味着不采取动作,和RESTRICT一样。

  

  
SET DEFAULT:指定子表中的外键列为默认值。

  
在创建表时创建外键

   
创建salary表,包含employeeidincomeoutcome字段,employeeid作为外键参照employees表的employeeid字段。

  1. mysql> create table salary
  2.     (employeeid char(6) not null primary key,
  3.     income float(8) not null,
  4.     outcome float(8) not null,
  5.   foreign key(employeeid)  references employees (employeeid)  on update cascade    on delete cascade
  6.    ) character set gb2312  engine=innodb;
复制代码

对已有的表添加外键

   
建立一个与salary表结构相同的表salary1,用ALTER TABLE语句向salary1表中的employeeid列添加一个外键。要求当employees表中要删除或修改与employeeid值有关的行时,检查salary1表中有没有该employeeid值 ,如果存在则拒绝更新employees表。

  1. mysql>alter table salary1
  2.     add foreign key(employeeid)
  3.     references employees(employeeid)
  4.     on update restrict
  5.     on delete restrict;
复制代码

创建级联删除、级联更新

   
在JXGL库中,将score表的s_no字段参照表students的s_no字段,score表的c_no字段参照course的c_no字段。 当students表的s_no字段,course的c_no字段更新或删除时,score表级联更新、级联删除。

  1. mysql> ALTER TABLE  score   ADD FOREIGN KEY (s_no)   REFERENCES  students (s_no)   ON UPDATE CASCADE  ON DELETE CASCADE;
复制代码

  1. mysql> ALTER TABLE  score   ADD FOREIGN KEY (c_no)   REFERENCES  course (c_no)   ON UPDATE CASCADE  ON DELETE CASCADE;
复制代码
   思索与总结
  
(1)外键要求参考的键(父表的键)必须是主键?

  

  
(2)相关联的外键与主键必须是同域的(即数据范例相同)。

  

  
(3)关联的两表应当字符集相同。

  

  
        (4)如果父表与子表都有数据,则要求子表外键的数据必须是泉源于主键,否则外键约束不成立。

  
总结

   记着了,才是自己的!
  人生苦短,一天当作两天卷~
  
   盼望你开心,盼望你健康,盼望你幸福,盼望你点赞!
  最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!!
  喵喵喵,你对我真的很紧张!
  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表