• oracle——DDL


    一、一些概念

    定义:

     主键--唯一标识一条记录,不能有重复的,不允许为空

     外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值

     索引--该字段没有重复值,但可以有一个空值

    作用:

     主键--用来保证数据完整性

     外键--用来和其他表建立联系(在添加数据时会做检查,关联表中没有的值是添加不进来的)

     索引--是提高查询排序的速度

    个数:

     主键--主键只能有一个

     外键--一个表可以有多个外键(比如:学生表、课程表、学生课程表,其中学生课程表就是两个主键,分别是学生表和课程表的外键,也是该表的组合主键)

     索引--一个表可以有多个唯一索引

    建表语句
     

    外键设置的作用:

       外键取值规则:空值或参照的主键值。

    (1)插入非空值时,如果主键表中没有这个值,则不能插入。

    (2)更新时,不能改为主键表中没有的值。

    (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。

    (4)更新主键记录时,同样有级联更新和拒绝执行的选择。

    简而言之,SQL的主键和外键就是起约束作用。

    二、创建语句

    创建表:

    create table emp_dept(
           empno number(4) primary key not null,--第一种方式创建主键
           ename varchar2(10),
           deptno number(2),
           deptname varchar2(14)
    );
    comment on column emp_dept.empno is '用户编号';
    comment on column emp_dept.ename is '用户名';

    创建主键:

      方式一:如创建表时,在主键字段定义时声明即可。

      方式二:在创建表的最下面声明主键

    create table emp_dept(
           empno number(4) not null, --第一种方式创建主键
           ename varchar2(10),
           deptno number(2),
           deptname varchar2(14),
           constraint pk_emp_dept primary key ("empno ")
    );

      方式三:使用alert语句

    alter table 表名
    add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK_字段名'就为约束名
    primary key (字段名) --字段名同上

    创建外键:

      方式一:

    create table sc(
        sno char(5) constraint fk_student references student(sno),--写在属性定义里
        cno char(5),
        foreign key(cno) references course(cno),
        grade number
    );

      方式二:

    create table sc(
        sno char(5),
        cno char(5),
        foreign key(cno) references course(cno),
        grade number,    
      constraint fk_student foreign key(sno) references student(sno)
    );

      方式三:

    alter table sc
    add constraint fk_student  foreign key(sno)  references student(sno);

    删除外键:

    alter table drop constraint fk_student;

    三、举例

      创建student、course、stu_cou表,一个是学生表,一个是课程表,一个是学生课程关联表:

      student:

    create table student(
           sno number(6) primary key not null,
           sname varchar2(20)
    );

      course:

    create table course(
           cno number(6) not null,
           cname varchar2(30),
           constraint pk_course primary key (cno)
    );

      stu_cou

    create table stu_cou(
           sno number(6)  not null ,
           cno number(6) not null constraint fk_course references course(cno)  on delete  cascade,--级联查询
           create_time Date default sysdate,
           foreign key(sno) references student(sno)  on delete  cascade--级联查询
    );

      每个表插入一条数据

    insert into student(sno,sname)
    values(1,'bright');
    insert into course(cno,cname)
    values(1,'java');
    insert into stu_cou(sno,cno)
    values(1,1);

      这些数据都是合法的,首先主键满足唯一约束条件,外键满足约束条件,此时,插入一条不合法数据

    insert into stu_cou(sno,cno) values(1,2);     

     删除一条数据

    delete from course;

    会看到stu_cou表中数据都被删除了

  • 相关阅读:
    Flask笔记:cookie
    Flask笔记:文件上传
    Python内置库:threading(多线程操作)
    Linux服务器架设篇,DNS服务器(三),正反解区域的配置
    Linux服务器架设篇,Windows中的虚拟机linux上不了外网怎么办?
    Linux服务器架设篇,DNS服务器(二),cache-only DNS服务器的搭建
    Linux服务器架设篇,DNS服务器(一),基础知识
    Linux网络架设篇,虚拟机l系统中网卡设备名与配置文件不符如何处理?
    Linux网络安全篇,FTP服务器的架设
    Linux基础管理篇,软件管理程序,yum与rpm
  • 原文地址:https://www.cnblogs.com/brolanda/p/4721661.html
Copyright © 2020-2023  润新知