oracle11g学习笔记(五)
表的管理
一、表名和列的命名规范
1.必须以字母开头
2.长度不能超过30个字符
3.不能使用oracle的保留字
4.只能使用如下字符串,A-->Z,a-->z,0-->9,$,#等
二、oracle支持的数据类型
1、字符型
char 定长,最长2000字符
例如:char(10) 存储内容为“小韩”时,前4个字符放‘小韩’,后六位由空格补齐
优点是:效率高,查询速率快。如身份证的字段可以设置成char(18)。
varchar2 变长 最大4000字符(oracle推荐使用)
varchar2(10) 存储内容为“小韩”时 oracle分配4个字符
clob(character large object) 字符型大对象
最大4G
2、数字类型
number范围-10的38次方到10的38次方
可以是整数,也可以是小数
number(5,2)表示一个小数有5位有效数字,2位是小数
例如:定义一个范围在-999.99-999.99的数字可以用number(5,2)
定义一个范围在-99999-99999可以用number(5)
3、日期类型
date 包含年月日和时分秒
timestamp oracle对date类型的扩展
4、图片类型
blob 二进制数据,可以存放图片,音频,视频最大4G
这个类型允许我们将大文件存储进数据库,但是一般在数据库里,存放的应该是这些文件的路径,如果对安全性有要求,可以将文件放入数据库
三、建表语句
1)建表
sql>create table student(--表名
Idnumber(4), --学号
Namevarchar(20), --姓名
Sex char(2),--性别
birthday date);--出生日期
上面的语句足以建立一个简单的学生表
2)向已经建立的表中添加字段
sql>alter table student add(ClassId number(2));
3)修改字段的长度
sql>alter table studentmodify(Name varchar2(50) );
4)修改字段的类型/或名字(不能有数据)
sql>alter table student modify(Name char(20));
sql>alter table student rename Name to Sname;
5)删除一个字段(慎重使用)
alter table student drop column Sex;
6)修改表的名字
sql>rename student to stu;
7)删除表
drop table student;
8)查看表结构
desc student;
四、操作表
1、添加数据,所有字段必须都插入
insert into student values(1,'张三','男','01-5月-05');
不要以为这里写错了,oracle中默认的日期格式‘DD-MON-YY’ (日-月-年)
想要修改日期的默认格式可以这样做
sql>alter session set nls_date_format='YYYY-MM-DD';
修改以后就可以用我们熟悉的格式来添加类型
insert into student values(1,'张三','男','2000-08-31');
但是这里的修改只是临时成立的,要想永久改变日期输入格式是需要改注册表的,还有一个方法是使用函数,暂且略过
2、插入部分字段,前提是未插入的字段允许为null
insert into student(Id,Name) values(1,'张三');
3、插入空值
insert into student(Id,Name,Sex) values('1',null,null);
4、查询Name为空的一条记录
按照正常的逻辑,许多人会这样做
select * from studentwhere Name=null;
但是这样的结果是什么都查不到,正确的方法如下
select * from student where Name is null;
查询所有非空的就在is后面加上not
5、修改一个字段
update student set sex=‘女’ where Id=‘1’;
6、修改多个字段
update student set sex=‘男’,Name='赵四' whereId=‘1’;
7、修改含有null值的字段
update student set Name=‘张三’ where Name is null;
8、删除数据(三中方式)
1)删除一条记录
delete from student where Id=‘1’;
2)删除所有记录,表结构还在,会记录日志,这种删除是可以恢复的,速度会稍慢
delete from student;
3)删除表的结构和数据
drop table student ;
4)删除所有记录,表结构还在,不记录日记,所有这种删除无法找回数据,但是速度很快
truncate table student;
9、恢复数据
用delete from student 时数据可恢
1)首先要设置一个保存点
savepoint sp;--sp是保存点名称,可以随意起名,作用是将数据保存在日志中
2)删除数据
delete from student ;
3)查询验证数据是否被删掉
select * from student;
结果是肯定的,没有数据
4)回滚数据
rollback to sp;
5)在查询验证数据回滚是否成功
select * from student;
结果还是肯定的数据回来了!
当然可以设置多个保存点,但是如果不做处理,新的保存点会默认覆盖前一个保存点
10、取消重复行
select distinct deptno,job from emp;
在查询时select后面加上distinct即可将重复数据略去