已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL Server 和 MySql 语法和关键字的区别用于SQLServer到MySql的转换对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式。除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?在这二者之间你是如何选择的?让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它们的安全性。 u 根本的区别是它们遵循的基本原则 二者所遵循的基本原则是它们的主要区别:开放vs保守。SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。虽然你可以使用SQL服务器的Sybase引擎,但MySQL能够提供更多种的选择,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库。同时,MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能。 u 发行费用:MySQL不全是免费,但很便宜 当提及发行的费用,这两个产品采用两种绝然不同的决策。对于SQL服务器,获取一个免费的开发费用最常的方式是购买微软的Office或者Visual Studio的费用。但是,如果你想用于商业产品的开发,你必须还要购买SQL Server Standard Edition。学校或非赢利的企业可以不考虑这一附加的费用。 u 性能:先进的MySQL 纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式MyISAM。MyISAM 数据库与磁盘非常地兼容而不占用过多的CPU和内存。MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。因为MySQL在内部里很多时候都使用64位的整数处理。Yahoo!商业网站就使用MySQL 作为后台数据库。 当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。但是,这些特性也要付出代价的。比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。 u 安全功能 MySQL有一个用于改变数据的二进制日志。因为它是二进制,这一日志能够快速地从主机上复制数据到客户机上。即使服务器崩溃,这一二进制日志也会保持完整,而且复制的部分也不会受到损坏。 在SQL服务器中,你也可以记录SQL的有关查询,但这需要付出很高的代价。 安全性 这两个产品都有自己完整的安全机制。只要你遵循这些安全机制,一般程序都不会出现什么问题。这两者都使用缺省的IP端口,但是有时候很不幸,这些IP也会被一些黑客闯入。当然,你也可以自己设置这些IP端口。 u 恢复性:先进的SQL服务器 恢复性也是MySQL的一个特点,这主要表现在MyISAM配置中。这种方式有它固有的缺欠,如果你不慎损坏数据库,结果可能会导致所有的数据丢失。然而,对于SQL服务器而言就表现得很稳键。SQL服务器能够时刻监测数据交换点并能够把数据库损坏的过程保存下来。 根据需要决定你的选择 对于这两种数据库,如果非要让我说出到底哪一种更加出色,也许我会让你失望。以我的观点,任一对你的工作有帮助的数据库都是很好的数据库,没有哪一个数据库是绝对的出色,也没有哪一个数据库是绝对的差劲。我想要告诉你的是你应该多从你自己的需要出发,即你要完成什么样的任务?而不要单纯地从软件的功能出发。 如果你想建立一个.NET服务器体系,这一体系可以从多个不同平台访问数据,参与数据库的管理,那么你可以选用SQL服务器。如果你想建立一个第三方站点,这一站点可以从一些客户端读取数据,那么MySQL将是最好的选择。 这两者数据库都能够在.NET或J2EE下运行正常,同样,都能够利用RAID。 l 优点分析:MYSQL短小精悍,容易上手,操作简单,免费供用的。相对其它数据库有特色又实用的语法多一些。SQL怎么也算是大型数据库,稳定,能做一般大系统的数据仓库,运行速度明显比MYSQL快N多(海量数据下这个优势显而易见)。 l 缺点分析:MYSQL难担当大系统的数据仓库,运行速度慢,不够稳定,有掉线的情况。SQL SERVER价格贵(当然没说5元盗版),使用起来比MYSQL要难一些,毕竟东西大了说道多点。 SQL-Server 2000 是微软公司开发的中型数据库,它的可视化方面做得很好,在安全性等方面功能非常强大,并且有微软的强大技术支持,当然价格比较昂贵,适合应用于中型系统。 MySQL是 MySQLAB开发的小型数据库,基本上具有了数据库所需的所有功能,但是功能没有SQL-Server强大,技术支持也跟不上,但是价格便宜,在满足它的许可协议的情况下可以免费使用,适合于小型系统。 语言都是一样的(SQL)是结构化查询语言.u 语法和关键字区别1. MySQL支持enum,和set类型,SQL Server不支持2. MySQL不支持nchar,nvarchar,ntext类型3. MySQL的递增语句是AUTO_INCREMENT,而MS SQL是identity(1,1)4. MS SQL默认到处表创建语句的默认值表示是(0),而在MySQL里面是不允许带两括号的5. MySQL需要为表指定存储类型6. MS SQL识别符是,type表示他区别于关键字,但是MySQL却是 ,也就是按键1左边的那个符号7. MS SQL支持getdate()方法获取当前时间日期,但是MySQL里面可以分日期类型和时间类型,获取当前日期是current_date (),当前完整时间是 now()函数8. MS SQL不支持replace into 语句,但是在最新的sql20008里面,也支持merge语法9. MySQL支持insert into table1 set t1 = , t2 = ,但是MS SQL不支持这样写10. MySQL支持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)11. MySQL在创建表时要为每个表指定一个存储引擎类型,而MS SQL只支持一种存储引擎12. MySQL不支持默认值为当前时间的datetime类型(MS SQL很容易做到),在MySQL里面是用timestamp类型13. MS SQL里面检查是否有这个表再删除,需要这样:ifexists (select * from dbo.sysobjects where id = object_id(Nuc_newpm) and OBJECTPROPERTY(id,NIsUserTable)=1)但是在MySQL里面只需要 DROP TABLE IF EXISTS cdb_forums;14. MySQL支持无符号型的整数,那么比不支持无符号型的MS SQL就能多出一倍的最大数存储15. MySQL不支持在MS SQL里面使用非常方便的varchar(max)类型,这个类型在MS SQL里面既可做一般数据存储,也可以做blob数据存储16. MySQL创建非聚集索引只需要在创建表的时候指定为key就行,比如:KEY displayorder (fid,displayorder) 在MS SQL里面必须要:create unique nonclustered indexindex_uc_protectedmembers_username_appid on dbo.uc_protectedmembers(username asc,appid asc)17. MySQL text字段类型不允许有默认值18. MySQL的一个表的总共字段长度不超过65XXX。19. 一个很表面的区别就是MySQL的安装特别简单,而且文件大小才110M(非安装版),相比微软这个庞然大物,安装进度来说简直就是.20. MySQL的存储过程只是出现在最新的版本中,稳定性和性能可能不如MS SQL。21. 同样的负载压力,MySQL要消耗更少的CPU和内存,MS SQL的确是很耗资源。22. mysql的ifnull()函数对应sql的isnull()函数;23. mysql的存储过程中变量的定义去掉;24. mysql的每句结束要用;25. SQLServer存储过程的AS在MySql中需要用begin .end替换26. 字符串连接用concat()函数;如 SQLServer: Temp=select * from +tablename+ ; MySql:Temp=concat(select * from, tablecname,)27. mysql的uuid()对应mssql的GUID();28. MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer的output放在变量后面29. MySql out,in,inout的区别MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。30. MySQL的if语句为if (条件) then end if;或者If (条件) thenElseEnd if或者If(条件)thenElseif(注意不能写成 Else if )ElseifEnd if31. Mysql的Execute对应SqlServer的exec;(注意:必须想下面这样调用)Set cnt=select * from 表名;Prepare str from cnt;Execute str;32. MySql存储过程调用其他存储过程用callCall 函数名(即SQLServer的存储过程名)(参数1,参数2,)33. mysql的日期1) 获得当前日期函数:curdate(),current_date()2) 获得当前时间函数:curtime();3) 获得当前日期+时间:now();4) MySQL dayof. 函数:dayofweek(), dayofmonth(), dayofyear()分别返回日期参数,在一周、一月、一年中的位置。5) (注:周日=1,周一=2,周二=3,)6) 返回本月的天数:select day(last_day(now();7) MySQL 为日期增加一个时间间隔:date_add()8) select date_add(CURRENT_DATE(),interval 要增加的天数 day) as Fdate9) MySQL 为日期减去一个时间间隔:date_sub()10) select date_sub(1998-01-01 00:00:00, interval 1 1:1:1 day_second);11) MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)12) MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second)13) 例:select makedate(2001,31); - 2001-01-3114) select makedate(2001,32); - 2001-02-0115) 本周时间(起始)16) select date_sub(CURRENT_DATE(),interval dayofweek(curdate()-2 day) as Fdate17) 本周时间(结束)18) select date_add(CURRENT_DATE(),interval dayofweek(curdate()+3 day) as Fdate19) 上周时间(起始)20) select date_sub(CURRENT_DATE(),interval dayofweek(curdate()+5 day) as Fdate21) 上周时间(结束)22) select date_sub(CURRENT_DATE(),interval dayofweek(curdate()-1 day) as Fdate23) 本月时间(起始)24) select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()-1 DAY) as Fdate25) 本月时间(结束)26) Select date_add(current_date(),interval day(last_day(CURDATE() -day(CURDATE() day) as Fdate27) 上月时间(起始)28) select DATE_SUB(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE() DAY),interval day(last_day(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE() DAY)-1 day) as Fdate29) 上月时间(结束)30) select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE() DAY) as Fdate31) 今年时间(起始)32) select makedate(year(curdate(),1) as FDate33) 今年时间(结束)34) select DATE_SUB(makedate(year(curdate()+1,1) ,INTERVAL 1 day) as Fdate35) 去年时间(起始)36) select makedate(year(curdate()-1,1) as Fdate37) 去年时间(结束)38) select DATE_SUB(makedate(year(curdate(),1) ,INTERVAL 1 day) as FDate39) DATE_FORMAT(date,format):根据format字符串格式化date值。下列修饰符可以被用在format字符串中40) %M 月名字(JanuaryDecember) %W 星期名字(SundaySaturday) %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。) %Y 年, 数字, 4 位 %y 年, 数字, 2 位 %a 缩写的星期名字(SunSat) %d 月份中的天数, 数字(0031) %e 月份中的天数, 数字(031) %m 月, 数字(0112) %c 月, 数字(112) %b 缩写的月份名字(JanDec) %j 一年中的天数(001366) %H 小时(0023) %k 小时(023) %h 小时(0112) %I 小时(0112) %l 小时(112) %i 分钟, 数字(0059) %r 时间,12 小时(hh:mm:ss APM) %T 时间,24 小时(hh:mm:ss) %S 秒(0059) %s 秒(0059) %p AM或PM 41) %w 一个星期中的天数(0=Sunday 6=Saturday ) %U 星期(052), 这里星期天是星期的第一天 %u 星期(052), 这里星期一是星期的第一天 % 一个文字“%”。 42) 例:所有的其他字符不做解释被复制到结果中。 mysql select DATE_FORMAT(1997-10-04 22:23:00, %W %M %Y); -Saturday October 1997 mysqlselect DATE_FORMAT(1997-10-04 22:23:00, %H:%i:%s); 43) - 22:23:00 44) mysqlselect DATE_FORMAT(1997-10-04 22:23:00, %D %y %a %d %m %b %j); 45) -4th 97 Sat 04 10 Oct 277 46) mysqlselect DATE_FORMAT(1997-10-04 22:23:00, %H %k %I %r %T %S %w); 47) -22 22 10 10:23:00 PM 22:23:00 00 6 34. MySql存储过程中没有return函数,在MySql中可以用循环和out参数代替If EXISTS(SELECT * FROM T_Chance WHERE FCustID=CostomerID) return 0改写为:(在参数中定义一个out变量:out temp varchar(100);)BEGINLoop1:loopSELECT count(*) FROM T_Chance WHERE FCustID=CostomerID int cntIf cnt0 thenbeginset temp=0;leave loop1;end;end ifend loop loop1;35. (13) select a=count(*) from VW_Action 在mySql中修改为:select count(*) from VW_Action into a;36. (14)MySQL中没有top关键字,需要用limit代替且放在后面注意,在MySQL中的limit不能放在子查询内,limit不同与SQLServer,它可以规定范围 limit a,b范围a-bSQL SERVER : select top 8 * from table1 MYSQL: select * from table1 limit 5;37. (15)即使存储过程没有参数也要写括号“()”38. (16) 当一个存储过程中有创建临时表时create procedure up_test()begin drop table if exists tb1;create TEMPORARY table tb1/注意添加TEMPORARY table(id int,name varchar(20);/注意最后加分号insert tb1 values(1,jim);select * from tb1;end39. (17)建表中自增长问题:create table user ( Idvarchar(10) primary keyauto_increment not null, Namevarchar(20)not null, Passwordvarchar(20), create_datedatetime ); auto_increment 自增长40. (18) Unable to convert MySQL date/time value to System.DateTime这是因为在日期列中有0000-00-00数据值,要修正这个问题,你可以把这些数据设为null,或者在连接字符串中设置Allow Zero Datetime=True 。41. (19) MySQL视图的FROM子句不允许存在子查询,因此对于SQL Server中FROM子句带有子查询的视图,需要手工进行迁移。可通过消除FROM子句中的子查询,或将FROM子句中的子查询重构为一个新的视图来进行迁移。u 数据库迁移:从SQLSERVER到Mysql1. 利用工具从sql导出到mysql的方法很多,现介绍一种无需编程,直接利用sql和mysql里的图形界面进行导入导出的简单方法。 前提是已经安装了sqlserver客户端和mysql的图形界面管理工具phpmyadmin。 在控制台根目录下打开sqlserver企业管理器,新建sqlserver组,根据自己的情况进行选择;然后新建sqlserver 注册,进行对sqlserver的连接。准备妥当后,下面就开始了: 首先打开数据转换服务,新建包,打开DTS界面,在连接中选择数据源进行配置。再选择将要转换到的目的文件,这里我选的 Textfile(destination),选择好文件的存放位置之后,我们来新建一个任务。这里我们只选择转换数据任务,将带有“选择源连接”“选择目的连接”的鼠标分别选中数据源和目的之后,我们对新生成的连接进行定义,在其属性中将源,目的,转换依次定义。 执行任务,提示成功。保存任务。然后在新建的任务上导出数据,有向导提示,其中一项选择“从源数据库复制表和视图”。 这一步已经把数据导出到目的文件中。 下一步在mysql中新建表,与将要导入的结构保持一致时,直接选取“从文本文件中提取数据,插入到数据表:”,将选项添好后,“发送”就可以了,浏览一下,数据已导入了。若要导入的表已经存在,且属性名也不同,这时就先建一个与要导入的数据相同结构的表并导入数据(按刚才的进行就可以了),然后在mysql中导出“数据和结构”,得到sql语句,将其在文本文件中编辑,利用文本编辑器的替换功能,将表名修改,列名加入,最后将其粘贴在要导入表的执行sql语句的地方,执行一下,数据便导入了。 若过程中出现错误,请仔细检查配置的选项,确保正确。2. 手动导入sqlserver迁移到mysql在数据库方面的工作主要是表的迁移,以及存储过程的迁移,这里先说说表的迁移.首先先将MSSQL Server表结构导出为.sql文件. 表迁移,mysql一律不能运行带有,dbo.等带有sqlserver特征的脚步, 所以在导出的sqlserver脚步里面,首先要把这些字符全部过滤掉(可使用editplus进行过滤),在表创建方面的不支持的字符如下:,dbo.,GO, on primary,.在过滤完以上的字符后, 由于导出的sql文件都包含多个表, 为了能够一次性装载完所有的scripts并运行,需要在每个表的create语句后面加上分号, (同时还有加上ENGINE=InnoDB),否则你会发现只能一个一个表的进行运行,比如原来是这样:CREATE TABLE bmapnamebidsg ( bword nvarchar (100) NOT NULL , bids text NULL , status int NOT NULL , cr_date datetime NOT NULL ) CREATE TABLE BookStaticSortStatus ( sid int NOT NULL , sortStatus int NOT NULL , mxReviewStatus int NOT NULL , lReviewStatus int NOT NULL , up_date datetime NOT NULL ) 改动后是这样的:CREATE TABLE bmapnamebidsg ( bword nvarchar (100) NOT NULL , bids text NULL , status int NOT NULL , cr_date datetime NOT NULL)ENGINE=InnoDB ;CREATE TABLE BookStaticSortStatus ( sid int NOT NULL , sortStatus int NOT NULL , mxReviewStatus int NOT NULL , lReviewStatus int NOT NULL , up_date datetime NOT NULL)ENGINE=InnoDB ;接下来就是数据类型了!在数据类型方面,mysql基本对应了sqlserver的数据类型, 向bit,text,varchar,等,都对应得比较好, 但是,mysql并不支持smalldatetime(这个是sqlserver特有的),需要转成datetime,另外, sqlserver中的identity自增长属性在mysql中则表现为auto_increament属性,并且声明该属性的列必须是key!最后我们看看主键,索引以及缺省值如何对应,一些是MS SQLServer(建一个主键,为两个字段定义缺省值,再为一个字段定义成索引):ALTER TABLE BookStaticSortStatus WITH NOCHECK ADDCONSTRAINT PK_BookStaticSortStatus PRIMARY KEY CLUSTERED(sid)ALTER TABLE BookStaticSortStatus ADDCONSTRAINT DF_BookStaticSortStatus_status DEFAULT (-1) FOR sortStatus,CONSTRAINT DF_BookStaticSortStatus_up_date DEFAULT (getdate() FOR up_dateCREATE INDEX sort2_books ON dbo.books(s2id) ON PRIMARYMySQL:CREATE TABLE bmapnamebidsg ( bword varchar(100) character set utf8 NOT NULL default 1, bids text NOT NULL, status int(11) NOT NULL, cr_date
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年武夷山职业学院单招综合素质考试题库新版
- 2026年长沙幼儿师范高等专科学校单招职业技能考试题库附答案
- 2026年永州职业技术学院单招职业技能测试题库必考题
- 2026年河南对外经济贸易职业学院单招职业适应性考试题库附答案
- 2026年冀中职业学院单招职业技能测试题库必考题
- 2026年衡水职业技术学院单招职业倾向性测试题库新版
- 2026年四川华新现代职业学院单招职业倾向性测试必刷测试卷及答案1套
- 2026年上饶幼儿师范高等专科学校单招职业适应性测试必刷测试卷附答案
- 2026年温州职业技术学院单招职业适应性测试必刷测试卷及答案1套
- 2026年泉州职业技术大学单招综合素质考试题库新版
- 医院运营管理培训
- 激光3D打印人形机器人关节结构拓扑优化研究
- 人教版(2024)二年级上册《身体上的尺子》单元测试卷(含解析)
- 叉车司机三级试题+答案
- 安全施工协议范本简易版4篇
- 楼顶搭铁棚的安全协议书
- T-CERS 0067-2024 T-EPTC 005-2024 构网型风力发电机组并网性能测试规程
- 2025年秋新北师大版数学3年级上册全册同步教案
- 2025至2030国内中老年用品行业市场发展分析及竞争策略与投资发展报告
- 质量损失追究管理办法
- 第18课 全民族抗战中的正面战场和敌后战场 课件 统编版八年级历史上册
评论
0/150
提交评论