Oracle的表操作,约束
回顾MySQL创建表语句users(id整型/name字符串/birthday日期型,默认今天)
drop table if exists users;
create table if not exists 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
);
进入回收站
drop table users;
查询回收站中的对象
show recyclebin;
闪回,即将回收站还原
flashback table 表名 to before drop;
flashback table 表名 to before drop rename to 新表名;
彻底删除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位
(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);错
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);错
8表示字节
GBK 赵 2字节
(4)date:默认格式为:'27-4月-15'
(5)CLOB【Character Large OBject】:大文本对象,即超过65565字节的数据对象,最多存储4G
(6)BLOB【Binary Large OBject】:大二进制对象,即图片,音频,视频,最多存储4G
为emp表增加image列,alter table 表名 add 列名 类型(宽度)
alter table emp
add image blob;
修改ename列的长度为20个字节,alter table 表名 modify 列名 类型(宽度)
alter table emp
modify ename varchar2(20);
删除image列,alter table 表名 drop column 列名
alter table emp
drop column image;
重名列名ename为username,alter table 表名 rename column 原列名 to 新列名
alter table emp
rename column ename to username;
将emp表重命名emps,rename 原表名 to 新表名
rename emp to emps;
注意:修改表时,不会影响表中原有的数据
笔试题:有【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、删除外键
SQL> alter table orders drop constraint cid_FK;
2、重新添加外键约束
SQL> alter table orders drop constraint cid_FK foreign key(cid) reference customers(id) on delete set null;
测试:
SQL> delete from customers where id = 2;
SQL> select * from orders;
ID ISBN PRICE CID
---------- ------------ ---------- ----------
3 isbn30 30
4 isbn40 40
SQL> update orders set cid = 2;
*第 1 行出现错误:
ORA-02291: 违反完整约束条件 (SCOTT.CID_FK) - 未找到父项关键字
1、先插入父表数据才可
SQL> insert into customers(id,name) values(2,'B');
2、修改子表
SQL> update orders set cid = 2;
SQL> select * from orders;
ID ISBN PRICE CID
---------- ------------ ---------- ----------
3 isbn30 30 2
4 isbn40 40 2
Oracle的表操作,约束的更多相关文章
- Oracle创表操作记录
Oracle表操作 --主键,复合主键 create table example (id number primary key, name varchar2(20)); create table ex ...
- Oracle 修改表操作
如题: --增加列操作: alert table 表名 add 列名 列的类型 eg:alter table EMP1 add pwd varchar2(10); --删除列操作: alert ...
- Oracle创建表空间和表
创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表.表空间是逻辑上的划分.方便管理的.数据表空间 (Tablesp ...
- Oracle day05 建表_约束
表的创建 标准的建表语法 : CREATE TABLE [schema.] table (column datatype [DEFAULT expr], ... ); 使用子查询创建表的语法 CREA ...
- Oracle 数据库表中已有重复数据添加唯一键(唯一约束)
Oracle 数据库表中已有重复数据添加唯一键(唯一约束) 问题描述 以 demo 举例,模拟真实场景. 表 TEST_TABLE 有如下字段和数据:id 是主键,code 没有设置键和索引 ID C ...
- Oracle数据库教程-数据定义语言(表操作)
创建表 建表语法: CREATE TABLE 表名 ( 列1 数据类型 [primary key], 列2 数据类型 default 默认值 [not null], …, constraint 约束名 ...
- 4、oracle表操作
4.1.dml操作: 1.查看当前用户下所有的表: select * from user_tables; 2.查看某表的大小: select sum(bytes)/(1024*1024) as &qu ...
- Oracle—表、约束、索引、表空间、分区、序列、统计信息
表.约束.索引.表空间.分区.序列.统计信息 一.表及其操作 1.创建表 create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 ...
- Oracle中建表及表操作
一.创建表 Oracle中的建表语句:create table 表名( 字段名1 数据类型 列属性,字段名2 数据类型 列属性,...... ) 如:创建表OA_DM.DM_GY_USER https ...
随机推荐
- K Sum(2 Sum,3 Sum,4 Sum,3-Sum Closest)
算是经典算法问题了.这里主要针对只存在一个解或者只需要求一个解的情况描述一下解题思路.若需要找到所有可能解,方法需要略作调整.如有问题,欢迎指正. 2 sum: 如果已排序,可直接用夹逼法,即两指针从 ...
- #ifdef-#endif的作用及其使用技巧
电脑程序语句,我们可以用它区隔一些与特定头文件.程序库和其他文件版本有关的代码. 1 2 3 #ifdef语句1 //程序2 #endif 可翻译为:如果宏定义了语句1则程序2. 作用:我们可以用它区 ...
- Java探索之旅(3)——选择与循环
1.选择结构与输出 ❶Switch语句: Switch表达式必须算出 char,byte,short,int类型数值之一,总是括号括住:Value1----ValueN,对应有相同数据类型且为常量或者 ...
- 6、perl创建模块(Exporter)及路径 引用 嵌套 查询模块
参考博客:http://www.cnblogs.com/xudongliang/tag/perl/ 1.perl 模块的创建以及制定perl 模块的路径 (1)创建一个Myfun.pm模块. #/us ...
- Flask 入门(第三篇)
1. 安装虚拟环境 安装虚拟环境: $ sudo pip install virtualenv $ sudo pip install virtualenvwrapper virtualenv --ve ...
- 【linux安装软件步骤】
一.解析linux应用软件安装包: 通常Linux应用软件的安装包有三种: tar包,如software-1.2.3-1.tar.gz.它是使用UNIX系统的打包工具tar打包的. rpm包,如sof ...
- 利用表达式树Expression优化反射性能
最近做了一个.Net Core环境下,基于NPOI的Excel导入导出以及Word操作的服务封装,涉及到大量反射操作,在性能优化过程中使用到了表达式树,记录一下. Excel导入是相对比较麻烦的一块, ...
- jquery对象访问
jquery对象访问 方法名 说明 语法 (callback 执行的函数,object指定元素的对象.) each() 用于以当前jQuery对象匹配到的每个元素作为上下文来遍历执行指定的函数 jQu ...
- 利用Fitnesse测试外部jar包
1. 下载Fitnesse官方jar http://www.fitnesse.org/FitNesseDownload 2. 下载后,创建下面目录,其中FitnesseRoot目录,不需要创建,Fit ...
- Reboot
目标是将浏览器的预设样式设为一致 Native font stack 本机字体堆栈 由于padding 及 border 会改变元素在运算后的宽度 此时的实际宽度为: width+左右padding ...