数据库之Oracle(一)
前段时间项目中需要做数据管理和迁移的工作,于是又重新拾起了数据库,在javaEE阶段,我们对于数据库的使用仅限于DML(insert,update,delete,select)。数据库的使用也比较狭隘,只需要能够进行基本的增删改查操作就好。本文中,我将主要介绍Oracle数据库的一些基础知识以及一些常用的函数和PL/SQL。
Oracle数据库可以说是目前世界上大型企业运用最多的数据库,它是由oracle公司自主研发的,同时也就决定了它的sql语句和其他数据库(Mysql,Sqlserver)等有一些小地方的区别,不过大体来说,很大一部分的sql语句还是遵循普遍的规则。
一 :Oracle开发管理工具
工欲善其事,必先利其器。Java 有Eclipse,服务器有tomcat,前端有sublime,编辑器有ue,数据库也有自己的管理软件DBMS--Database Management System.DBMS分为两类:基于共享文件和(客户端(Client)—服务端(Server))。客户端主要进行的是用户与之交互的软件,例如客户选择要筛选的条件,后客户端通过网络把改请求传递给服务端,服务端处理完成后返回结果给客户端,呈现给用户。服务端则主要进行连接数据库服务器,对数据进行添加,删除,查询和修改。都是通过服务端来进行的。
在平常使用中,所有的oracle服务器都会安装一个名为Sql*Plus的命令行工具,这个客户端只会在窗口显示SQL>提示符,允许输入命令给Oracle数据库。
另外还会有Oracle SQL DEVELOPR ,在计算机上安装时只显示 SQL DEVELOPR,它支持所有的oracle中sql语句。
二:Oracle 基础知识
在oracle数据库中,与其他数据库不同的是,存在表空间。Oracle中表空间是像其他数据库一样设置了表空间,会管理该空间内的表,表空间实质是一个虚拟的,人为的创建好以后分配给特定的用户,其他用户登陆是不能够对该表空间中的表做任何操作的。
Create tablespace name
Datafile ”D:/Oracle/tomspace” size 1024M
Extent management local
Uniform size 5M
在分配好表空间后,我们就要开始创建表.
下面是oracle数据库的字段类型 (注意:其他数据库的int--> number)
字段类型 |
中文说明 |
限制条件 |
其它说明 |
CHAR |
固定长度字符串 |
最大长度2000 bytes |
|
VARCHAR2 |
可变长度的字符串 |
最大长度4000 bytes |
可做索引的最大长度749 |
NCHAR |
根据字符集而定的固定长度字符串 |
最大长度2000 bytes |
|
NVARCHAR2 |
根据字符集而定的可变长度字符串 |
最大长度4000 bytes |
|
DATE |
日期(日-月-年) |
DD-MM-YY(HH-MI-SS) |
经过严格测试,无千虫问题 |
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),精度更高 |
2.1 DDL(数据定义语言)
2.1.1新建表
Create table tableName( name number,列2 类型.....);(数据库中多条sql语句需要用‘;’隔开)
主键,外键,约束
在新增是一般都会有各种约束,下面简单说几种。
Name Varchar2(45) Primary key ----主键
Age number not null ----非空约束
Sex char(3) default ‘男’ ----默认’男’
Constraint tableName primary Key(列名1,列名2,列名3...) ---联合主键
Foreigen key ---外键
建好的表可以在相应的数据库下Tables中看到
2.1.2 删除表
Drop table tableName
2.1.3 修改表
2.1.3.1.向表中添加新字段
ALTER TABLE <table_name> ADD (字段1 类型 [NOT NULL],字段2 类型 [NOT NULL].... );
2.1.3.2 修改表中字段
ALTER TABLE <table_name> modify(字段1 类型,字段2 类型... );
2.1.3.3 删除表中字段
ALTER TABLE <table_name> drop(字段1,字段2,.... );
2.1.3.4 修改表的名称
RENAME <table_name> to <new table_name>;
2.1.3.5 对已经存在的表添加约束
ALTER TABLE <table_name> ADD CONSTRAINT <constraint_name> 约束类型 (针对的字段名);
示例:
Alter table emp add constraint S_F Foreign key (deptno) references dept(deptno);
2.1.3.6 对表里的约束禁用;
ALTER TABLE <table_name> DISABLE CONSTRAINT <constraint_name>;
2.1.3.7 对表里的约束重新启用;
ALTER TABLE <table_name> ENABLE CONSTRAINT <constraint_name>;
2.1.3.8 删除表中约束
ALTER TABLE <table_name> DROP CONSTRAINT <constraint_name>;
示例:
ALTER TABLE emp drop CONSTRAINT <Primary key>;
2.2 DML(数据操作语言)
2.2.1 插入数据
Insert into tableName values(值1,值2,值3.....)
2.2.2 修改数据
Update tableName set name=’王五’ where age=28
修改是需要添加Where 查询条件,否则整个表中数据都会被修改
2.2.3 删除数据
在删除的时候 有delete 和truncate两种,delete 删除时一般不需要遵从外键约束,而truncate删除时更加彻底,会收到外键约束。
Delete from tableName
Truncate tableName
2.2.4 查询数据
Select name from users
带别名的查询语句
Select s.name from users s 表别名不能够添加 as
Select name (as) a ,age b from users -->查询出的结果显示的列名分别是 a,b 对于(as)可以省略
需要注意的是在oracle自带的DBMS中查询语句不能够对表别名添加AS
2.3 序列(例如id自增长)
在oracle数据库中,列值自动增长需要使用到序列(Sequence).
Create Sequence sequence_name
Start with number ----初始值
Increment by number ----每次增加的值
MaxValue number/NoMaxValue ----最大值/默认无最大值
MinValue number/NoMinValue ----最小值/默认无最小值
Cycle/NoCycle ----表示达到最大值/最小值后(重新开始/不重新开始,会报错)
CACHE/NoCACHE ----会生成序列号
在生成序列之后,在添加中可以
Insert into tableName values(sequence_name.nextval,name,age,sex....)
可以使用nextval 或currval 两个”伪列”来获取下一个值和当前值。
Alter sequence 时 1.初始值是不能去修改的;
2.最大值不能小于当前值,最小值不能大于当前值;
2.4 高级查询
在实际开发中,对于数据的检索我们使用的时候需要各种各样的条件去限制。
2.4.1 Where 过滤查询,带条件查询时必须有Where关键字
描述 |
Sql语句 |
查询年龄在25 的用户姓名 |
select name from users where age=’25’ |
查询年龄25,性别男的用户姓名 |
select name from users where age=’25’ and sex=’男’ |
2.4.2 Between, and , or,in,not in运算符查询
描述 |
Sql语句 |
查询年龄在20-25 之间的用户姓名 |
Select name from users where age Between(20,25) |
Select name from users where age>=20 and age<= 25 |
|
Select name from users where age in(20,25) |
|
查询年龄不在20-25之间的用户姓名 |
Select name from users where age<20 or age>25 |
Select name from users where age not in (20.25) |
2.4.3 Group By 分组
描述 |
Sql语句 |
会通过不同的年龄去分组表中数据,最后得到的一个年龄只有一条数据,显示的数据是id靠前的 |
Select name from users gruop by age |
2.4.4 Having 过滤分组
描述 |
Sql语句 |
显示以年龄分组后数量大于2的用户姓名 |
Select name,count(*) from users group by age having count(*)>2 |
2.4.5 Count() 计算总记录数
描述 |
Sql语句 |
查询所有users 表中的记录总数(包括Null) |
Select count(*) from users |
查询所有users表中列名不为NUll的记录总数 |
Select count(列名) from users |
2.4.6 Order By 排序 (asc升序,desc 降序 不写默认升序)
描述 |
Sql语句 |
按年龄查找用户姓名,按升序排列) |
Select name from users order by age asc |
按年龄查找用户姓名,按降序排列 |
Select name from users order by age desc |
2.4.7 Like 模糊查询 (“_” ,”%”的使用区别)
使用模糊查询的地方很多,比如百度的搜索框应该就是模糊查询,模糊查询可以更有效的,更全面的搜索到相应的信息。
描述 |
Sql语句 |
会查出例如”王阳/李阳”这样的用户年龄 “_”代表前面只有一个字符 |
Select age from users where name like ’_阳’ |
会查出名字中最后一个字是阳的用户,例如”李海阳,李阳” “%”代表任意字符,任意长度 |
Select age from users where name like ’%阳’ |
会查出名字中带有字阳的用户,例如”李海阳,李阳光”,”阳光” |
Select age from users where name like ’%阳%’ --> |
三、常用函数
函数的使用在数据库中是十分常见的,函数的存在方便了我们对数据做所需要的处理,更加规范,安全的得到想要的数据。
字符函数
名称 |
描述 |
CONCAT(字符串1,字符串2) |
将字符串1和字符串2连接成一个新的字符串 |
LPAD(字段,总的大小,添充字符) |
左填充即向右对齐 |
RPAD(字段,总的大小,添充字符) |
右填充即向左对齐 |
LOWER(字符串) |
将字符串全部变成小写; |
UPPER(字符串) |
将字符串全部变成大写; |
INITCAP(字符串) |
将字符串变成第一个字母大写,其余都变成小写; |
LENGTH(字符串) |
求出字符串的长度; |
SUBSTR(字符串,开始位置,长度) |
从字符串中取子串; |
INSTR(字符串,字符) |
查看字符是否在字符串中存在;不存在返回0;存在则返回字符所在的的位置;如果有两个以上的字符则返回第一个的位置. |
TRIM(字符 FROM 字符串) |
去掉字符串首尾的字符; |
TO_CHAR() |
将不是其他类型转成字符类型; |
REPLACE(字符串,字符串1,字符串2) |
将字符串中的字符1替换成字符2; |
TRANSLATE(字符串,字符串1,字符串2) |
替换多的字符; |
ASCII(char) |
求字符的ascii码 |
NLSSORT(字符串) |
对字符串排序. |
数学函数
名称 |
描述 |
ABS(数字) |
一个数的绝对值 |
CEIL(数字) |
向上取整;不论小数后的书为多少都要向前进位; |
FLOOR(数字) |
向下取整;不论小数后的书为多少都删除;| |
MOD(被除数,除数) |
取余数; |
ROUND(数字,从第几为开始取) |
四舍五入; |
SIGN(数字) |
判断是正数还是负数;正数返回1,负数返回-1,0返回0; |
SQRT(数字) |
对数字开方; |
POWER(m,n) |
求m的n次方; |
TRUNC(数字,从第几位开始) |
切数字; |
GREATEST(数字列表) |
找出数字列表中最大的数; |
LEAST(数字列表) |
找出数字列表中最小的数; |
SIN(n) |
求n的正旋 |
COS(n) |
求n的余旋 |
TAN(n) |
求n的正切 |
ACos(n) |
求n的反正切 |
ATAN(n) |
求n的反正切 |
exp(n) |
求n的指数 |
LN(n) |
求n的自然对数,n必须大于0 |
LOG(m,n) |
求n以m为底的对数,m和n为正数,且m不能为0 |
日期函数
名称 |
描述 |
ADD_MONTHS(日期,数字) |
在以有的日期上加一定的月份; |
LAST_DAY(日期) |
求出该日期的最后一天. |
MONTHS_BETWEEN(日期1,日期2) |
求出两个月之间的天树(注意返回的天数为小数); |
NEW_TIME(时间,时区,'gmt') |
按照时区设定时间. |
NEXT_DAY(d,char) |
返回d指定的日期之后并满足char指定条件的第一个日期 |
其他函数
名称 |
描述 |
VSIZE(类型) |
求出数据类型的大小; |
NVL(字符串,替换字符) |
如果字符串为空则替换,否则不替换 |
数据库之Oracle(一)的更多相关文章
- sqlserver 2008R2数据库迁移oracle
x项目需要,将以前的sqlserver数据库迁移的oracle数据库中,由于以前对oracle只是在DML语句的步骤,所以总结一下这次遇到的问题以及具体步骤 1,oracle新建数据库 新建Oracl ...
- 初识 数据库及Oracle数据库
一.数据库基本概念二.数据库举例三.Oracle特点四.Oracle版本五.安装Oracle注意事项六.SQL简介七.Select语句 一.数据库基本概念 数据库(Database,DB)数据库管理系 ...
- oracle监听,数据库,oracle服务器的启动和停用
一.oracle监听,数据库,oracle服务器的启动和停用 使用root用户登录:切换用户su – root/root操作系统,一般只有root用户才有权限去操作系统中安装的oracle数据库服务器 ...
- 数据库之Oracle的介绍与使用20180620
/*******************************************************************************************/ 一.orac ...
- Microsoft-PetSop4.0(宠物商店)-数据库设计-Oracle
ylbtech-DatabaseDesgin:Microsoft-PetSop4.0(宠物商店)-数据库设计-Oracle DatabaseName:PetShop(宠物商店) Model:宠物商店网 ...
- 数据库之Oracle
数据库之Oracle 一. 用户的管理 1. 用户就是好比公司的某个人,而权限是这个人能在公司做什么,他的角色就是说明他的职位. 2. 用户的权限分为: 系统权限:对别的用户的管理操作. 对象权限:对 ...
- Oracle数据库之Oracle的下载与安装
二.Oracle 的下载与安装 2.1.Oracle 简介 Oracle 公司是全球最大的信息管理软件及服务供应商,成立于 1977 年,主要的业务是推动电子商务平台的搭建.Oracle 公司有自己的 ...
- Linux下安装Oracle后重启无法登录数据库ORA-01034:ORACLE not available
Linux下安装了数据库,安装完成后可以用,今天启动就不能用了,提示Oracle not available,后来查找资料,据说是oracle服务没有打开.如下方式可以解决问题. [root@root ...
- 数据库之Oracle优化技巧(一)
数据库之Oracle优化技巧(一) 1.where子句中的连接顺序 在Oracle数据库中,where子句的执行顺序是自下而上进行解析,根据这个原理,表之间的连接必须写在其他where条件之前,那些可 ...
- Python操作数据库类 Oracle、Sqlserver、PostgreSQL
我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...
随机推荐
- shp文件的读取
http://blog.csdn.net/q_l_s/article/details/41486813
- 微信JS初始化--微信JS系列文章(一)
概述 微信JS的使用方法,官方文档已经描述得比较清楚了,这里我就不重复介绍了,本文意在提供现成的代码,供大家快速迭代开发,以及补充一下官方文档描述得不够清楚的地方,避免大家踩相同的坑. 微信JS初始化 ...
- ubuntu14.04下chrome浏览器的安装
ubuntu 64位 1.下载chrome安装包: sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_ ...
- mysql索引使用技巧及注意事项
一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...
- JS-DOM . 01 简单了解DOM
DOM概述 html加载完毕,渲染引擎会在内存中把html文档生成一个DOM树,getElementById是获取内DOM上的元素,然后操作的时候修改的是该元素的属性 体验事件/事件三要素1.事件源( ...
- 零基础入门学习UI设计指南
第一步:认识设计启蒙必备知识 学习一项技能,尤其是已经有一定沉淀并在各行各业有广泛应用的技能,就一定要对它先有充分的认知.在开始正式学习前,你需要花足够的经历去了解和查阅它的起源.发展.应用.未来. ...
- 【前端童鞋看过来!】给大家分享网盘里前端相关书籍,主要是和网络通信(HTTP/TCP/IP)及javascript相关的
百度云链接:https://pan.baidu.com/s/1kUPdf5H(无密码) 截图: <HTTP权威指南> [豆瓣书评]:此书第一部分是HTTP的概略,如果你没有时间,通读第一部 ...
- pygame加载中文名mp3文件出现error
好一阵子没有写东西了,最近几天在做一个基于Python pygame的音乐播放器,本来想做完了,再来发篇文章的,可越做越深,框架大致出来了,考虑周期比较长,也可能是我个人问题,做得比较慢,最近.下面来 ...
- 转载八个最佳Python IDE
八个最佳Python IDE 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Python是一种功能强大.语言简洁的编程语言.本文向大家推荐8个适合Pyt ...
- C语言 动态数组实现
一.概述 C语言是不能直接定义动态数组的,数组必须在初始化时确定长度. 如果要在程序运行时才确定数组的长度,就需要在运行的时候,自己去向系统申请一块内存用动态内存分配实现动态数组. 二.动态内存分配函 ...