sql总结-----数据表操作

数据表概述

表示一种最常见的组织数据的方式,一张表一般有多个列(即多个字段)。

oracle提供了多种内置的列的数据类型,常用的有以下五种:

1、字符类型
字符数据类型用于声明包含字母、数字数据的字段。对于字符数据类型细分又可以分为两种:
他们分别对应,CHAR数据类型以及CHAR2数据类型。

CHAR数据类型:
用于存储固定长度的字符串,当为该列的某个单元格赋值小鱼长度的数值后,空余部分oracle会用空格自动填充;
如果字段保存的字符长度,大于规定的长度,则,oracle会产生报错信息。
CHAR类型的长度范围为1-2000个字节。
CHAR2数据类型:
用于存储变长而非固定字长的字符串。

2、数值数据类型
数值数据类型用于存储带符号的整数或浮点数。
oracle中的NUMBER数据类型具有精度(precision)和范围(SCALE)两个参数。

3、日期时间数据类型
oracle提供的日期时间数据类型是DATE,他可以存储日期和时间的组合数据。

4、LOB数据类型
LOB数据类型用于大型的,未被结构化的数据,
例如二进制文件、图片文件和其他类型的外部文件。LOB数据类型分为BLOB、CLOB和BFILE等三种。

5、ROWID数据类型
被称为“伪列类型”,用于在oracle内部保存表中的每条记录的物理地址。

如果用户在自己的模式下创建一个表,则用户必须具有create table的系统权限;

如果要在其他用户模式下创建表,则必须具有create any table的系统权限。

创建数据表

 1、创建一个学生档案信息表

create table students(
stuno number(10)not null,        --学号
stuname varchar2(8),             --姓名
sex char(2),                     --性别
age int,                         --年龄
departno varchar2(2) not null,   --系别编号
classno varchar2(4) not null,    --班级编号
regdate date default sysdate     --建档日期
);

使用describe命令查看数据表的数据结构

SQL> describe students;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 STUNO                                     NOT NULL NUMBER(10)
 STUNAME                                            VARCHAR2(8)
 SEX                                                CHAR(2)
 AGE                                                NUMBER(38)
 DEPARTNO                                  NOT NULL VARCHAR2(2)
 CLASSNO                                   NOT NULL VARCHAR2(4)
 REGDATE                                            DATE

使用create table as select命令创建表副本:

create table students_2 as select * from students;

维护数据表

创建数据表后,如果对表的定义有不满意的地方,可以进行修改。普通用户只能对自己模式中的表进行修改,如果要对任何模式中的表进行修改,则必须具有alter any table的系统权限。

1、增加和删除字段

用户可以用alter table --- add语句向表中添加字段。

alter table students add (province varchar2(10));

用户可以用alter table --- drop语句删除表字段。但是,不能删除所有的字段,也不能删除sys模式中任意表的字段。

如果仅需要删除一个字段,则必须在字段前指定column关键字。

alter table students drop column province;
#一条语句删除多个列
alter table students drop (age,sex);

2、修改字段

修改字段 通常使用alter table modify语句。

用户在修改字段时,并不可以随意修改;

在有数据的情况下,把某种数据类型改为兼容的数据类型时,只能把数据的长度从低向高修改,而不能从高向低修改,否则会出现数据溢出的情况。

alter table students modify stuno number(20);

3、重命名表

用户只能对自己模式下的表进行重命名,重命名表通常使用alter table xxx rename to XXX语句。

alter table students rename to students_2;

在对表的名称进行修改时要格外谨慎。虽然oracle可以自动更新数据字典中的外键、约束定义以及表关系,但是他不能更新数据库中的存储过程、客户应用,以及依赖该对象的其他对象。

4、删除表

一般情况下用户只能删除自己模式下的表,如果要删除其他模式下的表,则必须具有drop any table的权限。

语法格式:

drop table table_name [cascade constraints];

如果该表存在约束、关联的视图和触发器等,则必须使用cascade constraints参数才能将其删除。

当时用delete语句进行删除时,只删除数据不删除表结构;drop语句会删除数据以及表结构。

一般情况下,当某个表被删除,它并没有被彻底删除,而是进入回收站中(依然占用存储空间),可以使用flashback table语句进行还原。

drop table students_2;
select * from students_2;
select object_name,original_name from recyclebin where ORIGINAL_NAME = 'students_2'---查看表是否在回收站
flashback table students_2 to before drop;

如果用户想在删除表时立即释放空间,并且不放在回收站,则可以使用以下语句:

drop table table_name purge;

5、修改表状态

用户可以将表置于read only状态,处于该状态的表不能执行DML和某些DDL操作。在11g之前,为了使某个表置于只读模式,只能将整个表空间置于read only状态。

alter table students read only;
alter table students read write;

可以通过数据字典user_tables查询表的状态,

select table_name,read_only from user_tables where table_name='STUDENTS';

数据完整性与约束性

原文地址:https://www.cnblogs.com/jinyuanliu/p/10428137.html