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+代理+線程變數實現。對於開發者,一般只需要知道註解的用法以及注意事項即可。技術實現上,有興趣可以下載源碼查看或買本大牛的書籍學習。