1. 程式人生 > >當前最流行的三大資料庫之間對比zt

當前最流行的三大資料庫之間對比zt

當前最流行的三大資料庫之間對比:
mysql        sql-server          oracle

mysql
使用者變數:set @varialname={ integer expression | real expression | string expression }
sql-server
使用者變數:declare @varialname integer
set @varialname=必須是數字型;
declare @varialname varchar(40)
set @varialname=必須是在所指定長度40個字元的字元型,如果長度超過40,則只
讀出前40個字元。
也可用select 語句來給使用者變數賦值。即:select @varialname=aa
oracle
使用者變數在不同的區域有不同的標準。
例如:在dba的函式內支援標準的java使用者變數,
而在dba的序列內:create sequence fstrname @pctfree 20   @pctused 10

mysql
支援的欄位型別:數字型別、日期和時間型別及字串(字元)型別

數字型別tinyint[(m)] [unsigned] [zerofill]
一個非常小的整數。有符號的範圍是-128到127,無符號的範圍是0到255。
smallint[(m)] [unsigned] [zerofill]
一個小整數。有符號的範圍是-32768到32767,無符號的範圍是0到65535。
mediumint[(m)] [unsigned] [zerofill]
一箇中等大小整數。有符號的範圍是-8388608到8388607,無符號的範圍是0到16777215。
int[(m)] [unsigned] [zerofill]
一個正常大小整數。有符號的範圍是-2147483648到2147483647,無符號的範圍是0到4294967295。
integer[(m)] [unsigned] [zerofill]
這是int的一個同義詞。
bigint[(m)] [unsigned] [zerofill]
一個大整數。有符號的範圍是-9223372036854775808到9223372036854775807,無符號的範圍是0到18446744073709551615。注意,所有算術運算用有符號的bigint或double值完成,因此你不應該使用大於9223372036854775807(63位)的有符號大整數,除了位函式!注意,當兩個引數是integer值時,-、+和*將使用bigint運算!這意味著如果你乘2個大整數(或來自於返回整數的函式),如果結果大於9223372036854775807,你能得到意外的結果。一個浮點數字,不能是無符號的,對一個單精度浮點數,其精度能是<=24,對一個雙精度浮點數,是在25 和53之間,這些型別如float和double型別馬上在下面描述。float(x)有對應的float和double相同的範圍,不過顯示尺寸和小數位數是未定義的。在mysql3.23中,這是個真正的浮點值。在更早的mysql版本中,float(precision)總是有2位小數。該句法為了odbc相容性而提供。
float[(m,d)] [zerofill]
一個小(單精密)浮點數字。不能無符號。允許的值是-3.402823466e+38到-1.175494351e-38,0 和1.175494351e-38到3.402823466e+38。m是顯示寬度而d是小數的位數。沒有引數的float或有<24 的一個引數表示一個單精密浮點數字。
double[(m,d)] [zerofill]
一個正常大小(雙精密)浮點數字。不能無符號。允許的值是-1.7976931348623157e+308到-2.2250738585072014e-308、 0和2.2250738585072014e-308到1.7976931348623157e+308。m是顯示寬度而d是小數位數。沒有一個引數的double或float(x)(25 < = x < = 53)代表一個雙精密浮點數字。
double precision[(m,d)] [zerofill]
 
real[(m,d)] [zerofill]
這些是double同義詞。
decimal[(m[,d])] [zerofill]
一個未壓縮(unpack)的浮點數字。不能無符號。行為如同一個char列:“未壓縮”意味著數字作為一個字串被儲存,值的每一位使用一個字元。小數點,並且對於負數,“-”符號不在m中計算。如果d是0,值將沒有小數點或小數部分。decimal值的最大範圍和double相同,不過對一個給定的decimal列,實際的範圍能通過m和d的選擇被限制。如果d被省略,他被設定為0。如果m被省掉,他被設定為10。注意,在mysql3.22裡,m引數包括符號和小數點。
numeric(m,d) [zerofill]
這是decimal的一個同義詞.
 
日期和時間型別
date
一個日期。支援的範圍是1000-01-01到9999-12-31。mysql以yyyy-mm-dd格式來顯示date值,不過允許你使用字串或數字把值賦給date列。
datetime
一個日期和時間組合。支援的範圍是1000-01-01 00:00:00到9999-12-31 23:59:59。mysql以yyyy-mm-dd hh:mm:ss格式來顯示datetime值,不過允許你使用字串或數字把值賦給datetime的列。
timestamp[(m)]
一個時間戳記。範圍是1970-01-01 00:00:00到2037年的某時。mysql以yyyymmddhhmmss、yymmddhhmmss、yyyymmdd或yymmdd格式來顯示timestamp值,取決於是否m是14(或省略)、12、8或6,不過允許你使用字串或數字把值賦給timestamp列。一個timestamp列對於記錄一個insert或update操作的日期和時間是有用的,因為如果你不自己給他賦值,他自動地被設定為最近操作的日期和時間。你以能通過賦給他一個null值設定他為當前的日期和時間。見7.3.6 日期和時間型別。
time
一個時間。範圍是-838:59:59到838:59:59。mysql以hh:mm:ss格式來顯示time值,不過允許你使用字串或數字把值賦給time列。
year[(2|4)]
一個2或4位數字格式的年(預設是4位)。允許的值是1901到2155,和0000(4位年格式),如果你使用2位,1970-2069( 70-69)。mysql以yyyy格式來顯示year值,不過允許你把使用字串或數字值賦給year列。(year型別在mysql3.22中是新型別。)
char(m) [binary]
一個定長字串,當儲存時,總是是用空格填滿右邊到指定的長度。m的範圍是1 ~ 255個字元。當值被檢索時,空格尾部被刪除。char值根據預設字符集以大小寫不區分的方式排序和比較,除非給出binary關鍵詞。national char(短形式nchar)是ansi sql的方式來定義char列應該使用預設字符集。這是mysql的預設。char是character的一個縮寫。

字串(字元)型別。
[national] varchar(m) [binary]
一個變長字串。注意:當值被儲存時,尾部的空格被刪除(這不同於ansi sql規範)。m的範圍是1 ~ 255個字元。 varchar值根據預設字符集以大小寫不區分的方式排序和比較,除非給出binary關鍵詞值。見7.7.1 隱式列指定變化。 varchar是character varying一個縮寫。
tinyblob
 
tinytext
一個blob或text列,最大長度為255(2^8-1)個字元。見7.7.1 隱式列指定變化。
blob
 
text
一個blob或text列,最大長度為65535(2^16-1)個字元。見7.7.1 隱式列指定變化。
mediumblob
 
mediumtext
一個blob或text列,最大長度為16777215(2^24-1)個字元。見7.7.1 隱式列指定變化。
longblob
 
longtext
一個blob或text列,最大長度為4294967295(2^32-1)個字元。見7.7.1 隱式列指定變化
enum(value1,value2,...)
列舉。一個僅有一個值的字串物件,這個值式選自和值列表value1、value2, ...,或null。一個enum最多能有65535不同的值。
set(value1,value2,...)
一個集合。能有零個或多個值的一個字串物件,其中每一個表value1, value2, ...選出。一個set最多能有64個成員。

sql-server
支援的欄位型別:
數字型別:real numeric bit int decimal
時間型別:datetime smalldatetime
字元型別:varchar char nvarchar text
oracle
數字型別:number
時間型別:date
字元型別:varchar2

mysql
表結構的維護語句:
建立表結構
create table table2 (finttable2id int,fstrtable2date date,fstrtable2code varchar(20),fstrtable2name varchar(50));

修改表結構
在sdeptname之後加一字元型欄位,欄位名“finttable1id”
alter table `dept` add `finttable1id` varchar( 11 ) not null after `sdeptname` ;

記錄的維護語句:
插入表記錄語句:
支援格式:
insert into table1 select jpg00000101,j0203,必須從值列
也支援格式:
insert into  table1 (finttable1id,fstrtable1code,fstrtable1name)
values (jpb000000077,g00098,見7.7.1 隱式列)
也支援格式:
insert into table1 select jpg00000123,y0101,清晰收藏 union
all select jgh000000002,jgh0011,可心站點;

查詢表記錄語句:
select * from table1 where fstrfieldname like %0 (模糊查詢)
select * from tbale1  limit 10,30 (顯示從第10行到第30行的查詢)

執行下面的語句
select fstrfieldname+aa from table1
顯示的記錄集如下:
fstrfieldname+aa
     0
     0
     0
而執行下面的語句
select fstrfieldname from table1
fstrfieldname
jph0000000
jgp0000001
jph0000100

修改表記錄語句:
update table1 set fstrfieldname=sgml000000010 where fstrfieldname=jpg00000002
update dept` set finttable1id=sgml002 where sdeptid=a2a


刪除表記錄語句:
delete from table1 where fstrtable1name = 匯出

sql-server
表結構的維護語句:
建立表結構語句
create table table2 (finttable2id int,fstrtable2date date,fstrtable2code varchar(20),fstrtable2name varchar(50));

修改表結構語句
在sdeptname之後加一字元型欄位,欄位名“finttable1id”
alter table `dept` add `finttable1id` varchar( 11 ) not null

記錄的維護語句:
插入表記錄語句:
支援格式:
insert into table1 select jpg00000101,j0203,必須從值列
也支援格式:
insert into  table1 (finttable1id,fstrtable1code,fstrtable1name)
values (jpb000000077,g00098,見7.7.1 隱式列)
也支援格式:
insert into table1 select jpg00000123,y0101,清晰收藏 union
all select jgh000000002,jgh0011,可心站點;

查詢表記錄語句:
select * from table1 where fstrfieldname like %0 (模糊查詢)
select top 10 * from table1  (顯示前10行的查詢)

執行下面的語句
select fstrfieldname+aa from table1
顯示的記錄集如下:
fstrfieldname+aa
jph0000000aa
jph0000001aa
jph0000100aa
而執行下面的語句
select fstrfieldname from table1
fstrfieldname
jph0000000
jgp0000001
jph0000100


修改表記錄語句:
update table1 set fstrfieldname=export out where fstrfieldname =匯出

刪除表記錄語句:
delete table1 where fstrfieldname =匯出

 

oracle
表結構的維護語句:
建立表結構
create table table2 (finttable2id int,fstrtable2date date,fstrtable2code varchar(20),fstrtable2name varchar(50));

修改表結構
在sdeptname之後加一字元型欄位,欄位名“finttable1id”
alter table `dept` add `finttable1id` varchar( 11 ) not null

記錄的維護語句:
插入語句:
支援格式:
insert into table1 select jpg00000101,j0203,必須從值列
也支援格式:
insert into  table1 (finttable1id,fstrtable1code,fstrtable1name)
values (jpb000000077,g00098,見7.7.1 隱式列)
不支援格式:
insert into table1 select jpg00000123,y0101,清晰收藏 union
all select jgh000000002,jgh0011,可心站點;         

查詢語句:
select * from table1 where fstrfieldname like %0 (模糊查詢)
select top 10 * from table1  (顯示前10行的查詢)

執行下面的語句
select fstrfieldname+aa from table1
顯示的記錄集如下:
fstrfieldname+aa
aa
aa
aa
而執行下面的語句
select fstrfieldname from table1
fstrfieldname
jph0000000
jgp0000001
jph0000100

修改表記錄語句:
update table1 set fstrfieldname=export out where fstrfieldname =匯出

刪除表記錄語句:
delete table1 where fstrfieldname =匯出