zoukankan      html  css  js  c++  java
  • 数据库原理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岁,和表里现有数据冲突,会执行不成功。

    随便用
  • 相关阅读:
    Linux虚拟机的安装(使用Centos6.3)
    【转载】接口测试用例的设计原则
    Oracle PLSQL游标、游标变量的使用
    利用shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中
    源码安装rlwrap 0.43(为了方便使用linux下的sqlplus)
    Oracle自定义脱敏函数
    Oracle分析函数FIRST_VALUE、LAST_VALUE
    MYSQL性能测试工具SYSBENCH
    OEL7.6源码安装MYSQL5.7
    OEL7.6安装Oracle Database 19C(VERSION 19.3.0.0)
  • 原文地址:https://www.cnblogs.com/pqhuang/p/12969179.html
Copyright © 2011-2022 走看看