Oracle学习(一)
ORACLE常用数据类型
类型名称 | ORACLE类型 | 描述 |
---|---|---|
整型 | Number(n) | N表示数字的长度,默认值number-相当于number(11),范围为-1038到1038 |
小数 | Number(n,m) | N表示总长度,m小数位,number(5,2) |
字符串(固定长度) | Char(n) | N表示长度,最大2000个字节, |
字符串(可变长度) | Varchar2(n) | N表示长度 最大4000字节 |
字符串(可变长度) | nvarchar2(n) | N表示长度 最大4000个字节 |
日期 | date | ORACLE日期格式是固定。日期在存储时有一个本地化操作 |
时间 | timestamp | TIMESTAMP数据类型要比DATE数据类型更确切,粒度更细 |
大文本类型 | Clob | 存储海量文本数据。最大值可达4G |
大量二进制类型 | blob | 存储二进制数据,最大4g |
varchar2(byte):就是默认的表示方式,比如我们写成:varchar2(100),就相当于varchar2(100 byte),表示最大字节数是100,该字段最多能容纳100个字节,强调空间大小。
varchar2(char):表示最大字符数是100,该字段最多能容纳100个字符,强调个数。假设我们写成varchar2(100 char),那么无论是数字、字母、汉字,都看成一个字符,最多写100个
nvarchar2():没有byte、char之分,类似于varchar2(char),只不过nvarchar2()屏蔽了数据库编码,无论是何种编码,nvarchar2()中一个汉字都占两个字节。
char varchar2 nvarchar2
http://www.cnblogs.com/iyangyuan/p/3491215.html
常见的Oracle数据类型了解:
Char类型:定义长度时,如果存储的数据小于长度,空位补空格。固定长度的类型
缺点:浪费存储空间 char(3) m 空格空格m
Char类型中存在空格,那么在程序取值比较时容易出错
在ORACLE中使用trim()函数,会造成char类型字段上的索引失效
优点:char类型在效率上比着其它字符类型的会快一点
Varchar2类型: 可变长度。存储时如果数据小于长度,varchar的长度按实际存储长度计算
优点:节省存储空间 varchar2(3) 你好 你好
缺点:效率比char类型低
注意:varchar2只有Oracle才有的。带2的是Oracle自己增强的数据类型,不是sql99规范中的。
Clob是longtext类型的代替品,存储超大量的字符串。如果varchar存储不了,可以用这个。但效率很低下,而且不能使用上索引。这玩意的存储大小不是按长度存储,按字节数存储的。
Blob 存储海量二进制类型。例:电影、音乐、高清图片。
缺点:每次存储时都需要转换为二进制进行存储
获取时把二进制转为数据,通常存储电影、音乐时存储的是文件的路径
date类型是Oracle常用的日期型变量,他的时间间隔是秒。两个日期型相减得到是两个时间的间隔,注意单位是“天”
timestamp是DATE类型的扩展,可以精确到小数秒(fractional_seconds_precision),可以是0 to9,缺省是6。两个timestamp相减的话,不能直接的得到天书,而是得到,
多少天,多少小时,多少秒等
两者转换:
to_char来转换timestamp——>date:
select to_date(to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual
date ——>timestamp:
select to_timestamp(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual
Oracle与mysql 比较
https://blog.csdn.net/baidu_37107022/article/details/77043959
区别 | mysql | oracle |
---|---|---|
并发性 | mysql以表级锁为主,对资源锁定的粒度很大;虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。 | oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以oracle对并发性的支持要好很多。 |
一致性 | mysql没有类似oracle的构造多版本数据块的机制,只支持read commited的隔离级别。 一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据。 |
oracle支持serializable的隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。 oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session查询时,如果对应的数据块发生变化,oracle会在undo表空间中为这个session构造它查询时的旧的数据块。 |
事务 | mysql在innodb存储引擎的行级锁的情况下才支持事务 | oracle很早就完全支持事务 |
数据持久性 | 默认提交sql语句,但如果更新过程中出现db或主机重启的问题,也许会丢失数据。 | 保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。 |
提交方式 | 默认是自动提交 | 默认不自动提交,需要用户手动提交 |
逻辑备份 | mysql逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的DML使用 | oracle逻辑备份时不锁定数据,且备份的数据是一致的 |
热备份 | myisam的引擎,用mysql自带的mysqlhostcopy热备时,需要给表加读锁,影响DML操作; innodb的引擎,它会备份innodb的表和索引,但是不会备份.frm文件。用ibbackup备份时,会有一个日志文件记录备份期间的数据变化,因此可以不用锁表,不影响其他用户使用数据库。但此工具是收费的; innobackup是结合ibbackup使用的一个脚本,他会协助对.frm文件的备份。 |
oracle有成熟的热备工具rman,热备时,不影响用户使用数据库。即使备份的数据库不一致,也可以在恢复时通过归档日志和联机重做日志进行一致的回复。 |
sql语句的扩展和灵活性 | mysql对sql语句有很多非常实用而方便的扩展,比如limit功能,insert可以一次插入多行数据,select某些管理数据可以不加from。 | oracle在这方面感觉更加稳重传统一些 |
复制 | 复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。 | 既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。 |
分区表和分区索引 | mysql的分区表还不太成熟稳定 | oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验 |
类型 | 中小型数据库 | 大型数据库 |
mysql与Oracle操作上的区别:
操作上的区别 | mysql | Oracle |
---|---|---|
主键 | Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长 | Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可 |
单引号的处理 | MYSQL里可以用双引号包起字符串 | ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。 |
翻页的SQL语句的处理 | MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数 | ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不能用ROWNUM>80 |
字符串的模糊比较 | MYSQL里用 字段名 like ‘%字符串%’, | ORACLE里也可以用 字段名 like ‘%字符串%’ 但这种方法不能使用索引, 速度不快。 |
空字符的处理 | MYSQL的非空字段也有空的内容 | ORACLE里定义了非空字段就不容许有空的内容 |
更多:
https://wenku.baidu.com/view/d3a39630376baf1ffc4fad72.html?sxts=1543050295726
https://wenku.baidu.com/view/108b843658fb770bf78a55d2.html?sxts=1543050304259
http://www.cnblogs.com/iyangyuan/p/3491215.html