– 创建表和维护表
Oracle中数据库对象命名原则
– 必须由字母开始,长度在 1–30个字符之间。
– 名字中只能包含 A–Z, a–z, 0–9, _ (下划线),$ 和 #。
– 同一个Oracle服务器用户所拥有的对象名字不能重复。
– 名字不能为Oracle的保留字。
– 名字是大小写不敏感
数据定义语言: (Data Definition Language,DDL) :create alter drop
– 是SQL语言集中负责数据结构定义与数据库
– 对象定义的语言,由CREATE、ALTER与DROP三个语法所组成。
– 创建表 create table
-- 语法:CREATE TABLE [schema.]table
-- (column datatype [DEFAULT expr][, ...]);
– 您必须具备 :
-- CREATE TABLE的权限
-- 一定的存储空间(ALTER USER 用户名 QUOTA 尺寸 ON表空间名字)
– 您需要指定:
-- 表名
-- 列名、列的类型及列的宽度
数据类型
– 字符型
– 数值型
–日期型
– 图片类型
- 创建表
语法:create table 表名();
1.创建一张表名为person的表,数据结构定义如下: 列名 列类型 长度 精度 默认值 id number 4 cname varchar2 20 birthday date heigth number 3 weigth number 5 2 country_code char 2 '01' create table dossier ( id number(4), cname varchar2(20 ), birthday date, height number(3), weight number(5, 2), country_code char(2 ) default '01');
默认值应用
–插入默认值insert into dossier (ID, CNAME, BIRTHDAY, STATURE, WEIGHT) values (2, '姚明', to_date('1980.9.12', 'yyyy.mm.dd'), 226, 134); -- 使用默认值修改 update dossier set country_code =default where id=2;
用子查询语法创建表
--默认复制所有列 1.使用子查询创建表dept10,且将部门10的员工数据复制到该表 create table dept10 as select * from emp where deptno=10; --复制指定列 2.使用子查询创建表dept20,且将部门20的员工的编号、姓名、职位复制到该表 create table dept20(empno,ename,job) as select empno,ename,job from emp where deptno=20; create table dept20(no,name,job) as select empno,ename,job from emp where deptno=20;
引用另外一个用户的表
select * from tom.course; --如果无法查询,需tom用户给scotts授权当前表的查询权限select grant select on tom.course to scott;
修改表(添加列或修改列): alter table add | modify [列 列类型(长度) default 默认值]
– 注意:
– 1. 修改数据类型:已有的行数据必须为空
– 2. 修改长度原则:-- 数值型修改长度:当长度向小改时,已有行的数该列必须为空; -- 当长度向大改时,可以随意修改。 -- 字符型修改长度:当长度向小改时,只要修改后的值能容纳下当前 -> 已有数据的最大值即可,当长度向大改时,可以随意修改。
– 3.修改列的默认值:默认值的修改不会影响已经存在的行,只影响新增加的行
1.在person表上增加性别字段 alter table person add(sex char(2)); 2.将姓名为MARRY的用户sex列数据类型修改为varchar2(4); alter table person modify(sex varchar2(4));--ok 均为字符类型 alter table person modify(sex number(1)); --错误 varchar2->number 若更改数据类型,则修改列必须为空
添加默认值
3.给person表的sex列添加默认值'不详' alter table person modify(sex default '不详');
删除表
语法 drop table 表名;
– 注意:只有表的创建者或具有DROP ANY TABLE权限的用户才能删除表
– 删除表原则:• 表中所有的数据和结构都被删除。 • 任何视图和同义词被保留但无效。 • 所有与其相关的约束和索引被删除。 • 任何未完成的事务被提交。
删除列
– alter table 表名 drop column 列名;
– alter table 表名 drop (列名1,[列名2….]);-- 原则: -- 1. 列可以有也可以没有数据。 -- 2. 表中至少保留一列。 -- 3. 列被删除后,不能再恢复。 -- 4. 被外键引用的列,不能被删除。 --删除单列 1.将person表中的sex列删除 alter table person drop column sex; --删除多列 1.将person表中的heigth,weigth列删除 alter table person drop(heigth,weigth); --表中必须至少保留一列 alter table person drop(id,cname,birthday,country_code);--错误 无法删除表中的全部列 --被外键引用的列,不能被删除 alter table dept drop (deptno);--无法删除父项关键字列 deptno被emp表的deptno所关联
重命名
语法:rename 表名 to 新表名;
1.将表person的表名修改为person20180731 rename person to person20180731;
截断表
– truncate为DDL语句,删除表中所有数据,释放存储空间,且无法撤回,默认提交事务
– delete为DML语句,可以删除指定数据行,不释放存储空间,需使用commit或rollback控制事务结束1.截断表person truncate table person;--删除所有数据 delete from person; --删除所有数据
TRUNCATE和DELETE区别:
– TRUNCATE是DDL,只能删除表中所有记录,释放存储空间,
使用ROLLBACK不可以回滚。
– DELETE是DML,可以删除指定记录,不释放存储空间,使用
ROLLBACK可以回滚。
- 数据字典
1.查看当前用户下所有的表
select * from user_tables;
2.通过desc命令查看表结构
desc emp;