Orcale 二维表管理(创建&约束&修改)

二维表的简单创建

---Oracle的二维表管理
    --oracle二维表的创建
---------------------------------------
 --创建表:
    --使用:create table 表名(字段名 类型,字段名 类型,....);
    --数据类型:
        --number类型
              --数值类型
                   --整数类型 number(a)   总长度为a
                   --浮点数类型 number(a,b) 总长度为a,小数位长度为b,小数位可以不写。
        --varchar2类型
                --字符类型 varchar2(ln) ln表示字符的最大长度,实际存储内存长度是根据字符大小来分配,但是最大不能超过ln 
                --特点:动态分配存储空间,节省空间
        --char类型
                --字符类型 char(ln) 不管字符数据长度是多大,直接开辟ln大小的空间存储数据
                --特点:存储效率高于varchar2
        --date类型
    create table student(
      sno number(10),
      sname varchar2(100),
      sage number(3),
      ssex char(100),
      sfav varchar2(500),
      sbirth date   
    )
 --添加测试数据
    insert into student values(1,'柳岩',18,'女','拍电影','01-1月-1985');
    insert into student values(2,'古力娜扎',20,'女','拍电影',to_date('1990-01-01','yyyy-mm-dd'));
select * from student

二维表约束

---Oralce的二维表操作
    --创建表并同时添加约束
      --主键约束
      --非空约束
      --检查约束
      --唯一约束
      --外键约束
    --简单的表创建和字段类型
    --简单的创建语句:
      create table student(
           sno number(10) ,--primary key
           sname varchar2(100) ,--not null
           sage number(3), --check(sage<150 and sage>0)
           ssex char(4) ,--check(ssex='男' or ssex='女')
           sfav varchar2(500),
           sbirth date,
           sqq varchar2(30) --unique
           --constraints pk_student_sno primary key(sno)--添加主键约束
           --constraints ck_student_sname check(sname is not null)--非空约束
           --constraints ck_student_sage check(sage<150 and sage>0)--检查约束
           --constraints ck_student_ssex check(ssex='男' or ssex='女')--检查约束
           --constraints un_student_sqq unique(sqq)--唯一约束
      )   
      --添加主键约束
       alter table student add  constraints pk_student_sno primary key(sno); 
       alter table student drop  constraints pk_student_sno;
     --添加非空约束
        alter table student add  constraints ck_student_sname check(sname is not null);
         alter table student drop  constraints ck_student_sname; 
      --添加检查约束
      alter table student add constraints ck_student_sage check(sage<150 and sage>0)
      alter table student drop  constraints ck_student_sage; 
      --添加检查约束校验性别
       alter table student add constraints ck_student_ssex check(ssex='男' or ssex='女')
       alter table student drop  constraints ck_student_ssex; 
       --添加唯一约束
       alter table student add constraints un_student_sqq unique(sqq)
       select * from student
       drop table student
------------------------------------------------------------------------------------------------------------------
--二维表创建约束学习:(主键约束,非空约束,检查约束,唯一约束)
    --问题1:学号重复依然可以添加
       insert into student values(1,'关晓彤',18,'女','拍电影',to_date('2000-01-01','yyyy-mm-dd'),'267889900');
       insert into student values(1,'关晓彤001',18,'女','拍电影',to_date('2000-01-01','yyyy-mm-dd'),'267889900');
    --问题2:竟然可以没有名字
       insert into student values(2,'',18,'女','拍电影',to_date('2000-01-01','yyyy-mm-dd'),'267889900');
    --问题3:年龄竟然可以超过200岁
       insert into student values(3,'关晓彤002',300,'女','拍电影',to_date('2000-01-01','yyyy-mm-dd'),'267889900');
    --问题4:性别竟然可以为任意字符
       insert into student values(4,'关晓彤',18,'a','拍电影',to_date('2000-01-01','yyyy-mm-dd'),'267889900');
    --问题5:qq号竟然可以重复
       insert into student values(5,'关晓彤003',18,'女','拍电影',to_date('2000-01-01','yyyy-mm-dd'),'267889900');
       insert into student values(6,'关晓彤004',18,'女','拍电影',to_date('2000-01-01','yyyy-mm-dd'),'267889900');
---解决:
    --问题1:添加主键,主键特点:非空唯一
       --使用:
            --直接在创建表的字段后使用 primary key
            --在创建表的语句的最后面使用 constraints pk_表名_字段名 primary key(字段名)
            --在创建表后使用 alter table 表名 add  constraints pk_表名_字段名 primary key(字段名);
            --删除主键     alter table student drop  constraints 主键的约束名;
    --问题2:使用非空约束
       --使用:
            --直接在创建表的字段后使用 not null 关键字 
            --在创建表的语句的最后面使用 constraints ck_表名_字段名 check(字段名 is not null)
            --在创建表后使用 alter table 表名 add  constraints ck_表名_字段名 check(字段名 is not null);
            --删除非空约束 alter table student drop  constraints 非空约束名;
    --问题3:使用检查约束
            --直接在创建表的字段后使用 check(条件) 例如      sage number(3) check(sage<150 and sage>0),
            --在创建表的语句的最后面使用 constraints ck_表名_字段名 check(条件)
            --在创建表后使用 alter table 表名 add  constraints ck_表名_字段名 check(条件);
            --删除检查约束 alter table student drop  constraints 检查约束名;

    --问题4:使用检查约束
            --直接在创建表的字段后使用 check(条件)
            --在创建表的语句的最后面使用 constraints ck_表名_字段名 check(条件)
            --在创建表之后使用alter table 表名 add  constraints ck_表名_字段名 check(条件);
            --删除检查约束 alter table 表名 drop  constraints 检查约束名;
    --问题5:使用唯一约束
            --直接在创建表的字段后使用 unique
            --在创建表的语句后面使用 constraints un_表名_字段名 unique(字段名);
            --在创建表后使用 alter table 表名 add  constraints un_表名_字段名 unique(字段名);
            --删除约束:alter table 表名 drop  constraints 唯一约束名;
--------------------------------------------------------------------------------------------------------
--二维表创建 外键约束学习:
   --创建学生表
   create table student(
         sno number(10) primary key,
         sname varchar2(100) not null,
         sage number(3) check(sage>0 and sage<150),
         ssex char(4) check(ssex='男' or ssex='女'),
         sfav varchar2(500),
         sqq varchar2(30) unique,
         cid number(10) --references clazz(cno)
         --constraints fk_student_cid foreign key(cid) references clazz(cno)--外键
      )
      --添加外键
      alter  table student add constraints fk_student_cid foreign key(cid) references clazz(cno) on delete set null
      alter  table student drop constraints fk_student_cid 
      drop table student
      --添加测试数据
      insert into student values(1,'张三001',18,'男','唱歌','657889900',1);
      insert into student values(2,'张三002',18,'男','唱歌','657889901',1);
      insert into student values(3,'李四001',18,'男','唱歌','657889903',2);
      insert into student values(4,'李四002',18,'男','唱歌','657889904',2);
   --创建班级表
      create table clazz(
       cno number(10) primary key,
       cname varchar2(100) not null,
       cdesc varchar2(300)
      
      )
      --添加测试数据
       insert into clazz values(1,'java高薪就业班','6666');
       insert into clazz values(2,'python高薪就业班','33333');
  --查询学生及其班级信息
      select * from student  s
      inner join clazz c
      on s.cno=c.cno
  --问题:竟然可以在学生表中插入一个不存在班级
      insert into student values(5,'李四003',18,'男','唱歌','657889905',3);
  --使用外键:
      --作用:当在子表中插入的数据在父表中不存在,则会自动报错。
      --概念:当一张表的某个字段的值需要依赖另外一张表的某个字段的值,则使用外键约束。
             --其中主动依赖的表称为子表,被依赖的表称为父表。外键加在子表中。
      --使用: 
             --在子表中的字段后直接使用   references 父表名(字段) 例如: cid number(10) references clazz(cno)
             --在创建表语句的最后面使用  constraints fk_子表名_字段名 foreign key(字段名) references 父表名(字段名)
             --在创建表后使用:alter table 表名 add constraints fk_子表名_字段名 foreign key(字段名) references 父表名(字段名)
            --删除外键:alter table 表名 drop constraints 外键约束名
      --外键选取:
            --一般选取父表的主键作为子表的外键。
      --外键的缺点:
            --无法直接删除父表数据,除非级联删除
            --级联删除:在添加外键约束时,使用关键字 on delete cascade
                     --使用:当删除父表数据时,自动删除子表相关所有数据。
                     --缺点:无法保留子表历史数据。
                     --使用关键字 on delete set null
                           --删除父表数据时,将子表中的依赖字段的值设置为null。
                           --注意:子表依赖字段不能添加非空约束。
           --删除班级1的信息
           select * from student
           delete from clazz where cno=1 

二维表修改

--二维表的维护
    --添加新的字段:
        --alter table 表名 add 字段名 类型
         alter table student add sphone number(11)--在学生表中添加新的字段
    --修改原有字段
         --修改字段类型
             --alter table 表名 modify 字段名 新的类型
             alter table  student modify sphone varchar2(11)
         --修改字段名
             --alter table 表名 rename column 字段名 to 新的字段名
             alter table student rename column sphone to phone 
         --删除字段
             --alter table 表名 drop column 字段名
             alter table student drop column phone
    --修改表名
         --rename 原有表名 to 新的表名
         rename student to student2
         rename student2 to student
    --删除表
        --drop table 表名
        drop table student 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值