从 SQL Server 到 My SQL

MS SQL Server 对于程序开发人员来说都不陌生,它功能强大且使用方便,无论你是做个人的小型软件还是企业的大型系统,选择它你都不会觉得后悔。然而,它也有它的局限性,那就是费用,几万到几十万元一夽的价格,对谁来说都不是一个小数目。唉,难道天下就真的没有免费的午餐了?有,这个真的可以有:MySQLMySQL就是一款开源的数据库,承诺永久免费,而且小巧,灵便。据我的研究,对于一般规模的系统,它的功能足以满足我们的需要,对于数百万甚至上千万条的数据,它也能应付自如。既然有这么好的免费午餐,我们没理由不选择呀。那么从SQL Server MySQL,我们需要注意些什么呢?下面就是我发现的一些值得注意的地方:
一、数据迁移
如果我们以前使用的是SQL Server,数据结构以及大量数据都存在于SQL Server中,现在要改用MySQL了。怎么才能把数据库从SQL Server 迁移到 MySQL呢?你可以在My SQL中重新构建一个一模一样的空数据库,然后用程序代码把数据从SQL Server中读出再写入MySQL中。这种方法当然不会有错,然而有更方便的方法:SQL Server有导入导出功能,我们可以使用它的导出功能,将SQL Server中的数据完整的导出到MySQL中。具体流程是:
1、在MySQL中建一空数据库
2、在ODBC中建一连接该数据库的DSN数据源(前提是先安装MySQLODBC驱动,可以从网上下载。)
3、打开SQL Server的数据导出功能
选择要导出的源数据库
选择导入到的数据库,这里是MySQL ODBC
选择DSN,输入用户及密码
    这一步选择要导出的数据表,这里有一个需要注意的地方,就是SQL Server与MySQL的数据类型有一定的不同,有时自动转换不一定最恰当的,可能需要手支对应一下。如下图:
    每一个表都对应完成后,即可到一步,最后点击完成,系统就会把SQL Server数据库里的表一个个导入到我们的MySQL中。至此,我们就成功的将数据库迁移到MYSQL了。
二、数据操作
MySQLSQL语名与SQL ServerSQL语句有些不同的地方,在SQL Server中我们可能用到一些它自己的函数,比如Grouping,Isnull等,这些函数在MySQL中是不支持的,所以如果在开发中用到了这些函数,我们就要想办法用别的方法到实现这些函数的功能。到目前为止,我总结了以下几点不同:
1、在SQL Server中,如果表名以数字开头,在SQL语句中我们需要在用“[”和“]”将表名括起来,例如:select * from [7newtemp]。但在MySQL中,它是不需要任何处理的,如:select * from 7newtemp,相反,这么做了反而会出错。
2、在SQL Server中常用的 Select Top n MySQL中是不支持的,取而代之的是Limit n1,n2,但Limit在语法和功能上是与Top 有很大不同的:首先,limit n1,n2必须放在整个SQL语句的最后,其次,Limit n1,n2取的不仅仅是前多少条,它可以取得记录集中的任意一个区段,从n1(包括n1)开始,到n2(不包括n2)结束。如果我们要取前10条记录,在SQL Server中应该这么写:select top 10 * from [7newtemp],而在MySQL中我们应该这么写:select * from 7newtemp limit 0,10
3、在多表联合查找时,我们经常要给表一个别名,如:select A.*,B.Uid from 7newtemp A,Table2 B where A.uid=B.uid 。这是在SQL Server中的写法,如果在MySQL中,我就应该这么写:select A.*,B.Uid from 7newtemp as A,Table2 as B where A.uid=B.uid
4、在MySQLGroup by Order by 不能同时使用。
以上是我总结的SQL Server MySQL在操作上的几点区别,应该还有其它的区别,我会在以后的工作中继续发现,总结,再写出来。目的只有一个:那就是让同仁们在从SQL Server转向MySQL时少走弯路。
    以下是一个MySQL的分组统计的例子,想想看,在SQL Server中是怎么写的,区别在哪儿。
1.创建表:
    create table groupTable(dept varchar(6),phone varchar(20),amount int);
2.
插入测试数据:
    insert groupTable
    select '
营业部 ',8001,20 union all
    select '
营业部
',8002,30 union all
    select '
财务部
',6001,10 union all
    select '
财务部
',6003,100;
3.
mysql 语句:

    select ifnull(dept,'
总计') as '部门',ifnull(phone,'小计') as '电话',sum(amount ) as '金额 ' from groupTable group by
    dept,phone with rollup;
4.
结果显示:

+--------+------+------+
|
部门   | 电话 | 金额 |
+--------+------+------+
|
财务部 | 6001
|   10 |
|
财务部 | 6003
| 100 |
|
财务部 |小计 
| 110 |
|
营业部 | 8001
|   20 |
|
营业部 | 8002
|   30 |
|
营业部 | 小计
|   50 |
|
总计   | 小计
| 160 |
+--------+------+------+
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值