oracle4,约束(主键,非空,检查,唯一,外键),索引,视图,练习

约束

--创建表
create table y_user (
       unum number(10) primary key,
       uname varchar2(100) not null,
       usex char(4) check(usex='男' or usex ='女'),
       uage number(3) check(uage < 150 and uage >0),
       uqq varchar2(200) unique
       
)
----------------------------------------------
create table y_user (
       unum number(10) ,
       uname varchar2(100),
       usex char(4),
       uage number(3),
       uqq varchar2(200),
       constraints pk_y_user_unum primary key(unum),
       constraints ck_y_user_uname check(uname is not null),
       constraints ck_y_user_uage check(uage < 150 and uage > 0),
       constraints ck_y_user_usex check(usex ='男' or usex ='女'),
       constraints un_y_user_uqq unique(uqq)
)
-------------------------------------------------------------------------------------
--查询
select * from y_user;
--删除表
drop table y_user;
--添加或删除主键约束
alter table y_user add constraints pk_y_user_unum primary key(unum) 
alter table y_user drop constraints pk_y_user_unum    
--添加或删除非空约束
alter table y_user add constraints ck_y_user_uname check(uname is not null)
alter table y_user drop constraints ck_y_user_uname
--添加或删除检查约束(年龄)
alter table y_user add constraints ck_y_user_uage check(uage < 150 and uage > 0)
alter table y_user drop constraints ck_y_user_uage
--添加或删除检查约束(性别)
alter table y_user add constraints ck_y_user_usex check(usex='男' or usex = '女')
alter table y_user drop constraints ck_y_user_usex
--添加删除唯一约束:
alter table y_user add constraints un_y_user_uqq unique(uqq),
alter table y_user drop constaints un_y_user_uqq,
------------------------------------------------------------------------------------------------------------------------------------
--约束:
      --主键约束
      --唯一约束
      --检查约束
      --非空约束
      --外键
--插入数据:
     --问题1:unum是主键,可以重复添加
           insert into y_user values(1,'小小','女',10,'123456');
           insert into y_user values(1,'小','女',10,'123456');
     --问题2:名字可以为空?
           insert into y_user values(2,'','女',10,'123');       
     --问题3:性别可以随便填?
           insert into y_user values(3,'小小','2',10,'16');
     --问题4:年龄可以大于200岁?
           insert into y_user values(4,'小小','女',300,'1456');
     --问题5:他们的qq可以重复?
           insert into y_user values(5,'小小','女',10,'123456');
           insert into y_user values(6,'小小','女',10,'123456');
--解决:
           --1:添加主键约束:非空唯一
                  在创建表字段后面加 primary key;
                  在创建表的最后加
                             constraints pk_表名_字段名 primary key(字段名)
                             constraints pk_y_user_unum primary key(字段名)
                  创建表后添加主键:
                             格式:alter table 表名 add constraints pk_表名_字段名 primary key(字段名)
                             alter table y_user add constraints pk_y_user_unum primary key(unum) 
                  创建表后删除主键:
                             格式:alter table 表名 drop  constraints pk_表名_字段名
                             alter table y_user drop constraints pk_y_user_unum 
           --2:设置非空约束:
                  在创建表字段后面添加:not null,
                  在创建表的最后加
                              格式:constraints ck_表名_字段名 check(字段名 is not null)
                                constraints ck_y_user_uname check(uname is not null)
                  创建表后添加非空主键:
                               格式:alter table 表名 add constraints ck_表名_字段名 check(字段名 is not null)
                               alter table y_user add constraints ck_y_user_uname check(uname is not null)
                  创建表后删除非空主键:
                               格式:alter table 表名 drop  constraints ck_表名_字段名  
                                alter table y_user drop constraints ck_y_user_uname
            --3:设置检查约束:性别
                  在创建表字段后面添加:check(字段名 比较运算符 值) check(usex ='男' or usex = '女')
                  在创建表的最后加
                              格式:constraints ck_表名_字段名 check(字段名 比较运算符 值)
                              constraints ck_y_user_usex check(usex ='男' or usex= '女')
                  创建表后添加判断约束:
                               格式:alter table 表名 add constraints ck_表名_字段名 check(字段名 比较运算符 值)
                               alter table y_user add constraints ck_y_user_usex check(usex ='男' or usex = '女')
                  创建表后删除判断约束:
                               格式:alter table 表名 drop  constraints ck_表名_字段名  
                                alter table y_user drop constraints ck_y_user_usex                     
            --4:设置判断约束:      
                  在创建表字段后面添加:check(字段名 比较运算符 值) check(uage>150 and uage < 0),  
                  在创建表的最后加
                              格式:constraints ck_表名_字段名 check(字段名 比较运算符 值)
                                constraints ck_y_user_uage check(uage>150 and uage < 0)
                  创建表后添加判断约束:
                               格式:alter table 表名 add constraints ck_表名_字段名 check(字段名 比较运算符 值)
                               alter table y_user add constraints ck_y_user_uage check(uage>150 and uage < 0)
                  创建表后删除判断约束:
                               格式:alter table 表名 drop  constraints ck_表名_字段名  
                                alter table y_user drop constraints ck_y_user_uage  
            --5:设置唯一约束:
                  在创建表字段后面添加:unique,
                  在创建表的最后加:
                                格式:constraints un_表名_字段名 unique(字段名);
                                constraints un_y_user_uqq unique(字段名);
                  创建表后添加唯一约束:
                               格式:alter table 表名 add constraints un_表名_字段名 unique(字段名)
                               alter table y_user constraints un_y_user_uqq unique(uqq),
                  创建表后删除唯一约束:
                               格式:alter table 表名 drop constraints un_表名_字段名
                               alter table y_user drop constraints un_y_user_uqq,  
-----------------------------------------------------------------------------------------------------------------------------------
--外键约束:
   --创建表
   create table student(
          sno number(10) primary key,
          sname varchar2(100) not null,
          sage varchar2(10) check(sage < 150 and sage >0),
          ssex varchar2(4) check(ssex ='男' or ssex='女'),
          sfav varchar2(200) ,
          sqq varchar2(10) unique,
          sid number(10), --references clazz(cid)
          constraints fk_studnet_sid foreign key(sid) references clazz(cid)
          
   )
--添加外键
alter table studnet add constraints  fk_studnet_sid foreign key(sid) references clazz(cid)
alter table student drop constraints fk_student_sid
   --插入模拟数据
          insert into student values (1,'天天01','33','男','打游戏','123456',1);
           insert into student values (2,'天天02','33','男','打游戏','12345',1);
            insert into student values (3,'迪迪01','33','男','打游戏','1234',2);
             insert into student values (4,'迪迪02','33','男','打游戏','123',2);
             insert into student values (5,'迪迪03','33','男','打游戏','12',3);
   --查看
   select * from student;
   drop table student;
   --创建表clazz
   create table clazz(
          cid number(10) primary key,
          cname varchar2(100) not null,
          cdesc varchar2(100)
   )
   --插入模拟数据
          insert into clazz values(1,'成长','好');
          insert into clazz values(2,'自由','棒');
   --查看表
   select * from clazz;
--问题1:可以在学生中插入没有的班级?
   insert into student values (4,'迪迪02','33','男','打游戏','123',3);
   --解决:引入外键
          格式:
          在表的字段名的后面加references 表名(字段名) references clazz(cid)
          在表的最后加;constraints fk_子表名_字段名 foreign key(字段名) references 父表名(字段名)
                        constraints fk_student_sid foreign key(sid) references clazz(cid)
          创建表后的添加 alter table 子表名 add constraints fk_子表名_字段名 foreign key(字段名) references 父表名(字段名)
                         alter table studnet add  constraints fk_student_sid foreign key(sid) references clazz(cid)
          创建表后删除:alter table 子表名 drop constraints fk_子表名_字段名
                        alter table studnet drop  constraints fk_student_sid
--外键的描述
   当存在外键时,想子表插入父表不存在的数据时,会自动报错,
   当一张的某个字段需要依赖另外一张表的某个字段时,使用外键,
   外键的选取,一般选择父表的主键作为子表的外键,
   主动依赖的表称之为子表,被依赖的表称之为父表,
--外键的缺点:
   当删除父表的时候,无法删除,当删除子表的时候,可以正常的删除,(项目中最好不要使用外键)
--使用外键时的删除(对于父表的删除):
   --使用级联删除
      格式:on delete cascade,
      使用此关键字,删除父表的选择的数据以及对应子表中的数据,无法保留子表中的数据历史,
      格式:on delete set null
      删除父表的时候,将子表的依赖字段设置为空,但是子表的依赖字段不能设置为空。
                               
   

          
            
                             
           

二维表的维护(字段名的新添,修改,删除,修改表名,显示表的结构)

--二维表的维护
select * from student;
  --添加新的字段名(不要设置约束,如果设置非空约束的化,字段里面的数据是空的,这不就很矛盾)
    --格式: alter table 表名 add 字段名 类型 
             alter table student add pnone number(11);
   --修改字段的类型:
     --格式:alter table 表名 modify 字段名 新的类型
             alter table student modify pnone varchar(11);
   --修改字段的名称
      --格式:alter table 表名 rename column原来字段名 to 新字段名
      alter table student rename column pnone to sphone;
    --删除字段
      --格式:alter table 表名  drop column 字段名
         alter table student drop column sphone;
    --修改表名 rename 原表名 to 新表名
           rename sstudent to student;
    --显示表的结构:在command  window 中
    desc 表名;

索引和视图

--序列
--创建序列
  --默认序列
  create sequence 序列名;
  create sequence cc;  --创建序列
  select cc.currval from dual; --查看当前序列的值
  select cc.nextval from dual; --下一个序列值自动增加
  --自定义序列
  create sequence 序列名 start with 值 increment by 值;
  create sequence aa --创建自定义序列
  start with 5 --开始的序列值
  increment  by 5; --默认步长5
  select aa.currval from dual; --查看当前序列的值
  select aa.nextval from dual; --下一个序列值自动增加
--概叙:
  --默认开始是没有值的,也就是指针指的是没有值的位置,
  --序列名.currval 查看当前序列的值,开始没有
  --序列名.nextval 每次执行都会自动加一,默认步长为1
  --作为主键使用,可以动态获取主键的值,防止主键的值冲突
  --主键非空唯一,不一定要连续的。
          --创建表
          create table teacher (
                 aid number(10) primary key,
                 aname varchar2(100)
          )
          --插入数据
          select * from teacher;
          insert into teacher values(cc.nextval,'消息');
--删除序列
drop sequence 序列名
drop sequence aa;
-------------------------------------------------------------------------------------
--视图:
     --概念:
              --创建视图要具有dba权限
              --可以保护真实表,隐藏重要数据,保护数据。
              --对于视图的操作可以映射到真实表中
              --可以手动开启只读模式 关键字  with read only
     --创建视图:
              create view 视图名 as select 内容 from 真实表名
              create view stu as select sno,sname,sage from student; 
              create view stu as select sno,sname,sage from student with read only;
              select * from student;
              select * from stu;
     --删除视图
              drop view 视图名
              drop view stu;
            

表的练习

create table Employess(
       employeeID varchar2(6) primary key not null ,--员工编号
       ename varchar2(10) not null ,--姓名
       Birthday date not null,--出生日期
       Sex varchar2(2) not null,--性别
       Address varchar(20) ,--地址
       Zip varchar(6) ,--邮编
       Phonenumver varchar2(12) ,--电话号码
       Emailaddress varchar2(30) ,--电子邮件
       departmentID varchar(3) not null,  --员工部门号 
       constraints fk_employess_departmentID foreign key (departmentID) reference departments(departmentID),
       constraints ck_sex check(sex = '男' or sex ='女')
)
--设置的约束名的最长字符是30个,多了设置不了
alter table Employess add constraints fk_e_d_departmentID foreign key (departmentID) reference departments(departmentID);
alter table Employess add constraints ck_sex check(sex = '男' or sex ='女')
create table Departments(
       departmentID varchar2(3) not null primary key,--部门编号
       departmentName varchar2(20) not null ,--部门号
       note varchar2(16), --备注
       constraints un_deparmentName unique(departmentName)
)
alter table departments add constraints un_deparmentName unique(departmentName);
create table Salary (
       employeeID varchar2(6) not null primary key ,--员工编号
       income number(8,2) not null,--收入
       outcome number(8,2) not null --支出

)
--对于Employess添加
insert into Employess(employeeID,ename,Birthday,Sex,departmentid) values (010001,'王平',to_date('1981-01-05','yyyy-mm-dd'),'女','1');
insert into Employess(employeeID,ename,Birthday,Sex,departmentid) values (010003,'韦严平',to_date('1979-11-05','yyyy-mm-dd'),'男','2');
insert into Employess(employeeID,ename,Birthday,Sex,departmentid) values (010021,'王平',to_date('1984-07-02','yyyy-mm-dd'),'女','3');
insert into Employess(employeeID,ename,Birthday,Sex,departmentid) values (010031,'王平',to_date('1980-08-04','yyyy-mm-dd'),'男','4');
insert into Employess(employeeID,ename,Birthday,Sex,departmentid) values (010005,'王平',to_date('1985-02-10','yyyy-mm-dd'),'男','5');
--DepartmentS表的添加
insert into Departments (departmentID,departmentName)  values (1,'办公室');
insert into Departments (departmentID,departmentName)  values (2,'人力资源部');
insert into Departments (departmentID,departmentName)  values (3,'销售部');
insert into Departments (departmentID,departmentName)  values (4,'财务部');
insert into Departments (departmentID,departmentName)  values (5,'生产部');
--对于Salary表的添加
insert into Salary (employeeID,income,outcome) values (010001,3000,100);
insert into Salary (employeeID,income,outcome) values (010003,3000,50);
insert into Salary (employeeID,income,outcome) values (010021,5000,50);
insert into Salary (employeeID,income,outcome) values (010031,3000,50);
insert into Salary (employeeID,income,outcome) values (010005,2500,50);
--修改表的结构
alter table employess add QQ number(15)
--
update salary set income = 2980  where employeeID=010001;
update Departments set departmentName = '生产计划部' where departmentID = 5;
update salary set income= income+100 ;
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值