• 数据库原理20/5/26课堂笔记


      1 CREATE TABLE SC(
      2 Sno CHAR(5) ,
      3 Cno CHAR(3) ,
      4 Grade   int,
      5 Primary key (Sno, Cno)),
      6 Foreign key (Sno) References Student(Sno),
      7 Foreign key (Cno) References Course(Cno))

    被参照方在参照完整性定义时需要做出更多的说明。

    增强版:

      1 CREATE TABLE SC(
      2 Sno CHAR(5) ,
      3 Cno CHAR(3) ,
      4 Grade   int ,
      5 Primary key (Sno, Cno)),
      6 Foreign key (Sno) References Student(Sno)
      7 ON DELETE CASCADE ON UPDATE CASCADE,
      8 Foreign key (Cno) References Course(Cno)
      9 ON DELETE NO ACTION ON UPDATE CASCADE)

    NO ACTION----拒绝执行

    CASCADE----连带修改

    SC参照student,定义写在SC中。但是,起作用的却是在student上的操作。

    发生在SC上的数据修改操作,如果引起问题,一律是 拒绝执行,可选项只是给 被参照方的

      1 Foreign key (Sno) References Student(Sno)
      2 ON DELETE CASCADE

    上面的意思是:

    SC的sno列 引用 student的sno列,当student的sno数值被删除的时候,比如删掉了一名学生,在student里。那么,会在SC里连带删除他的选课记录

    实体完整性,参照完整性称为 关系数据库的 两个不变性

    列值非空 列值唯一:UNIQUE;NOT NULL

    取值范围:CHECK (Ssex in (‘Male’,‘Female’))  离散取值范围,用了个关键词 check

      1 CREATE TABLE Student (
      2 Sno  CHAR(5) ,
      3 Sname  CHAR(20) UNIQUE,
      4 Ssex   CHAR(2)  NOT NULL,
      5 Sage  INT,
      6 Sdept CHAR(15),
      7 CHECK (Ssex in (‘Male’,‘Female’)),
      8 CHECK (Ssex=‘Female’OR Sname NOT LIKE ‘MS.%’));
      9 PRIMARY KEY (Sno))

    取值范围如果是 数值,也可以写成 Grade >=0 AND Grade <=100,表达一个区间

    倒数第二句,这一句有两列Ssex和Sname。这一句表达的是两列之间的取值关系,字面意思是 Ssex=‘Female’或者 Sname NOT LIKE ‘MS.%’

    p->q另一种形式是?not p or q

    Ssex=‘male’->  Sname NOT LIKE ‘MS.%’

    这个例子的主旨是用户定义完整性CHECK语句可以建立多列 之间的关联

    另一个例子:

      1 CREATE TABLE Teacher(
      2 Tno   CHAR(5) ,
      3 Tname  CHAR(20) CONSTRAINT C1  NOT NULL,
      4 Tsex  CHAR(2)  CONSTRAINT C2  CHECK (Tsex in (‘Male’, ‘Female’)),
      5 Job  CHAR(10) ,
      6 Sal  INT,
      7 Deduct  INT,
      8 PRIMARY KEY (Tno),
      9 CONSTRAINT C3  CHECK (Sal + Deduct >=3000))

    先关注这里 CHECK (Sal + Deduct >=3000),表示 表里任意一行 Sal列 + Deduct列 >=3000,这是一种双列取值范围的约束

      1 ALTER TABLE Student ADD CONSTRAINT C2 CHECK (Sage BETWEEN 17 AND 25)

    这里为Student添加了一条 完整性规则即 CHECK (Sage BETWEEN 17 AND 25),但是,不是在CREATE TABLE里加入的,而是已经有了Student表后边再把CHECK (Sage BETWEEN 17 AND 25)加进去

    也可以删除掉

      1 ALTER TABLE Student DROP CONSTRAINT C2

    约束名重复会报错,

    定义的时候没取名系统会自动赋一个名字,这个名字通过图形界面可以看见,当然,也可以通过DBMS提供的特殊函数,查看约束名字和内容,这些都属于DBMS的特有功能,不在SQL范围内

    ALTER TABLE Student ADD CONSTRAINT能够执行成功的前提是student里现有的数据符合想要加入的 条件比如上边的例子。假如student里有人年龄16岁,和表里现有数据冲突,会执行不成功。

    随便用
  • 相关阅读:
    使用Vim写LaTeX代码(Vim+Vimtex+Skim)
    如何安装vim自动补全插件YouCompleteMe(YCM)
    我的vimrc配置
    囚徒问题(100 prisoners problem)的python验证
    tomcat下运行多个项目
    转使用chrome命令行:disable-web-security 实现浏览器跨域
    Spring Session
    nodejs 之 nvm和pm2
    chrome地址栏命令
    Koa2和相关资料
  • 原文地址:https://www.cnblogs.com/pqhuang/p/12969179.html
Copyright © 2020-2023  润新知