Oracle-table表操作

简介: Oracle数据库的数据类型、约束、表相关操作

数据类型

字符类

select lengthb('字') from dual; (可以在数据库中查询一个汉字站多少字节)

char(?) 长度固定,最多容纳2000个字符。

例:char(10) ,UT8中一个汉字占3个字,前六个字符放‘张三’,后添4个空格补全,如‘张三    ’

注:char 查询的速度极快,浪费空间,适合查询比较频繁的数据字段


varchar2(?) 长度可变,最多容纳4000个字符。不要使用varchar数据类型,使用varchar2数据类型

例:varchar2(10),‘张三’ Oracle中只分配6个字符。varchar2 节省空间

clob(character large object) 字符型大对象,最多容纳4g

数字型

number(?) 或者 number(?,?) 范围 10^(-130) —— 10^126,可以表示整数,也可以表示小数

例:number(5,2)表示一位小数有5位有效数,2位小数,范围:-999.99 到999.99,number(5)表示一个5位整数,范围99999到-99999

日期类型

date 包含  年月日和时分秒,oracle默认格式:1-1月-1999  也可以用 to_date('2018-09-27','yyyy-mm-dd')

timestamp 这是oracle9i对date数据类型的扩展。可以精确到毫秒。

lob数据类型

包括blob、clob、nclob、bfile(外部存储)的大型化和非结构化数据,如文本、图像、视屏、空间数据存储。

创建表

create table table_name(

字段1 类型1,

字段2 类型2,

字段n 类型n

);
根据结果集创建数据库
create table 表名 as select 语句
复制表
-- 有结构有数据
create table emp_01 as select * from emp;
-- 有结构没有数据
create table emp_02 as select * from emp where 1=2;

约束

英文 中文
primary key 主键约束
unique 唯一约束
not null 非空约束
check(约束条件) 检查约束
foreign key 外键约束
default 默认约束

注意:Oracle中 default 不是约束,是一个值

给已创建的表添加约束
alter table 表名 add constraint 约束名 约束内容
添加主键约束
alter table emp add constraint pk_emp_id primary key(eid);
添加非空约束
alter table emp modify ename not null;
添加唯一约束
alter table emp add constraint uq_emp_ecode unique(ecode);
添加检查约束
alter table emp add constraint ck_emp_esex check(esex in('男','女'));
添加外键约束

----普通外键约束(如果存在子表引用父表主键,则无法删除父表记录)

alter table emp add constraint fk_emp_dep foreign key(did) references dep (did);

----级联外键约束(可删除存在引用的父表记录,而且同时把所有有引用的子表记录也删除)

alter table emp add constraint fk_emp_dep foreign key(did) references dep (did) on delete cascade;

----置空外键约束(可删除存在引用的父表记录,同时将子表中引用该父表主键的外键字段自动设为NULL,但该字段应允许空值)

alter table emp add constraint fk_emp_dep foreign key(did) references dep (did) on delete set null;
删除约束
alter table 表名 drop constraint 约束名

创建员工表

create table employee(

eid varchar2(10) primary key, -- 主键约束

ename varchar2(12) not null, -- 非空约束

esex char(3) default '男' check(esex='男' or esex='女'), -- 默认约束+检查约束

ebrithday date unique,-- 唯一约束

eage number(3),

esalary number(8,2),

depid varchar2(10),

constraint fk_employee_department_depid foreign key(depid)  references department(depid) --外键约束

);

删除表

drop table 表名; 

修改表的字段

添加一个classid字段
alter table student add (classid number(2));
修改一个name字段的长度
alter table student modify (name varchar2(30));
修改name字段的类型或是名字(不能有数据)
alter table student modify (name char(30));
删除一个字段
alter table student drop salary;
修改表的名字
rename student to stu;

插入记录

insert into 表名(字段1,字段2,字段3,...) values(值1,值2,值3,...);

当插入全部字段的数据时:

insert into 表名(字段1,字段2,字段3,...) values(值1,值2,值3,...);

insert into student (sno,age,edate,classname,email)values(1, 18, '23-12月-1293','wd003','insert@w5.com')

可以简写为(可以省略表名后面的字段标识):

insert into 表名 values(值1,值2,值3,...);

insert into student values(1,18, '23-12月-1293','wd003','insert@w5.com'); 与上一个insert语句效果相同

当插入部分字段时(一定要在表名后添加标识,下面例子添加记录时字段2没有添加数据):

insert into 表名(字段1,字段3) values(值1,值3);

insert into student (sno,sdate,classname,email)values(1,  '23-12月-1293','wd003','zsf@wd.com');

(没有添加学号为1同学的年龄)

修改记录

update 表名 set 修改字段1 = 修改后内容1,修改字段2 = 修改后内容2 where 条件

update student set sname='CR7',sage='33' where sno='1001';

删除记录

delete from 表名 where 条件
删除表所有记录
delete from 表名

truncate table 表名 (!!!!!慎用,删除记录不可恢复)

主表 从表

主键表是被引用的表,外键表是引用其他表的表

主表:在数据库中建立的表格(table),其中存在主键(primary key)用于与其它表相关联,并且作为在主表中的唯一性标识

从表:以主表的主键(primary key)值为外键 (foreign key)的表,有外键的表是外键表,从表

删除主表前,先解除与从表关系,然后才能删除(除非外键中设置级联或者置空)

相关文章
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
北京某国企客户Oracle 11g R2数据库误truncate table CM_CHECK_ITEM_HIS,表数据丢失,业务查询到该表时报错,数据库的备份不可用,无法查询表数据。 Oracle数据库执行Truncate命令的原理:在执行Truncate命令后ORACLE会在数据字典和Segment Header中更新表的Data Object ID,但不会修改实际数据部分的块。由于数据字典与段头的DATA_OBJECT_ID与后续的数据块中的并不一致,所以ORACLE服务进程在读取全表数据时不会读取到已经被TRUNCATE的记录,但是实际数据未被覆盖。
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
|
11月前
|
Oracle 关系型数据库
oracle 12c新功能 recover table恢复单个表
不支持sys用户和system表空间的表
|
存储 Oracle 关系型数据库
【数据库】解决 oracle: ORA-01653: unable to extend table *.LINEORDER by 1024 in tablespace SYSTEM
【数据库】解决 oracle: ORA-01653: unable to extend table *.LINEORDER by 1024 in tablespace SYSTEM
410 0
【数据库】解决 oracle: ORA-01653: unable to extend table *.LINEORDER by 1024 in tablespace SYSTEM
|
存储 弹性计算 Oracle
PostgreSQL Oracle 兼容性之 - nested table
标签 PostgreSQL , Oracle , 兼容性 , nested table 背景 Oracle nested table功能介绍如下 http://www.orafaq.com/wiki/NESTED_TABLE NESTED TABLE is an Oracle data type used to support columns containing multivalu
618 0
|
Oracle 关系型数据库 PostgreSQL
PostgreSQL Oracle 兼容性之 - 全局临时表 global temp table
标签 PostgreSQL , 临时表 , 全局临时表 , unlogged table , advisory lock 背景 PostgreSQL 暂时不支持类似Oracle风格的临时表。 PostgreSQL 临时表结构是会话级别的,而在Oracle中,临时表的结构是全局有效的,只是数据会话之间独立。
6860 0