设为首页 收藏本站
查看: 3955|回复: 0

[经验分享] Oracle系列:(17)创建表和约束

[复制链接]

尚未签到

发表于 2018-9-7 12:37:55 | 显示全部楼层 |阅读模式
  回顾MySQL创建表语句users(id整型/name字符串/birthday日期型,默认值)
drop table if exists users;  
create table users(
  
   id int(5) auto_increment primary key,
  
   name varchar(4) not null,
  
   birthday date default '2015-4-27'
  
);
  使用oracleSQL,创建用户表users(id整型/name字符串/birthday日期/sal整型,默认今天)
create table users(  
  id number(5) primary key,
  
  name varchar2(8) not null unique,
  
  sal number(6,2) not null,
  
  birthday date default sysdate
  
);
DSC0000.png

  进入回收站
drop table users;  查询回收站中的对象
show recyclebin;
DSC0001.png

  闪回,即将回收站还原
flashback table 表名 to before drop;  
flashback table 表名 to before drop rename to  新表名;
DSC0002.png

DSC0003.png

  彻底删除users表
drop table users purge;  清空回收站
purge recyclebin;  测试如下类型
  (1)number(5):
  insert into users(id,name,sal) values(1,'A',6666.66);
  insert into users(id,name,sal) values(11,'AA',6666.66);
  insert into users(id,name,sal) values(111,'AAA',6666.66);
  insert into users(id,name,sal) values(1111,'AAAA',6666.66);
  insert into users(id,name,sal) values(99999,'AAAAA',6666.66);
  insert into users(id,name,sal) values(100000,'AAAAAA',6666.66); 错
  5表示最多存99999
  (2)number(6,2):
  col sal for 9999.99
  insert into users(id,name,sal) values(1,'A',6.66);
  insert into users(id,name,sal) values(11,'AA',66.666);
  insert into users(id,name,sal) values(111,'AAA',666.6666);
  insert into users(id,name,sal) values(1111,'AAAA',6666.66666);
  insert into users(id,name,sal) values(11111,'AAAAA',66666.666666);错
  number(6,2)
  其中2表示最多显示2位小数,采用四舍五入,不足位数补0,同时要设置col ... for ...
  其中6表示小数+整数不多于6位
  其中整数位数不得多于4位,可以等于4位
DSC0004.png

  (3)varchar2(8):
  insert into users(id,name,sal) values(1,'A',7777.77);
  insert into users(id,name,sal) values(2,'AA',7777.77);
  insert into users(id,name,sal) values(3,'AAA',7777.77);
  insert into users(id,name,sal) values(4,'AAAA',7777.77);
  insert into users(id,name,sal) values(5,'AAAAA',7777.77);
  insert into users(id,name,sal) values(6,'AAAAAA',7777.77);
  insert into users(id,name,sal) values(7,'AAAAAAA',7777.77);
  insert into users(id,name,sal) values(8,'AAAAAAAA',7777.77);
  insert into users(id,name,sal) values(9,'AAAAAAAAA',7777.77);错
DSC0005.png

  insert into users(id,name,sal) values(1,'哈',7777.77);
  insert into users(id,name,sal) values(2,'哈哈',7777.77);
  insert into users(id,name,sal) values(3,'哈哈哈',7777.77);
  insert into users(id,name,sal) values(4,'哈哈哈哈',7777.77);
  insert into users(id,name,sal) values(5,'哈哈哈哈哈',7777.77);错
DSC0006.png

  varchar2(8)
  8表示字节
  GBK 一个汉字 2字节
  UTF-8 一个汉字 3字节
  (4)date:默认格式为:'27-4月-15'
  (5)CLOB【Character Large OBject】:大文本对象,即超过65565字节的数据对象,最多存储4G
  (6)BLOB【Binary Large OBject】:大二进制对象,即图片,音频,视频,最多存储4G
  为users表增加image列,alter table 表名 add 列名 类型(宽度)
alter table users  
add image blob;
DSC0007.png

  修改name列的长度为20个字节,alter table 表名 modify 列名 类型(宽度)
alter table users  
modify name varchar2(20);
DSC0008.png

  删除image列,alter table 表名 drop column 列名
alter table users  
drop column image;
DSC0009.png

  重名列名name为username,alter table 表名 rename column 原列名 to 新列名
alter table users  
rename column name to username;
DSC00010.png

  将users表重命名myusers,rename 原表名 to 新表名
rename users to myusers;
DSC00011.png

  注意:修改表时,不会影响表中原有的数据
  笔试题:有【1000亿】条会员记录,如何用最高效的方式将薪水字段清零,其它字段内容不变?
  第一:从emp表中删除sal字段
      alter table emp  
      drop column sal;
  第二:向emp表中添加sal字段,且内容默认0
      alter table emp  
      add sal number(6) default 0;
  修改表不可回滚
  创建表customers(单)和orders(多),使用primary key/not null/unique/default/foreign key约束
  要体现【on delete cascade/on delete set null】
  需求:删除客户,级联删除他所有的订单
      delete from customers where id = 1;  需求:删除客户,不级联删除他所有的订单,只是将外健设置为NULL
      delete from customers where id = 1;create table customers(  
  id number(3) primary key,
  
  name varchar2(4) not null unique
  
);
  
insert into customers(id,name) values(1,'A');
  
insert into customers(id,name) values(2,'B');
create table orders(  
  id number(3) primary key,
  
  isbn varchar2(6) not null unique,
  
  price number(3) not null,
  
  cid number(3),
  
  --constraint cid_FK foreign key(cid) references customers(id) on delete cascade
  
  constraint cid_FK foreign key(cid) references customers(id) on delete set null
  
);
  
insert into orders(id,isbn,price,cid) values(1,'isbn10',10,1);
  
insert into orders(id,isbn,price,cid) values(2,'isbn20',20,1);
  
insert into orders(id,isbn,price,cid) values(3,'isbn30',30,2);
  
insert into orders(id,isbn,price,cid) values(4,'isbn40',40,2);
  创建表students,包括id,name,gender,salary字段,使用check约束【性别只能是男或女,薪水介于6000到8000之间】
create table students(  
  id number(3) primary key,
  
  name varchar2(4) not null unique,
  
  gender varchar2(2) not null check ( gender in ('男','女') ),
  
  salary number(6) not null check ( salary between 6000 and 8000 )
  
);
  insert into students(id,name,gender,salary) values(1,'哈哈','中',6000);错
  insert into students(id,name,gender,salary) values(2,'呵呵','男',5000);错
  insert into students(id,name,gender,salary) values(3,'嘻嘻','女',7000);对



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-566102-1-1.html 上篇帖子: Oracle系列:(16)分页 下篇帖子: Oracle系列:(18)小结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表