数据库之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 ...
随机推荐
- WebService从服务端到客户端的用例
1.首先编写Wsdl(基于契约优先的方式),要注意的是命名空间(若是使用include或import)最好使用一致的,代码如下: <?xml version="1.0" en ...
- iOS开发之左右抖动效果
CAKeyframeAnimation *shakeAnim = [CAKeyframeAnimation animation]; shakeAnim.keyPath = @"transfo ...
- iOS开发之数据存储之XML属性列表(plist)归档
1.概述 “归档”意思是持久化存储数据.plist文件是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary.NSArray.NSData.NSNumber等 ...
- MySql Table错误:is marked as crashed and last (automatic?) 和 Error: Table "mysql"."innodb_table_stats" not found
一.mysql 执行select 的时候报Table错误:is marked as crashed and last (automatic?) 解决方法如下: 找到mysql的安装目录的bin/myi ...
- 模拟jquery链式访问
一直写代码写代码,博客都快荒废了,眼看一月要过完,不能不留下点记忆,嘿嘿,刚研究了下jquery的链式访问,这么好用的技能我赶紧get了下,研究后略微修改,模拟一个简单的链式访问,下面这段代码支持修改 ...
- 为什么要学Python
人生苦短,我用python.在大学四年的本科学习中,Python是我接触过语法最简单,功能最为强大的语言,拥有众多第三方库的支持的语言.如果要选一门编程语言作为入门,建议使用Python.但是为了更加 ...
- jQuery控制input不可编辑
1.开启disabled,是input不可以编辑 $("#id").attr("disabled","disabled"); 2.关闭dis ...
- Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)
(一)Java中的继承: 关于继承,在Java中类的继承只能是单继承,不像C+++那样灵活,可以多继承,多继承的后果就是各种关系乱套,就相当于一个孩子有2个母亲一样,社会关系的复杂,不利于程序后期的开 ...
- 读书笔记 effective c++ Item 43 了解如何访问模板化基类中的名字
1. 问题的引入——派生类不会发现模板基类中的名字 假设我们需要写一个应用,使用它可以为不同的公司发送消息.消息可以以加密或者明文(未加密)的方式被发送.如果在编译阶段我们有足够的信息来确定哪个信息会 ...
- [原]C#与非托管——封送和自动封送
之前说到了如何从C函数声明通过简单的查找替换生成一份C#的静态引用声明(C#与非托管——初体验),因为只是简单说明,所以全部采用的是基础类型匹配和自动封送.自动封送虽然能省去我们不少编码时间,但如果不 ...