数据库的学习基础都是SQL语句,虽然不同数据库会有自己的函数,自己的语言特色,但是核心的SQL语句都是相似的。SQL语句的总结可能会比较多,可能会分成几个博客来总结。本次将介绍Oracle的数据类型和SQL语句的分类。
Oracle基本数据类型介绍
不同版本的Oracle支持的数据类型有些变化但大致一样。下面列举出10g版本所有的数据类型:
字段类型 | 中文说明 | 限制条件 | 其它说明 |
---|---|---|---|
CHAR | 固定长度字符串 | 最大长度2000 bytes | null |
VARCHAR2 | 可变长度的字符串 | 最大长度4000 bytes | 可做索引的最大长度749 |
NCHAR | 根据字符集而定的固定长度字符串 | 最大长度2000 | bytes |
NVARCHAR2 | 根据字符集而定的可变长度字符串 | 最大长度4000 | bytes |
DATE | 日期(日-月-年) | DD-MM-YY(HH-MI-SS) | null |
LONG | 超长字符串 | 最大长度2G(231-1) | 足够存储大部头著作 |
RAW | 固定长度的二进制数据 | 最大长度2000 bytes | 可存放多媒体图象声音等 |
LONG | RAW | 可变长度的二进制数据 | 最大长度2G 同上 |
BLOB | 二进制数据 | 最大长度4G | |
CLOB | 字符数据 | 最大长度4G | |
NCLOB | 根据字符集而定的字符数据 | 最大长度4G | |
BFILE | 存放在数据库外的二进制数据 | 最大长度4G | |
ROWID | 数据表中记录的唯一行号 | 10 bytes | **.*.*格式,*为0或1 |
NROWID | 二进制数据表中记录的唯一行号 | 最大长度4000 | bytes |
NUMBER(P,S) | 数字类型 | P为有效位数,S为小数位 | |
DECIMAL(P,S) | 数字类型 | P为有效位数,S为小数位 | |
INTEGER | 整数类型 | 小的整数 | |
FLOAT | 浮点数类型 | NUMBER(38) | 双精度 |
REAL | 实数类型 | NUMBER(63) | 精度更高 |
引用自Oracle知识库.chm
而所有的数据类型分为四大类:字符型、数字型、日期型和其他类型。
1. 字符型
字符型在Oracle11g中有varchar2,char,nchar,nvarchar2和long五种。
nchar、nvarchar两个现在还没接触到,日后添加。
long类型一般存放图像/视频文件。
char、varchar、varchar2三者一般优先选择varchar2,对比如下:
char:该类型是定长,没达到的长度添加空格。查找的时候会比较麻烦,比如char(10),存一个‘张三’,查找时必须用‘张三%’
varchar:目前与varchar2没区别。其实varchar并不是Oracle提供的数据类型,前面表格里面也没有提到varchar类型,因为varchar是标准Sql提供的数据类型,Oracle只是兼容它(应该所有数据库都会兼容他)。
varchar2:varchar2是变长类型,也是Oracle独有的数据类型,和varchar的区别仅仅是如果未来标准sql修改了varchar类型,Oracle不一定会提供varchar的兼容但一定对varchar2向上、向下有兼容。
2. 数字类型
数字型常用的有number型和float型(int也只是兼容的类型),这里介绍一下number类型:
number(p,s),p表示该数的有效位数,s表示该数的小数位数。比如:
1234.456 number(6,2)则是1234.45
0.001234 number(2,4)则是0.0012
123456.7 number(5,-1)则是123450
123456.7 number(5),超出精度,报错
3.日期类型
常用的有date和timestamp两种类型。timestamp精确到微秒。插入数据时,date数据除了直接用sysdate(当前时间),其他的都必须用到to_date()函数,比如:
INSERT INTO TABLE1(BIRTHDAY) VALUES to_date('2017-1-9','yyyy-mm-dd')
直接插入需要设置的时间。与之相对应的有to_char(),to_number()等。其中to_char(),trunc()可以对时间进行截取。比如根据出生日期获取年龄:
//转化之后是字符串
TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(SBIRTHDAY,'YYYY')
//转化之后是日期,MM-DD初始化为xxxx-1-1
trunc(sysdate,'YYYY')
4.其他类型
比如大数据类型blob,clob等,主要用于varchar2()装不下时(varchar2上限4000字符)和一些文件、图像、视频的存取。
SQL语言分类
SQL语言本身可以分为四类:
DDL:定义数据库存储的信息的数据定义语言
DDL包括对数据库中对象的创建,修改,删除的操作。这些对象有数据库、数据表、视图、索引等。
DML:对数据库表进行操作的数据操纵语言
DML主要是对数据库中的数据进行增加、删除、修改的操作。
DQL:对数据库表进行检索的数据查询语言
DQL是对数据库表中的数据进行查询的。
DCL:对数据库中对象进行权限管理的数据控制语言
DCL是对数据库中的对象权限进行权限设置和取消等操作,只有系统管理员有权限执行这些操作。
1. 数据定义语言
数据定义语言的关键字主要包括:CREATE、DROP、ALTER。CREATE创建表空间、用户、表见第一次练习总结。这里说一下ALTER语句和DROP语句。
ALTER后面可接的关键字有4种(暂时接触到的),ADD、MODIFY、RENAM和EDROP,例句如下
//添加列
ALTER TABLE STUDENT ADD COLUMNNAME VARCHAR2(100)
//修改列数据类型
ALTER TABLE STUDENT MODIFY COLUMNNAME NUMBER(2,2)
//重令列名
ALTER TABLE STUDENT RENAME COLUMN COLUMNNAME TO STUDENT_REMARK
//删除列
ALTER TABLE STUDENT DROP COLUMN STUDENT_REMARK
ALTER ADD:用于向表中添加列
ALTER MODIFY:用来修改表中已经存在的列的信息。
ALTER DROP COLUMN:删除表中的列,在删除表中的列时经常要加上CASCADECONSTRAINTS,作用是把与该列有关的约束也一并删掉。
DROP语句用来删除一些不需要的表,例句:
DROP TABLE TABLE1
与之相似的关键字还有TRANCATE,作用是清空表中的所有数据,不会删除表,速度远快于DROP。
2. 数据操纵语言及数据查询语言
对数据库的操纵无非是对数据的增删查改,其中查询也称为数据查询语言。
添加数据:
关键字INSERT ,列句如下:
INSERT INTO TABLE_NAME (COLUMN_NAME1,COLUMN_NAME2,...)VALUES (DATA1,DATA2,...);
除了上述SQL语句可以添加数据,在PL/SQL界面左侧中间栏找到表后——右键编辑数据/输入SELECT * FROM TABLE_NAME FOR DATE.可以在可视化界面上编辑数据。
修改数据
关键字UPDATE,例句如下:
UPDATE TABLE_NAME SET COLUMN_NAME1=DATA1,COLUMN_NAME2=DATA2,...[WHERE CONDITION]
可视化界面修改数据如上面一条所示。
删除数据
关键字DELETE,例句如下:
DELETE FROM TABLE_NAME [WHERE CONDITION];
和上面一样,没什么好说的。
查询语句
关键字SELECT,一般例句如下:
SELECT COLUMN_NAME1,COLUMN_NAME2,...FROM TABLE_NAME WHERE [CONDITION];
SELECT 语句多结合ORACLE里面的各种函数一起查询,做一些复杂的查询的时候SELECT语句可以非常复杂,下几篇用来总结SELECT语句。
3. 数据控制语言
主要是对数据使用者赋予和撤销访问数据库的权限的设置,主要包括授予权限要使用的语句GRANT和收回权限的语句REVOKE。
目前尚未接触到,后续添加。