重点解释:DDL:DDL语句用于定义和管理数据库中的对象。如:Create、Alter、Drop
DML:(Date Manipulation Language)数据库操纵语言命令使用户能够查询数 据库以及操作已有数据库中的数据。如:Insert、Delete、Update、Select 等都是DML
【【 表的基本操作 】】
1、表有名称。
2、表由行和列组成
3、表是存放数据的最基本对象
4、我们将一般的表叫做 heap table(堆表),其含义为杂乱无章的存储数据,堆表是数 据库的重要组织形式。它有别于索引组织表和 cluster 表。
【【 表的命名规则 】】
1、标准 ASCII 码可以描述
2、字母开头
3、30 个字母内
4、不能是保留字
5、可以包含大小写字母、数字、_、$、#
6、不能和所属用户的其它同名称域的对象重名。不同名称域的对象可以重名。例如有 一个视图是 t1,就不能有一个表的名称是 t1,因为当你 select * from t1;的时候,数据库 不知道你查询的哪个,存在两意性。但是表可以和索引重名,因为这样不会影响数据库 的判断。不存在两意性。千万不要使用汉语做表和列的名称,因为汉语是 ascii 码所不 能描述的,ORACLE的核心是 ASCII 编写的,你使用汉语只是一时痛快,后患无穷。
【【 数据字典 】】
- 查出当前用户所有的对象,不包含自己创建的public
Select object_name, object_type from user_objects;
- 查出自己的表,自己的权利,自己拥有的表
Select table_name from user_tables;
- tab 你所拥有的表和视图 Select * from tab;
实验18:建立简单的表,并对表进行简单的ddl的操作
【【 Create table 语句建立表 】】 【【 常见的数据类型 】】
1、要指明表的名称 1、char(n) 定长、字符
2、列的名称 2、varchar2(n)变长、最大4000
3、列的数据类型 3、number(p,s) 数字型
4、列的宽度 4、Date 日期
5、是否有默认值 5、Lone 长整型
6、Lob
7、raw
- 【建立表的SQL】
Create table t1 --创建名字为t1的表
(name char(8), --名字
Salary number(5) default 0, --工资,默认为0
Content char(4 char), --职位
Hiredate date ); --入职时间
其中 name 为 8 个字节,content 为 4 个字
描述表的结构
dese t1
Name Null? Type
Name char(8)
Salary number(5)
Content char(4 char)
Hiredate date
- 【在现有的表上加表】
Create table t2 as select ename name, sal salary from emp;
当 t2 诞生时就会有子查询中所查出的数据。如果想改变列的名称,请用别名
- 【如果不要数据,只要表结构,需要加一个假条件】
Create table t3 (c1,c2,c3) as Select ename, empno, sal from emp where 9=1;
- 【修改表结构】
1、如果列为 null,可以随便修改列的类型和宽度。
2、如果有数据,修改会受到限制。但不会破坏数据。
3、如果不改变数据类型,只改变宽度的话加大是可以的。
Alter table t1 modify (name char (4));
Alter table t2 modify (name char (8));
- 【修改表的名称】
rename t1 to t_1;
必须是表的 owner 才可以修改表名称 修改列的名称(10g 才可以)
Alter table t3 rename column c1 to name;
- 【表注释】
Comment on table emp is 'employee table';
select COMMENTS from user_tab_comments where table_name = 'EMP'
- 【列注释】
Comment on column epm.sal is ‘员工工资’;
Select comments from user_col_comments
Where table_name = 'EMP' and column_name = 'SAL'
- 【丢弃表】
SQL > Select * from tab;
TNAME TABTYPE CLUSTERID
t1 TABLE
t2 TABLE
SQL > Drop table t2
此时表没有真的删除,目前只是改了一个名字
SQL > Select * from tab;
TNAME TABTYPE CLUSTERID
t1 TABLE
BIN$9WMmfz1CRnqF6c5/hfJmaA==$0 TABLE
- 【显示回收站的信息】
SQL > show recyclebin
Original Name Recyclebin Name object Type Drop Time
T2 BIN$9WMmfz1CRnqF6c5/hfJmaA==$0 TABLE 2016-07-01:17:13:00
10、【将回收站的表还原】
FLASHBACK TABLE t2 TO BEFORE DROP;
11、【还原表的同时修改表的名称】
FLASHBACK TABLE T2 TO BEFORE DROP RENAME TO TT2;
12、【清空回收站内指定的表】
PURGE TABLE T2;
13、【清除当前用户的回收站,不会影响其它用户的回收站】
PURGE RECYCLEBIN;
绕过回收站,彻底的删除表,在 10G 前是没有回收站的,就是彻底的删除。回收站内没有的表是不容易恢复的,我只能取备份来恢复了。
Drop table t2 PURGE;
控制回收站的参数是recyclebin=on,生产中一定要设置为off,因为好多的程序是9i 下开发的,drop table 的时候没有加 purge,结果是删除都去了回收站,后果是什么,当 drop table
很多的时候,我们浪费了很多的空间。有一个客户说他的 system 表空间达到 30g 了,为什么?我告诉他的第一句话是 select count(*) from dba_objects;他查询后说有 80 万个对
象,为什么?因为 system 表空间存储的是对象的信息,正常应该小于 1g,如果很大,一定是对象多了。原因是程序每天建立几百个临时表,然后删除。都去了回收站!灾难呀。
【【 DML数据库操作语言】】
1、从无到有 insert into
2、数据变化 update set
3、删除数据 delete where
4、表的融合 merge into
实验19:DML语句,插入、修改、删除表的数据
- 【insert into语句】
insert into t1 (c1, c2, c3) values (v1, v2, v3)
【解释】:c1、c2、c3...是表的字段名
v1、v2、v3...是要插入的数据。切记String类型的要加单引号‘’
1、要点关键字写全,列的个数和数据类型要匹配。这种语法每次只能插入一行。
2、可以使用函数
Insert into t1(c2) values(sysdate);
将当前的日期插入
2、 【隐式插入null】
在插入中没有列出的列,就会被插入 null,如果该列有 default 值,那么就插如默认值。
SQL > insert into dept (deptno) values (50) ;
其中 dname, loc 没有说明,都为 null。 显式插入 null 明确的写出该列的值为 null
SQL > insert into dept values (60, null, null );
SQL > insert into dept (loc , dname , deptno) values (null, null, 70)
- 【日期和字符串】
插入日期格式非常敏感,当插入的列为日期时,最好强制转化为日期类型,默认的转换 在环境变化的时候会报错。
SQL > insert into t3 (hiredate) values (to_date ('080599 ' , 'mmddrr' );
字符串大小写敏感
SQL > insert into t2 (c1) values ('BEIJING ');
SQL > insert into t2 (c1) values ('beijing ');
- 【子查询插入】
不加 values 关键字,一次可以插入多行,列的类型和位置要匹配
SQL > insert into d1 select * from dept;
SQL > insert into emp2 select * from emp where deptno = 30;
- 【update语句】修改表中的数据
SQL > update emp set sal = sal + 1;
SQL > update emp set sal = 2000 where empno = 7900;
SQL > update emp set comm = null where deptno = 30;