oracle基本数据类型:
-
整型 number(n)
N表示数字的长度,默认值number-相当于number(11)
-
小数 number(n,m)
N表示总长度,m小数位,number(5,2)
-
字符串(固定长度)
char(n) N表示长度
-
字符串(可变长度)varchar2(n)
N表示长度 最高存储2000字符(1000汉字左右) -
日期 date
ORACLE日期格式是固定。日期在存储时有一个本地化操作
-
大文本类型 Clob
存储海量文本数据。最大值可达4G
-
大量二进制类型 blob
存储二进制数据,最大4g
Oracle数据类型了解:
char类型:
Char类型:定义长度时,如果存储的数据小于长度,空位补空格。固定长度的类型
缺点:
浪费存储空间
Char类型中存在空格,那么在程序取值比较时容易出错
在ORACLE中使用trim()函数,会造成char类型字段上的索引失效
优点:
- char类型在效率上比着其它字符类型的会快一点
varchar2类型:
Varchar2类型:可变长度。存储时如果数据小于长度,varchar的长度按实际存储长度计算
优点:
- 节省存储空间
缺点:
- 效率比char类型低
注意:varchar2只有Oracle才有的。带2的是Oracle自己增强的数据类型,不是sql99规范中的。
clod类型:
Clob是longtext类型的代替品,存储超大量的字符串。如果varchar存储不了,可以用这个。但效率很低下,而且不能使用上索引。这玩意的存储大小不是按长度存储,按字节数存储的。
Blob 存储海量二进制类型。例:电影、音乐、高清图片。
缺点:每次存储时都需要转换为二进制进行存储
获取时把二进制转为数据
通常存储电影、音乐时存储的是文件的路径
表的命名规则和命名规范
表名和列名的基本规范如下:
- 必须以首字母大写
- 必须在1-30个字符之间
- 必须只能包含A-Z,a-z,0-9,_,$,和#
- 必须不能和用户定义的其他对象重名
- 必须不能是oracle的保留字
- oracle默认储存是都存为大写
- 数据库名只能是1-8位,datalink可以是128位,和其他一些特殊字符
扩展:
另外,每个公司都有自己特有的命名规范,比如,要求所有的数据库对象都要加上一个前缀,用于快速识别对象的类别。
比如表的命名:
t_person :存放个人信息的表。
t_crm_person:存放客服子系统模块的人员信息表。
视图的命名:
v_person:用来查询人员信息的视图。
命名规范的作用:
- 良好的命名规范便于识别和管理,对于系统开发和维护都有很大的帮助。
- 使用工具的提示功能也更容易快速定位到所需要的对象。
表的操作:
创建表:
create table 表名 (列名,属性;);
创建表的要求条件:
必须具备CREATE TABLE权限、存储空间。
必须指定表名、列名、数据类型、数据类型的大小
查看表结构:
desc 表名;
表重命名:
rename 原表名 to 新表名;
删除表:
drop 表名;
表的字段操作:
增:
alter table 表名 add 列名 列的属性; --单列操作
alter table 表名 add (列名1 列1的属性,列名2 列2的属性,...) --多列操作
删:
alter table 表名 drop column 列名; --单列操作
alter table 表名 drop (列1,列2); --多列操作(多列不需要加column)
改:
alter table 表名 modify 列名 新属性; --单列操作
alter table 表名 modify (列名1 列1的新属性,列名2 列2的新属性);--多列操作
数据的操作::
增:
–单行操作
insert into 表名 values(所有列的信息); --数据类型必须与表结构里字段的属性一致
insert into 表名 values(部分信息); --会按表的字段顺序加入信息,后面没设置的为null(输入数据必须小于或等于列数)
–多行操作
insert into 表1
select 数据1 from dual
union
select 数据2 from dual; --dual 是一张伪表只是为了方便操作而存在,
删:
delete from 表名 --删除所有数据
delete 列名 from 表名 where 条件 --删除符合条件的某些数据
删除某一列数据(该列必须可以为null):
1.update 表名 set 列名=null;
2.delete from 表名 where 列名 is not null ;
改:
update 表名 set 列名=数据 where 条件; --修改满足条件的数据
update 表名 set 列名=数据; --将该列全部修改
查看:
select * from 表名; --查看表的全部信息
select 列1,列2 from 表名; --查看表的列1,列2信息
约束:
- 约束的概念作用:
- 约束是可以更好的保证数据库数据的完整性和一致性的一套机制。
- 约束可以限制加入表的数据的类型。
- 如果存在依赖关系,约束可以防止错误的删除数据,也可以级联删除数据。
- 约束创建的时机:
- 创建表的时候,同时创建约束。
- 表结构创建完成后,可以再添加约束。
- 常见的约束类型:
- NOT NULL 不为空
- UNIQUE 唯一约束
- PRIMARY KEY 主键
- FOREIGN KEY 外键
- DEFAULT 默认值
- CHECK—用来检查一个字段的值是否符合某表达式,表达式的结果必须是布尔值。
具体使用:
create table customer(
id NUMBER(8) primary key, --主键
name varchar2(50) not null, --不为空
age number(3) check (age between 0 and 100),
email varchar2(50) unique, --唯一
sex char(2) default '男' check(sex in ('男','女')), -- 一个char能存半个汉字,两位char能存一个汉字
);
create table cart(
id NUMBER(8) primary key, --主键
cid NUMBER(8) references customer(id),--外键
c_num NUMBER(8) NOT NULL
);
序列:
序列:可以供多个用户用来产生唯一数值的数据库对象
需求:
Mysql中主键有自增长的特性.
Oracle中,主键没有自增长这个特性.那么如何解决这个问题.使用序列可以解决.
作用:
- 自动提供唯一的数值
- 共享对象
- 主要用于提供主键值
- 将序列装入内存可以提高访问效率
创建序列:
序列的使用:
-
在ORACLE中为序列提供了两个伪列:
-
1,NEXTVAL 获取序列对象的下一个值(指针向前移动一个,并且获取到当前的值。)
-
2,CURRVAL 获取序列对象当前的值
SELECT seq_test.currval FROM dual;--获取当前指针 在插入数据的时候插入序列主键. INSERT INTO TEST VALUES(seq_test.nextval,'Jack',null);
序列的时间裂缝:
- 列是一个共有对象,多个表都可以调用。但实际开发中,可以避免多个表用一个序列(创建多个序列)。序列是独立的对象。任意表都可以使用,但是编号就不能保证有序。
- 当插入记录时报错,序列对象值也被使用,下一次再使用时,序列的值就会+1
- 简单的来说就是:用序列插入数据库的值不一定是连续的。
序列出现裂缝的条件:
事务回滚。
系统异常。
多个表同时使用同一个序列。