当前位置:首页 » 编程语言 » sql事务传播特性
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql事务传播特性

发布时间: 2022-04-22 14:36:07

A. sql Server 和 Oracle 以及 MySQL 有哪些区别

Oracle
Oracle 能在所有主流平台上运行(包括Windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持,Oracle并行服务器通过使一组结点共享同一簇中的工作来扩展Windows NT的能力,提供高可用性和高伸缩性的簇的解决方案。如果Windows NT不能满足需要,用户可以把数据库移到UNIX中。Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。Oracle获得最高认证级别的ISO标准认证.Oracle性能最高,保持开放平台下的TPC-D和TPC-C的世界记录Oracle多层次网络计 算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。
Oracle 在兼容性、可移植性、可联结性、高生产率上、开放性也存在优点。Oracle产品采用标准SQL,并经过美国国家标准技术所(NIST)测试。与 IBM SQL/DS,DB2,INGRES,IDMS/R等兼容。Oracle的产品可运行于很宽范围的硬件与操作系统平台上。可以安装在70种以上 不同的大、中、小型机上;可在VMS、DOS、UNIX、WINDOWS等多种操作系统下工作。能与多种通讯网络相连,支持各种协议(TCP/IP、 DECnet、LU6.2等)。提供了多种开发工具,能极大的方便用户进行进一步的开发。Oracle良好的兼容性、可移植性、可连接性和高生产率是 Oracle RDBMS具有良好的开放性。
Oracle价格是比较昂贵的。据说一套正版的Oracle软件早在2006年年底的时候在市场上的价格已经达到了6位数。所以如果你的项目不是那种超级大的项目,还是放弃Oracle吧。
SQL Server
SQL Server 是 Microsoft推出一套产品,它具有使用方便、可伸缩性好、与相关软件集成程度高等优点,逐渐成为Windows平台下进行数据库应用开发较为理想的 选择之一。SQLServer是目前流行的数据库之一,它已广泛应用于金融、保险、电力、行政管理等与数据库有关的行业。而且,由于其易操作性及友好的界 面,赢得了广大用户的青睐,尤其是SQLServer与其它数据库,如Access、FoxPro、Excel等有良好的ODBC接口,可以把上述数据库 转成SQLServer的数据库,因此目前越来越多的读者正在使用SQLServer。
SQL Server由于是微软的产品,又有着如此强大的功能,所以他的影响力是几种数据库系统中比较大,用户也是比较多的。它一般是和同是微软产品的.net平台一起搭配使用。当然其他的各种开发平台,都提供了与它相关的数据库连接方式。因此,开发软件用SQL Server做数据库是一个正确的选择。
MySQL
MySQL不支持事务处理,没有视图,没有存储过程和触发器,没有数据库端的用户自定义函数,不能完全使用标准的SQL语法。
从数据库行家听说的第一件事就是MySQL缺乏transactions,rollbacks, 和subselects的功能。如果你计划使用MySQL写一个关于银行、会计的应用程序,或者计划维护一些随时需要线性递增的不同类的计数器,你将缺乏transactions功能。在现有的发布版本的 MySQL下,请不要有任何的这些想法。(请注意,MySQL的测试版3.23.x系列现在已经支持transactions了)。
在非常必要的情况下,MySQL的局限性可以通过一部分开发者的努力得到克服。在MySQL中你失去的主要功能是subselect语句,而这正是其它的所有数据库都具有的。换而言之,这个失去的功能是一个痛苦。
MySQL没法处理复杂的关联性数据库功能,例如,子查询(subqueries),虽然大多数的子查询都可以改写成join
另一个MySQL没有提供支持的功能是事务处理(transaction)以及事务的提交(commit)/撤销(rollback)。一个事务指的是被当作一个单位来共同执行的一群或一套命令。如果一个事务没法完成,那么整个事务里面没有一个指令是真正执行下去的。对于必须处理线上订单的商业网站来说,MySQL没有支持这项功能,的确让人觉得很失望。但是可以用MaxSQL,一个分开的服务器,它能通过外挂的表格来支持事务功能。
外键(foreignkey)以及参考完整性限制(referentialintegrity)可以让你制定表格中资料间的约束,然后将约束 (constraint)加到你所规定的资料里面。这些MySQL没有的功能表示一个有赖复杂的资料关系的应用程序并不适合使用MySQL。当我们说 MySQL不支持外键时,我们指的就是数据库的参考完整性限制--MySQL并没有支持外键的规则,当然更没有支持连锁删除(cascadingdelete)的功能。简短的说,如果你的工作需要使用复杂的资料关联,那你还是用原来的Access吧。
你在MySQL中也不会找到存储进程(storedprocere)以及触发器(trigger)。(针对这些功能,在Access提供了相对的事件进程(eventprocere)。
MySQL+php+apache三者被软件开发者称为“php黄金组合”。
Oracle和MySQL的主要区别
Oracle:客户端和命令窗口,都是由用户决定内容-> conn user_name/password;
MySQL:客户端和命令窗口,都是由数据库决定内容-> use datebase;
都可以创建多数据库多用户,个人倾向于Oracle一个数据库中多个用户的形式,MySQL多个数据库多个用户形式(最好每个数据库对应一个用户)
Oracle是大型数据库而MySQL是中小型数据库,Oracle市场占有率达40%,MySQL只有20%左右,同时MySQL是开源的而Oracle价格非常高。
Oracle支持大并发,大访问量,是OLTP(On-Line Transaction Processing联机事务处理系统)最好的工具。
安装所用的空间差别也是很大的,MySQL安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
Oracle也与MySQL操作上的一些区别
组函数用法规则
MySQL中组函数在select语句中可以随意使用,但在Oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错
eg:
select name,count(money) from user;这个放在MySQL中没有问题在Oracle中就有问题了。
自动增长的数据类型处理
MySQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。Oracle没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。
CREATE SEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999
INSERT语句插入这个字段值为:序列号的名称.NEXTVAL
单引号的处理
MySQL里可以用双引号包起字符串,Oracle里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
翻页的SQL语句的处理
MySQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。Oracle处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。
以下是经过分析后较好的两种Oracle翻页SQL语句(ID是唯一关键字的字段名):
语句一:
SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;
语句二:
SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (SELECT [FIELD_NAME,...] FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 条件3;
长字符串的处理
长字符串的处理Oracle也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用Oracle里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
日期字段的处理
MySQL日期字段分DATE和TIME两种,Oracle日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE,精确到秒,或者用字符串转换成日期型函数TO_DATE('2001-08-01','YYYY-MM-DD')年-月-日24小时:分钟:秒的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种日期格式,可以参看Oracle DOC.
日期型字段转换成字符串函数TO_CHAR('2001-08-01','YYYY-MM-DD HH24:MI:SS')
日期字段的数学运算公式有很大的不同。MySQL找到离当前时间7天用DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)Oracle找到离当前时间7天用 DATE_FIELD_NAME >SYSDATE - 7;
MySQL中插入当前时间的几个函数是:NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以'YYYY-MM-DD'的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以'HH:MM:SS'的格式返回当前的时间,可以直接存到TIME字段中。例:insert into tablename (fieldname) values (now())
而Oracle中当前时间是sysdate
空字符的处理
MySQL的非空字段也有空的内容,Oracle里定义了非空字段就不容许有空的内容。按MySQL的NOT NULL来定义Oracle表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
字符串的模糊比较
MySQL里用字段名like%'字符串%',Oracle里也可以用字段名like%'字符串%'但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,'字符串')>0会得到更精确的查找结果。
程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。
主键
MySQL一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,MySQL将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。
Oracle实现了ANSIISQL中大部分功能,如,事务的隔离级别、传播特性等而MySQL在这方面还是比较的弱

B. 请问如何用JDBC通过SSH Tunnel连MySQL Database

- <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
<value>/WEB-INF/classes/jdbc.properties</value>
</list>
</property>
</bean>
- <!-- 定义数据源Bean,使用c3p0连接池,提供给Hibernate的sessionFactory或者jdbcTemplate
-->
- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
- <property name="driverClass">
<value>${jdbc.driverClassName}</value>
</property>
- <property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
- <property name="user">
<value>${jdbc.user}</value>
</property>
- <property name="password">
<value>${jdbc.password}</value>
</property>
- <property name="minPoolSize">
<value>5</value>
</property>
- <property name="maxPoolSize">
<value>10</value>
</property>
- <property name="initialPoolSize">
<value>5</value>
</property>
- <property name="maxStatements">
<value>100</value>
</property>
- <!-- 达到最大连接数后可以增加的连接数 个
-->
- <property name="acquireIncrement">
<value>2</value>
</property>
- <!-- 最大闲置时间 秒
-->
- <property name="maxIdleTime">
<value>600</value>
</property>
- <!-- 闲置的连接测试周期 秒
-->
- <property name="idleConnectionTestPeriod">
<value>30</value>
</property>
</bean>
- <!-- 定义Hibernate的sessionFactory,通过该Bean,可以获得Hibernate的Session
-->
- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
<ref bean="dataSource" />
</property>
- <property name="hibernateProperties">
- <props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
- <!-- 设置显示Hibernate操作的SQL语句
-->
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
- <property name="mappingResources">
- <list>
- <!-- <value>cn/com/gnt/gdp/entity/User.hbm.xml</value>
<value>cn/com/gnt/gdp/entity/Block.hbm.xml</value>

-->
</list>
</property>
</bean>
- <!-- 定义jdbcTemplate
-->
- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
- <!-- 定义hibernateTemplate
-->
- <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
- <!-- ======================== 事务配置 ========================
-->
- <!-- 配置事务管理器
-->
- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
- <!-- 配置事务特性 ,配置add、delete和update开始的方法,事务传播特性为required
-->
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
- <!-- 配置那些类的方法进行事务管理,当前cn.com.gnt.gdp.service包中的子包、类中所有方法需要,还需要参考tx:advice的设置
-->
- <aop:config>
<aop:pointcut id="allManagerMethod" expression="execution (* cn.com.gnt.gdp.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" />
</aop:config>
==================
求分给我 谢谢

C. spring事物配置问题,没有回滚,请大侠没赐教

你说的没有回滚是不是testTransaction(TestModel testModel)这个方法没有整体提交或回滚。
你现在的代码和spring的事务配置是不配套的。在spring配置中一个事务单元是一个方法。就是说updateData(long id)是一个事务管理,saveData(TestModel testModel)是被另一个事务管理的。在被testTransaction(TestModel testModel)这个方法时,他们的提交和回滚都是独立的,彼此没有事物关联。要是一个方法有多个DB数据更新操作,必须把所有DB操作写到一个方法里。
以你上边代码为例
public void testTransaction(TestModel testModel){
transactionDao.updateData(2);
testService.testSql();
transactionDao.saveData(testModel);
}
这样,transactionDao.updateData(2);执行后事务并没有对数据立即执行持久化操作,而是只改变了内存中持久化对象的数据,当下边的DB数据操作发生异常的时候,事务把内存中被改变的数据复原,并终止的处理,抛出异常。当这个方法全部被执行完毕的场合,如果没有异常发生,事务才会执行commit操作。

D. mysql和oralce的区别

1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。
2. Oracle支持大并发,大访问量,是OLTP最好的工具。
3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
4.Oracle也Mysql操作上的一些区别
①主键 Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。
②单引号的处理 MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
③翻页的SQL语句的处理 MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不能用ROWNUM>80
④ 长字符串的处理 长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。 ⑤空字符的处理 MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
⑥字符串的模糊比较 MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快。

⑦Oracle实现了ANSII SQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的若

E. ORACLE与MYSQL的区别

MySQL与Oracle的区别:
一、Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。
二、Oracle支持大并发,大访问量,是OLTP最好的工具。
三、安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
四、Oracle也Mysql操作上的一些区别:
1、主键Mysql一般使用自动增长类型,在创建表时只要指定表的主键为autoincrement,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。
2、单引号的处理MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
3、翻页的SQL语句的处理MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。
4、长字符串的处理长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
5、空字符的处理MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOTNULL来定义ORACLE表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
6、字符串的模糊比较MYSQL里用字段名like'%字符串%',ORACLE里也可以用字段名like'%字符串%'但这种方法不能使用索引,速度不快。
7、Oracle实现了ANSIISQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的弱。

F. 怎么样在action中配置事务

倒萨洛克菲勒的可管理分开后随即hi近日透露考核,mbkdfsfigopafgkldakdgoikr9hik了卡管理的开发力度空啊看拉萨的罚款阿斯科利饭卡的石佛看 有人替他感到放松公司、

G. oracle数据库和mysql数据库的区别

Oracle数据库与MySQL数据库的区别是本文我们主要介绍的内容,希望能够对您有所帮助。
1.组函数用法规则
mysql中组函数在select语句中可以随意使用,但在oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错
eg:
select name,count(money) from user;这个放在mysql中没有问题在oracle中就有问题了。
2.自动增长的数据类型处理
MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。
CREATE SEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999
INSERT语句插入这个字段值为:序列号的名称.NEXTVAL
3.单引号的处理
MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
4.翻页的SQL语句的处理
MYSQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。
以下是经过分析后较好的两种ORACLE翻页SQL语句(ID是唯一关键字的字段名):
语句一:
SELECT ID, [FIELD_NAME,...] FROM
TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID
FROM TABLE_NAME WHERE 条件1 ORDER BY 条件2) WHERE NUMROW > 80 AND NUMROW
< 100 ) ORDER BY 条件3;
语句二:
SELECT * FROM (( SELECT ROWNUM AS
NUMROW, c.* from (select [FIELD_NAME,...] FROM TABLE_NAME WHERE 条件1
ORDER BY 条件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY
条件3;
5.长字符串的处理
长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
6.日期字段的处理
MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE,精确到秒,或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)年-月-日24小时:分钟:秒的格式YYYY-MM-DD
HH24:MI:SS TO_DATE()还有很多种日期格式,可以参看ORACLE
DOC.日期型字段转换成字符串函数TO_CHAR(‘2001-08-01’,’YYYY-MM-DD HH24:MI:SS’)
日期字段的数学运算公式有很大的不同。MYSQL找到离当前时间7天用DATE_FIELD_NAME
> SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离当前时间7天用 DATE_FIELD_NAME
>SYSDATE - 7;
MYSQL中插入当前时间的几个函数是:NOW()函数以`'YYYY-MM-DD
HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。例:insert
into tablename (fieldname) values (now())
而oracle中当前时间是sysdate
7.空字符的处理
MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
8.字符串的模糊比较
MYSQL里用字段名like%‘字符串%’,ORACLE里也可以用字段名like%‘字符串%’但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,‘字符串’)>0会得到更精确的查找结果。
9.程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。
=======================================================================================

1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。
2. Oracle支持大并发,大访问量,是OLTP最好的工具。
3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
4.Oracle也Mysql操作上的区别
①主键

Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主
键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。
②单引号的处理
MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
③翻页的SQL语句的处理
MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用
ROWNUM<100, 不能用ROWNUM>80
④ 长字符串的处理
长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用
ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
⑤空字符的处理
MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符
进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
⑥字符串的模糊比较
MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快。
⑦Oracle实现了ANSII SQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的弱。

H. 请问下mysql和oracle的区别

请问下mysql和oracle的区别:

1、价格

价格是两个数据库之间最显着的差异。Oracle有一个名为Oracle Express Edition的东西,这个版本完全免费。不幸的是,该版本对这些功能有太多限制。如果你继续购买全功能标准版或企业版,它将花费你数万美元。另一方面,MySQL是一个开源数据库,完全免费。最着名的Facebook社交网站运行在MySQL上。

2、安全

虽然MySQL使用三个参数来验证用户,即用户名,密码和位置,但Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。

3、对象名称

虽然某些模式对象名称在Oracle和MySQL中都不区分大小写,例如列,存储过程,索引等,但在某些情况下,两个数据库之间的区分大小写不同;Oracle对所有对象名称都不区分大小写,但是,与Oracle不同,某些MySQL对象名称(如数据库和表)区分大小写(取决于底层操作系统)。

4、字符数据类型

两个数据库中支持的字符类型存在一些差异。MySQL为字符类型提供CHAR和VARCHAR,最大长度允许为65,535字节(CHAR最多可以为255字节,VARCHAR为65.535字节)。另一方面,Oracle支持四种字符类型,即CHAR,NCHAR,VARCHAR2和NVARCHAR2;所有四种字符类型都需要至少1个字节长;CHAR和NCHAR最大可以是2000个字节,NVARCHAR2和VARCHAR2的最大限制是4000个字节。可能会在最新版本中进行扩展。

I. Spring 事务管理问题

你说的在某个方法F上开启session,
1、如果F实现复杂功能,需要对多个不同数据库实例进行操作(跨库),从Java层框架的角度,这个session是一个逻辑上的事务,管理所有涉及的数据库实例的连接(一般使用连接池管理),成功则所有涉及的数据库实例的操作统一提交,失败则统一回滚。
2、如果F实现功能,只涉及对某个数据库进行操作,同上。

对于“在service层方法执行前已打开session,开启了事务。那再执行service层方法时又再次打开session,这应该不是同一个session,这不就矛盾了了,事务怎么添加到service层方法上来的呢?
”:不同Spring注解,功能是不一样的。如果你在F上加@Transactional(propagation = Propagation.REQUIRES_NEW),则前后肯定不处于同一个session上下文环境下。如果注解是@Transactional(propagation = Propagation.REQUIRED),则前后是处于同一个session上下文环境下。Spring会根据注解进行处理,表现为事务的传播特性,技术上通过AOP+代理+线程变量实现。对于开发者,一般只需要知道注解的用法以及注意事项即可。技术实现上,有兴趣可以下载源码查看或买本大牛的书籍学习。