数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
三大数据库之间对比

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

2004-11-16
当前最流行的三大数据库之间对比:
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 ='导出'

 




相关文章

相关软件