国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL(七)MySQL和Oracle、PostgreSQL的區(qū)別

這篇具有很好參考價(jià)值的文章主要介紹了MySQL(七)MySQL和Oracle、PostgreSQL的區(qū)別。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


本系列文章:
?? MySQL(一)SQL語(yǔ)法、數(shù)據(jù)類型、常用函數(shù)、事務(wù)
?? MySQL(二)MySQL SQL練習(xí)題
?? MySQL(三)視圖、存儲(chǔ)過(guò)程、索引
?? MySQL(四)存儲(chǔ)引擎、鎖
?? MySQL(五)MySQL架構(gòu)、數(shù)據(jù)庫(kù)優(yōu)化、主從復(fù)制
?? MySQL(六)SQL語(yǔ)句優(yōu)化
?? MySQL(七)MySQL和Oracle、PostgreSQL的區(qū)別

一、MySQL和Oracle

1.1 基本差別*

  • 數(shù)據(jù)庫(kù)類型
    ??Oracle數(shù)據(jù)庫(kù)是一個(gè)對(duì)象關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS),MySQL是一個(gè)開(kāi)源的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。

??對(duì)象關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng):基于對(duì)象模型,存儲(chǔ)數(shù)據(jù)及其方法,數(shù)據(jù)存儲(chǔ)在對(duì)象中。擁有對(duì)象類、對(duì)象標(biāo)識(shí)、多態(tài)、封裝和繼承等特性。用于存儲(chǔ)復(fù)雜的數(shù)據(jù)。
??關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng):基于關(guān)系模型, 只存儲(chǔ)數(shù)據(jù),數(shù)據(jù)存儲(chǔ)在實(shí)體里面,以包含特定信息的表格的形式存在。用于處理比較簡(jiǎn)單的數(shù)據(jù)。

  • 客戶規(guī)模
    ??Oracle主要面向大企業(yè)級(jí)別的用戶,而MySQL則更適合中小型企業(yè)和個(gè)人。
  • 成本
    ??Oracle付費(fèi),MySQL免費(fèi)。
  • 可移植性和兼容性
    ??MySQL可以很容易地在各種平臺(tái)上運(yùn)行,并與其他許多開(kāi)源軟件集成。Oracle雖然也有跨平臺(tái)支持,但更偏向于使用自己的技術(shù)堆棧和產(chǎn)品集成。
  • 安全性
    ??Oracle使用了許多安全功能,如用戶名,密碼,配置文件,本地身份驗(yàn)證,外部身份驗(yàn)證,高級(jí)安全增強(qiáng)功能等。MySQL只使用三個(gè)參數(shù)來(lái)驗(yàn)證用戶,即用戶名,密碼和位置。
  • 內(nèi)存
    ??Oracle占有內(nèi)存空間大(因?yàn)槊鎸?duì)對(duì)象,并且還存儲(chǔ)數(shù)據(jù)的方法);MySQL占有內(nèi)存空間比較小。
  • 性能和擴(kuò)展性
    ??由于MySQL的精簡(jiǎn)設(shè)計(jì)和管理方式,所以其性能通常比Oracle更高,尤其在讀取和寫入方面。MySQL的擴(kuò)展性也相對(duì)較好,因?yàn)槠渖鐓^(qū)活躍,有許多插件和工具可供選擇和使用。
  • 支持并發(fā)量
    ??Oracle使用行級(jí)別的鎖,不依賴索引來(lái)鎖定某一行,鎖資源的粒度小,所以并發(fā)性高,支持大并發(fā)訪問(wèn)量;
    ??MySQL只有InnoDb支持行鎖,而且必須依賴索引才能用到行鎖,否則會(huì)使用表鎖,所以并發(fā)性較低,面對(duì)大訪問(wèn)量可以做分表分庫(kù)優(yōu)化。
  • 數(shù)據(jù)量
    ??Oracle單表數(shù)據(jù)量,可以千萬(wàn),甚至上億的規(guī)模Mysql單表數(shù)據(jù)量,最好控制在百萬(wàn)級(jí)別。
  • 事務(wù)隔離級(jí)別
    ??Oracle默認(rèn)的是 read commited(讀已提交)的隔離級(jí)別,會(huì)有不可重復(fù)讀+幻讀的問(wèn)題。
    ??MySQL默認(rèn)是 repeatable read(可重復(fù)度)的隔離級(jí)別,只會(huì)有幻讀的問(wèn)題。
  • 臨時(shí)表
    ??在MySQL中,臨時(shí)表是僅對(duì)當(dāng)前用戶會(huì)話可見(jiàn)的數(shù)據(jù)庫(kù)對(duì)象,并且一旦會(huì)話結(jié)束,這些表將自動(dòng)刪除。
    ??Oracle中臨時(shí)表的定義與MySQL略有不同,因?yàn)榕R時(shí)表一旦創(chuàng)建就會(huì)存在,直到它們被顯式刪除,并且對(duì)具有適當(dāng)權(quán)限的所有會(huì)話都可見(jiàn)。但是,臨時(shí)表中的數(shù)據(jù)僅對(duì)將數(shù)據(jù)插入表中的用戶會(huì)話可見(jiàn),并且數(shù)據(jù)可能在事務(wù)或用戶會(huì)話期間持續(xù)存在。
  • sql語(yǔ)句的靈活性
    ??MySQL對(duì)sql語(yǔ)句有很多非常實(shí)用而方便的擴(kuò)展,比如limit功能(分頁(yè))、insert可以一次插入多行數(shù)據(jù);Oracle在這方面感覺(jué)更加穩(wěn)重傳統(tǒng)一些,Oracle的分頁(yè)是通過(guò)偽列和子查詢完成的,插入數(shù)據(jù)只能一行行的插入數(shù)據(jù)。
  • 對(duì)于事務(wù)的支持
    ??Mysql對(duì)于事務(wù)默認(rèn)是不支持的,只是有某些存儲(chǔ)引擎中如:innodb可以支持;而Oracle對(duì)于事物是完全支持的。

??適合Oracle的場(chǎng)景:

??對(duì)數(shù)據(jù)庫(kù)有高級(jí)需求:如果企業(yè)對(duì)數(shù)據(jù)庫(kù)的高級(jí)需求較高,如存儲(chǔ)復(fù)雜數(shù)據(jù)及其方法,要求高可用性、災(zāi)備恢復(fù)、安全性等,可以考慮用Oracle。
??大型企業(yè)應(yīng)用:Oracle在處理大規(guī)模、復(fù)雜的企業(yè)級(jí)應(yīng)用方面表現(xiàn)出色。它能夠處理海量的數(shù)據(jù)和高并發(fā)的訪問(wèn)請(qǐng)求,同時(shí)支持復(fù)雜的數(shù)據(jù)模型和關(guān)系。
??項(xiàng)目并發(fā)量高:使用Oracle,它是是OLTP(聯(lián)機(jī)事務(wù)處理)最好的工具。
??安全性要求高:Oracle使用了許多安全功能,如用戶名,密碼,配置文件,本地身份驗(yàn)證,外部身份驗(yàn)證,高級(jí)安全增強(qiáng)功能等。像金融、銀行等對(duì)安全性要求高的項(xiàng)目一般都選用Oracle作為數(shù)據(jù)庫(kù)。
??高可用性和容災(zāi)需求:Oracle提供了強(qiáng)大的高可用性和容災(zāi)解決方案,例如集群配置、數(shù)據(jù)復(fù)制和自動(dòng)故障轉(zhuǎn)移等,能夠確保系統(tǒng)的連續(xù)性和數(shù)據(jù)的可靠性。MySQL付費(fèi)版也支持,但可靠性不如Oracle。

1.2 使用區(qū)別

  • 1、大小寫是否敏感
    ??Oracle:雙引號(hào)下大小寫敏感,大小寫不敏感的前提條件是在沒(méi)有使用雙引號(hào) “” 的前提下(表名、字段名)。
    ??Oracle創(chuàng)建表默認(rèn)大寫,可以設(shè)置為小寫。
// 如果創(chuàng)建表的時(shí)候是這樣寫的,那么就必須嚴(yán)格區(qū)分大小寫
CREATE TABLE "TableName"("id" number); 
// 不僅要區(qū)分大小寫而且要加雙引號(hào),以便和上面的第三種查詢方式區(qū)分開(kāi)
SELECT * FROM "TableName"; 

?? MySQL創(chuàng)建的表名默認(rèn)小寫。

  • 2、常用字段類型
    ??Oracle常用字段類型:

??數(shù)值:number。
??字符串:CHAR,NCHAR,VARCHAR2和NVARCHAR2。
???char:使用數(shù)據(jù)庫(kù)字符集來(lái)存儲(chǔ)數(shù)據(jù),長(zhǎng)度固定,如果存儲(chǔ)的數(shù)據(jù)沒(méi)有達(dá)到指定長(zhǎng)度,自動(dòng)補(bǔ)足空格。
???nchar:使用國(guó)家字符集來(lái)存儲(chǔ)數(shù)據(jù),長(zhǎng)度固定,如果存儲(chǔ)的數(shù)據(jù)沒(méi)有達(dá)到指定長(zhǎng)度,數(shù)據(jù)庫(kù)自動(dòng)補(bǔ)足空格。
???varchar2: 使用數(shù)據(jù)庫(kù)字符集存儲(chǔ)數(shù)據(jù),長(zhǎng)度可變,如果存儲(chǔ)數(shù)據(jù)沒(méi)有達(dá)到指定長(zhǎng)度,不自動(dòng)補(bǔ)足空格。
???nvarchar2:使用國(guó)家字符集來(lái)存儲(chǔ)數(shù)據(jù),長(zhǎng)度可變,如果存儲(chǔ)的數(shù)據(jù)沒(méi)有達(dá)到指定長(zhǎng)度,不自動(dòng)補(bǔ)足空格。
??日期:date、timestamp。

??oracle的varchar,一般不使用,那個(gè)是sql標(biāo)準(zhǔn)的類型,允許空串,oracle自己開(kāi)發(fā)了個(gè)類型叫varchar2,不允許存空串,而且可以兼容以后的oracle版本。
??MySQL常用字段類型:

??數(shù)值:tinyint、smallint、mediumint、int、bigint、decimal。
??字符串:char、varchar。
??日期:date、time、datetime、timestamp。

  • 3、時(shí)間日期
    ??Oracle對(duì)于計(jì)算前7天,時(shí)間減7就行了;計(jì)算前1個(gè)小時(shí),時(shí)間減1/24就行了,加法同理:
select TO_DATE('2021-05-30 15:51:20', 'yyyy-mm-dd hh24:mi:ss') -7 from dual;
-- 計(jì)算前7天,結(jié)果:2021-05-23 15:51:20

select TO_DATE('2021-05-30 15:51:20', 'yyyy-mm-dd hh24:mi:ss') - 1/24 from dual;
-- 計(jì)算前1個(gè)小時(shí),結(jié)果:2021-05-30 14:51:20

??MySQL計(jì)算前7天,或者前1個(gè)小時(shí),需要用不同的關(guān)鍵字:

select date_sub('2021-05-30 21:00:40' ,interval 7 day)
-- 計(jì)算前7天,結(jié)果:2021-05-23 21:00:40

select date_sub('2021-05-30 21:00:40' ,interval 1 hour)
-- 計(jì)算前1個(gè)小時(shí),結(jié)果:2021-05-30 20:00:40

??Oracle中timestamp類型的字段,相減,結(jié)果是多少天、多少小時(shí),多少分鐘,多少秒:

SELECT MIN_T, MAX_T, MAX_T - MIN_T 
FROM "T_TIMESTAMP"
-- 結(jié)果:2021-07-06 20:29:20.000000	2021-07-07 20:29:22.000000	+000000001 00:00:02.000000

??MySQL中,2個(gè)timestamp類型的值相減,如果想要知道相差多少天、多少秒,需要借助函數(shù):

SELECT min_t, max_t, TIMESTAMPDIFF(second,min_t,max_t) FROM `t_timestamp`
-- 結(jié)果:
2021-07-03 21:01:22	2021-07-04 21:01:22	86400
2021-07-04 21:02:01	2021-07-04 21:02:06	5
2021-07-04 21:03:58	2021-07-04 21:04:01	3

??Oracle使用to_date()函數(shù),將字符串轉(zhuǎn)時(shí)間:

select TO_DATE('2021-05-30 15:51:20', 'yyyy-mm-dd hh24:mi:ss') from dual;
-- 24小時(shí)制的轉(zhuǎn)換,結(jié)果:2021-05-30 15:51:20

select TO_DATE('2021-05-30 下午 11:51:20', 'yyyy-mm-dd am hh12:mi:ss') from dual;
-- 12小時(shí)制的轉(zhuǎn)換,結(jié)果:2021-05-30 23:51:20

??MySQL的字符串轉(zhuǎn)時(shí)間,使用str_to_date()函數(shù):

select STR_TO_DATE('2021-05-30 15:51:20','%Y-%m-%d %H:%i:%s');
-- 結(jié)果:2021-05-30 15:51:20
-- tip: myql的這個(gè)格式,也不難記,Y、m、d、H、i、s

??Oracle使用to_char()函數(shù),將時(shí)間轉(zhuǎn)字符串:

select to_char(current_date, 'yyyy-mm-dd hh24:mi:ss') from dual;
-- 24小時(shí)制的轉(zhuǎn)換,結(jié)果:2021-05-30 16:06:52

select to_char( TO_DATE('2021-05-30 15:51:20', 'yyyy-mm-dd hh24:mi:ss'), 'yyyy-mm-dd am hh12:mi:ss') from dual;
-- 12小時(shí)制的轉(zhuǎn)換,結(jié)果:2021-05-30 下午 03:51:20

??MySQL使用date_format()函數(shù):

select DATE_FORMAT(current_timestamp,'%Y-%m-%d %H:%i:%s');
-- 結(jié)果:2021-05-30 16:10:14

??Oracle查詢當(dāng)前的日期+時(shí)間示例:

select CURRENT_TIMESTAMP from dual;
-- 結(jié)果:2021-05-30 16:19:10.640466 +08:00

select current_date from dual;
-- 結(jié)果:2021-05-30 16:16:54

select SYSDATE from dual;
-- 結(jié)果:2021-06-07 20:54:57

??MySQL查詢當(dāng)前的日期+時(shí)間示例:

select CURRENT_TIMESTAMP;
-- 結(jié)果:2021-05-30 16:21:16

select now();
-- 結(jié)果:2021-05-30 16:17:41
-- 我一般用這個(gè),比較簡(jiǎn)單,好記憶

select sysdate()
-- 結(jié)果:2021-06-07 20:55:38
  • 4、建表和插入數(shù)據(jù)
-- Oracle
create table t_student(
    sid int primary key ,
    sname varchar2(10) not null ,
    enterdate date,
    gender char(2),
    mail unique,
    age number check (age>19 and age<30)
)
insert into t_student values(stuseq.nextval,'Test',to_date('1990-3-4','YYYY-MM-DD'),'男','1@outlook.com',20);
commit;

--MySQL
create table t_student(
    sid int primary key auto_increment,
    sname varchar(1) not null ,
    enterdate date,
    gender char(1),
    age int,
    mail varchar(10) UNIQUE
)
insert into t_student values(null,'Test','1990-3-4','男',30,'2@outlook.com')
  • 5、事務(wù)
    ??Oracle:完全支持事務(wù),默認(rèn)不自動(dòng)提交,需要用戶手動(dòng)提交,提交可以通過(guò)以下幾個(gè)命令實(shí)現(xiàn):

??BEGIN:事務(wù)塊開(kāi)始的標(biāo)志。事務(wù)塊里的SQL語(yǔ)句要么全部執(zhí)行成功,要么全部失敗回滾。
??COMMIT:提交事務(wù)。執(zhí)行成功時(shí),事務(wù)將被提交,并且對(duì)數(shù)據(jù)庫(kù)的修改是可見(jiàn)的。
??ROLLBACK:用于取消尚未提交的事務(wù),并將數(shù)據(jù)庫(kù)恢復(fù)到事務(wù)開(kāi)始之前的狀態(tài)。當(dāng)ROLLBACK語(yǔ)句執(zhí)行成功時(shí),事務(wù)中的所有修改都將被撤銷。
??SAVEPOINT:用于在事務(wù)中創(chuàng)建一個(gè)保存點(diǎn),以便在事務(wù)執(zhí)行過(guò)程中可以回滾到該保存點(diǎn)。它可以在事務(wù)中設(shè)置一個(gè)中間點(diǎn),以便在需要時(shí)回滾到該點(diǎn)。
??SET TRANSACTION:SET TRANSACTION用于設(shè)置事務(wù)的屬性。通過(guò)該命令,可以設(shè)置事務(wù)的隔離級(jí)別、讀寫權(quán)限等屬性。

??示例:

BEGIN
    SAVEPOINT sp;
    
    -- 向?qū)W生表插入數(shù)據(jù)
    INSERT INTO student_table (student_name, student_age) VALUES ('John', 18);
    INSERT INTO student_table (student_name, student_age) VALUES ('Emma', 19);
    
    -- 向班級(jí)表插入數(shù)據(jù)
    INSERT INTO class_table (class_name, class_size) VALUES ('Class A', 30);
    INSERT INTO class_table (class_name, class_size) VALUES ('Class B', 28);
    
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK TO sp;
        RAISE;
END;

??MySQL:僅innoDB支持事務(wù),默認(rèn)自動(dòng)提交。

-- 關(guān)閉事務(wù)提交
set AutoCommit = 0;
-- 手動(dòng)提交事務(wù)
START TRANSACTION;        -- 開(kāi)始事務(wù)
INSERT INTO student (name,age) VALUES ('Tom',18); -- 執(zhí)行一些數(shù)據(jù)操作
INSERT INTO score (student_id,score) VALUES (1,90);
COMMIT;       -- 手動(dòng)提交事務(wù)
  • 6、分頁(yè)
    ??Oracle:需要用rownum和子查詢來(lái)做。示例:
-- 查第10-20條記錄。10、20個(gè)數(shù)字表示記錄的行號(hào)
select * from (
	SELECT emp.*, rownum as rowno from emp
)t_target
where rowno >= 10 and rowno < 20

??MySQL:通過(guò)limit關(guān)鍵字分頁(yè)。示例:

-- 查第10-20條記錄。第一個(gè)10表示起始下標(biāo),第二個(gè)10表示取多少條記錄
SELECT * FROM `tb_user`
limit 10, 10
  • 7、id遞增的處理
    ??Oracle需要通過(guò)手動(dòng)新建1個(gè)序列+觸發(fā)器來(lái)實(shí)現(xiàn):
-- 第一步:創(chuàng)建序列(ps: 也可以通過(guò)navicat創(chuàng)建)
create sequence SEQ_T_LOCALOBTMIND
-- 驗(yàn)證序列是否能成功取到值
select SEQ_T_LOCALOBTMIND.nextval from dual

-- 第二步:設(shè)置觸發(fā)器(ps: 請(qǐng)確保表名、字段都是大寫的,否則觸發(fā)器執(zhí)行會(huì)失?。?/span>
create or replace trigger T_LOCALOBTMIND_INSERT_ID
before insert on "T_LOCALOBTMIND" for each row
begin
	select SEQ_T_LOCALOBTMIND.nextval into:NEW.ID from dual;
end;

-- 第三步:測(cè)試
INSERT INTO "T_LOCALOBTMIND"("DDATETIME", "OBTID", "WDIDF") VALUES (TO_DATE('2021-06-03 08:22:04', 'SYYYY-MM-DD HH24:MI:SS'), 'G1121', '11.34');

??MySQL則自帶自動(dòng)自增的功能。

  • 7、字符處理
    ??Oracle的字符串只能用單引號(hào)包裹。
select concat('%', 'G1120') from dual
-- 結(jié)果:%G1120

??MySQL的字符串可以用單引號(hào),也可以用雙引號(hào)包裹。

select concat("%", 'G1120')
-- 結(jié)果:%G1120

??oracle中不允許有空字符串的存在,如果update某個(gè)字段為’',則會(huì)發(fā)現(xiàn)這個(gè)字段值變成null了。mysql中允許空字符串。

  • 8、多條件判斷
    ??Oracle慣用decode()函數(shù),另外支持case when的用法:
-- decode()函數(shù)
select DECODE(2, 
1, '風(fēng)速',
2, '雨量',
3, '浪高',
null)
from dual;
-- 結(jié)果:
-- 雨量

-- case when的寫法1:公式匹配

select sal, CASE 
	when sal >= 5000 then '高薪'
	when sal >= 2000 then '中薪'
	WHEN sal > 800 THEN '低薪'
	ELSE '其它'
END as cn
from emp;
-- 結(jié)果:800	其它
-- 1600	低薪
-- 1250	低薪
-- 2975	中薪

-- case when的寫法2:值匹配
select sal, CASE sal
	when 5000 then '高薪'
	when 1600 then '中薪'
	WHEN 800 THEN '低薪'
	ELSE '其它'
END as cn
from emp;
-- 結(jié)果:
-- 800	低薪
-- 1600	中薪
-- 1250	其它
-- 2975	其它

??MySQL,一般也用case when。

  • 9、小數(shù)格式化
    ??Oracle使用to_char()函數(shù):
select to_char(211.125456,'99999999999990.99') from dual;
-- 需要四舍五入的情況,結(jié)果:211.13
select to_char(211.1,'99999999999990.99') from dual;
-- 小數(shù)位不夠2位的情況,結(jié)果:211.10
select to_char(0,'99999999999990.99') from dual;
-- 特殊值0的情況,結(jié)果:0.00

??MySQL使用format()函數(shù):

select FORMAT(211.125,2);
-- 需要四舍五入的情況,結(jié)果:211.13
select FORMAT(211.1,2);
-- 小數(shù)位不夠2位的情況,結(jié)果:211.10
select FORMAT(0,2);
-- 特殊值0的情況,結(jié)果:0.00
  • 10、查詢語(yǔ)句
    ??Oracle的查詢必須帶from:
select current_date from dual;
-- 結(jié)果:2021-05-30 16:16:54

??MySQL的查詢,就沒(méi)強(qiáng)制要求帶from關(guān)鍵字,但是查詢dual表也支持:

select now();
-- 結(jié)果:2021-05-30 16:17:41

二、MySQL和PostgreSQL

??PostgreSQL是一個(gè)企業(yè)級(jí)的關(guān)系數(shù)據(jù)庫(kù),允許關(guān)系和非關(guān)系查詢,支持:Java、.net、Go、C、C++等。PostgreSQL通常用作網(wǎng)站、地理空間和分析應(yīng)用程序的主要數(shù)據(jù)存儲(chǔ)或倉(cāng)庫(kù)。

2.1 基本差別*

  • PostgreSQL的優(yōu)勢(shì)
    ??1、功能強(qiáng)大。PostgreSQL對(duì)正則表達(dá)式的支持強(qiáng),內(nèi)置函數(shù)也豐富
    ??2、性能優(yōu)化工具與度量信息豐富。PostgreSQL數(shù)據(jù)庫(kù)中有大量的性能視圖,可以方便地定位問(wèn)題。此外,PostgreSQL還設(shè)計(jì)了專門架構(gòu)和進(jìn)程用于收集性能數(shù)據(jù)視圖,比如可以看打卡正在執(zhí)行的SQL、哪條記錄被鎖定等。
    ??3、在線操作功能好。PostgreSQL增加空值列時(shí),本質(zhì)上只是在系統(tǒng)表上把列定義上,無(wú)須對(duì)物理結(jié)構(gòu)做更新。PostgreSQL還支持在線建索引的功能,在創(chuàng)建索引的過(guò)程中,可以不鎖更新操作。
    ??4、支持?jǐn)?shù)據(jù)倉(cāng)庫(kù)。MySQL對(duì)SQL語(yǔ)法支持的功能較弱,基本上不適合做數(shù)據(jù)倉(cāng)庫(kù)。PostgreSQL不僅支持復(fù)雜的SQL,還有大量的分析函數(shù),非常適合做數(shù)據(jù)倉(cāng)庫(kù)。
    ??5、移動(dòng)互聯(lián)網(wǎng)特征。PostgreSQL中還有一些支持移動(dòng)互聯(lián)網(wǎng)的新功能,比如:空間索引。
    ??綜上,PostgreSQL是一個(gè)功能強(qiáng)大、又帶有移動(dòng)互聯(lián)網(wǎng)的開(kāi)源數(shù)據(jù)庫(kù)。
  • MySQL的優(yōu)勢(shì)
    ??1、MySQL的事務(wù)回滾機(jī)制較好。InnoDB的基于回滾實(shí)現(xiàn)的MVCC機(jī)制,相對(duì)于PG新老數(shù)據(jù)一起存放的基于XID的MVCC機(jī)制,是占優(yōu)的。
    ??2、MySQL采用索引組織表。這種存儲(chǔ)方式非常適用于主鍵匹配的查詢、刪改操作,但是對(duì)表結(jié)構(gòu)設(shè)計(jì)存在約束。
    ??3、MySQL的優(yōu)化器比較簡(jiǎn)單。系統(tǒng)表、運(yùn)算符、數(shù)據(jù)類型的實(shí)現(xiàn)都很精簡(jiǎn),非常適合簡(jiǎn)單的查詢操作。
    ??4、MySQL分區(qū)表的實(shí)現(xiàn)要優(yōu)于PG。
    ??5、MySQL的存儲(chǔ)引擎插件化機(jī)制。使得它的應(yīng)用場(chǎng)景更加廣泛,比如除了InnoDB適合事務(wù)處理場(chǎng)景外,MyIsam適合靜態(tài)數(shù)據(jù)的查詢場(chǎng)景。
  • 兩者的選擇
    ??如果僅僅是想把數(shù)據(jù)庫(kù)作為一個(gè)簡(jiǎn)單的存儲(chǔ)軟件,比如一些大型互聯(lián)網(wǎng)公司就是這樣,一些比較復(fù)雜的功能都放在應(yīng)用中,那么MySQL是合適的。
    ??如果應(yīng)用的數(shù)據(jù)訪問(wèn)很簡(jiǎn)單,比如大多數(shù)的博客系統(tǒng),那么后端使用MySQL也是合適的。
    ??如果應(yīng)用不像博客系統(tǒng)那么簡(jiǎn)單,又不像耗費(fèi)太多的開(kāi)發(fā)資源,那么使用PostgreSQL是合適的。

2.2 使用差別

  • 1、格式區(qū)別
    ??和Oracle一樣,PostgreSQL也是嚴(yán)格區(qū)分大小寫。
  • 2、自增區(qū)別
    ??MySQL中使用auto_increment ,在需要的列指定自增;而PostgreSQL中需要設(shè)置自增序列。
    ??PostgreSQL的自增序列設(shè)置:
-- 創(chuàng)建表時(shí)
CREATE table infisa_template_config(id serial );
-- 表已存在
<--設(shè)置序列從1開(kāi)始,自增1-->
CREATE SEQUENCE user_id_seq START WITH 1  
INCREMENT BY 1  NO MINVALUE  NO MAXVALUE  CACHE 1;
<--設(shè)置序列-->
ALTER table user ALTER column id SET DEFAULT nextval('user_id_seq');
  • 3、時(shí)間轉(zhuǎn)化
    ??時(shí)間轉(zhuǎn)字符串:
-- MySQL
date_format(a.tag_create_date,'%Y-%m-%d %H:%i:%s')
-- PostgreSQL
to_char(a.tag_create_date,'yyyy-mm-dd HH:MM:SS')

??字符串轉(zhuǎn)時(shí)間:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-824074.html

-- MySQL
STR_TO_DATE('2021-05-30 15:51:20','%Y-%m-%d %H:%i:%s')
-- PostgreSQL
to_date(a.tag_create_date,'yyyy-mm-dd HH:MM:SS')
  • 4、字段為null時(shí)返回指定值
-- MySQL
IFNULL(a.idm,'')
-- PostgreSQL
COALESCE(a.id,'')
  • 5、獲取當(dāng)前日期
-- MySQL
SELECT sysdate()
-- PostgreSQL
SELECT now()
  • 6、limit
-- MySQL
select id,name from hospital.ods_user_basic limit 10,2;
-- PostgreSQL
select id,name from hospital.ods_user_basic limit 10 offset 2;

到了這里,關(guān)于MySQL(七)MySQL和Oracle、PostgreSQL的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【PostGreSQL】PostGreSQL到Oracle的數(shù)據(jù)遷移

    【PostGreSQL】PostGreSQL到Oracle的數(shù)據(jù)遷移

    項(xiàng)目需要,有個(gè)數(shù)據(jù)需要導(dǎo)入,拿到手一開(kāi)始以為是mysql,結(jié)果是個(gè)PostGreSQL的數(shù)據(jù),于是裝數(shù)據(jù)庫(kù),但這個(gè)也不懂呀,而且本系統(tǒng)用的Oracle,于是得解決遷移轉(zhuǎn)換的問(wèn)題。 總結(jié)下來(lái)兩個(gè)思路。 多金的用第一種。 這個(gè)軟件很好,但是不便宜,129美元,試用期30天,試用狀態(tài)每

    2024年02月11日
    瀏覽(31)
  • Postgresql和mysql的區(qū)別探究

    PostgreSQL和MySQL是兩個(gè)流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),具有各自的特點(diǎn)和優(yōu)點(diǎn)。雖然兩種數(shù)據(jù)庫(kù)都可以處理大量數(shù)據(jù),但在不同情況下,會(huì)有一些區(qū)別。下面將著重介紹PostgreSQL和MySQL的區(qū)別,并附帶案例說(shuō)明。 ????????1.架構(gòu)設(shè)計(jì) 在架構(gòu)設(shè)計(jì)方面,PostgreSQL和MySQL有所

    2024年02月09日
    瀏覽(17)
  • 盤點(diǎn)一下PostgreSQL和MySQL的區(qū)別點(diǎn)

    盤點(diǎn)一下PostgreSQL和MySQL的區(qū)別點(diǎn)

    上期有說(shuō),數(shù)據(jù)環(huán)境切換,由MySQL換成PostgreSQL。 那么為了大家以后少踩坑,簡(jiǎn)單總結(jié)了下我曾踩過(guò)的坑和需要注意的點(diǎn)。 首先PostgreSQL有一個(gè)模式的概念。 一、格式區(qū)別: 和Oracle一樣,PostgreSQL也是嚴(yán)格區(qū)分大小寫。 二、符號(hào)區(qū)別: 和Oracle一樣PostgreSQL中,\\\" \\\" 雙引號(hào)是區(qū)分庫(kù)

    2024年02月05日
    瀏覽(18)
  • 【Oracle】oracle、mysql、sql server三者區(qū)別

    【Oracle】oracle、mysql、sql server三者區(qū)別

    歡迎來(lái)到《小5講堂》,大家好,我是全棧小5。 這是《Oracle》系列文章,每篇文章將以博主理解的角度展開(kāi)講解, 特別是針對(duì)知識(shí)點(diǎn)的概念進(jìn)行敘說(shuō),大部分文章將會(huì)對(duì)這些概念進(jìn)行實(shí)際例子驗(yàn)證,以此達(dá)到加深對(duì)知識(shí)點(diǎn)的理解和掌握。 溫馨提示:博主能力有限,理解水平

    2024年04月09日
    瀏覽(20)
  • Mysql Oracle 區(qū)別

    mysql語(yǔ)法: oracle語(yǔ)法: 同樣,刪除時(shí)mysql需要指定表名,oracle則不需要 CLOB(Character Large Object)是一種用于存儲(chǔ)大量字符數(shù)據(jù)的數(shù)據(jù)類型。它可以容納高達(dá)2^32-1個(gè)字節(jié)的文本數(shù)據(jù),適合存儲(chǔ)大文本如文章、文檔、XML等。 在MySQL的具體實(shí)現(xiàn)中,由于歷史原因,沒(méi)有直接對(duì)應(yīng)的

    2024年02月11日
    瀏覽(31)
  • ORACLE和MYSQL區(qū)別

    ORACLE和MYSQL區(qū)別

    1,Oracle沒(méi)有offet,limit,在mysql中我們用它們來(lái)控制顯示的行數(shù),最多的是分頁(yè)了。oracle要分頁(yè)的話,要換成rownum。 ? ? 2,oracle建表時(shí),沒(méi)有auto_increment,所有要想讓表的一個(gè)字段自增,要自己添加序列,插入時(shí),把序列的值,插入進(jìn)去。 ? 3,oracle有一個(gè)dual表,當(dāng)select后沒(méi)有

    2024年02月13日
    瀏覽(19)
  • MySQL和Oracle區(qū)別

    MySQL和Oracle區(qū)別

    由于SQL Server不常用,所以這里只針對(duì)MySQL數(shù)據(jù)庫(kù)和Oracle數(shù)據(jù)庫(kù)的區(qū)別 ? ? (1) 對(duì)事務(wù)的提交 ? ? MySQL默認(rèn)是自動(dòng)提交,而Oracle默認(rèn)不自動(dòng)提交,需要用戶手動(dòng)提交,需要在寫commit;指令或者點(diǎn)擊commit按鈕 (2) 分頁(yè)查詢 ? ? MySQL是直接在SQL語(yǔ)句中寫\\\"select... from ...where...limit x, y\\\",有

    2024年02月14日
    瀏覽(19)
  • Mysql 和Oracle的區(qū)別

    Mysql 和Oracle的區(qū)別

    、mysql與oracle都是關(guān)系型數(shù)據(jù)庫(kù),Oracle是大型數(shù)據(jù)庫(kù),而MySQL是中小型數(shù)據(jù)庫(kù)。但是MySQL是開(kāi)源的,但是Oracle是收費(fèi)的,而且比較貴。 ? ? 1 2 mysql默認(rèn)端口:3306,默認(rèn)用戶:root oracle默認(rèn)端口:1521,默認(rèn)用戶:system 2、Oracle的內(nèi)存占有量非常大,而mysql非常小,mysql安裝后差不

    2024年02月12日
    瀏覽(25)
  • 使用goldengate 遷移Oracle到postgresql

    使用goldengate 遷移Oracle到postgresql

    ?環(huán)境: --源端: IP:10.0.4.16 hostname:tencent Oracle數(shù)據(jù)庫(kù)版本:12.2.0.1.0 ogg for oracle版本:19.1.0.0.4 SID:orcl --目標(biāo)端: IP:10.0.4.16 hostname:tencent postgresql數(shù)據(jù)庫(kù)版本:14.6 ogg for postgresql版本:21.3.0.0.0 db:ogg 2、安裝和配置OGG軟件(源端),以下操作都是在源端操作 2.1創(chuàng)建安裝目錄

    2024年02月15日
    瀏覽(15)
  • oracle與mysql的存儲(chǔ)區(qū)別

    oracle 復(fù)制 mysql 復(fù)制 1.在創(chuàng)建存儲(chǔ)過(guò)程時(shí)如果存在同名的存儲(chǔ)過(guò)程,會(huì)刪除老的存儲(chǔ)過(guò)程. oracle使用create or replace. mysql使用先刪除老的存儲(chǔ)過(guò)程,然后再創(chuàng)建新的存儲(chǔ)過(guò)程. 2. oracle 存儲(chǔ)過(guò)程可以定義在package中,也可以定義在Procedures中. 如果定義在包中,一個(gè)包中可以包含多個(gè)存儲(chǔ)過(guò)

    2024年02月07日
    瀏覽(15)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包