SQLServer和MySQL都是大家常用的数据库,她们基本兼容SQL-92标准,但语法风格还是有一些不同,下面列举一部分两者常用SQL片段的差异,权当抛砖引云,其实两者之间的细微差异多着呢。

查看表结构的方式
SQLServer方式:
- -- 查看系统内所有数据库
- SELECT name, database_id, create_date FROM sys.databases ;
- -- 查询数据库内所有表
- select * from sysobjects where xtype= 'U' ;
- -- 显示表结构
- sp_help/sp_columns 表名;
MySQL方式:
- -- 查看系统内所有数据库
- show databases;
- -- 查询数据库内所有表
- show tables;
- -- 显示表结构desc 表名;
语句结束符号
SQLServer的结束符号:
使用单行GO
分号;
什么都不写
MySQL的结束符号:
似乎一直都是用分号;。
返回前几条记录
SQL Server的写法是:
- select top n条 from 表;
- select top n percent from 表;
MySQL的写法是:
- select * from 表 limit n;
获取当前的日期时间
SQL Server的写法是:
- getdate();
MySQL的写法是:
- now();
循环支持
以1到100求和为例,我们看看两者实现的不同方式
SQL Server只有一个while循环,语法如下:
- DECLARE @I INT = 1;
- DECLARE @K INT = 0;
- WHILE @IBEGIN SET @K = @K + @I;
- SET @I = @I + 1;
- ENDSELECT @K;
MySQL支持好几种,先看看While循环:
- DECLARE I,K INTDEFAULT 0 ;
- WHILE I SET K=I + K;
- SET I=I + 1;
- END WHILE;
- SELECT K;
再看看MySQL的REPEAT UNTIL 循环循环:
- DECLARE I,K INTDEFAULT 0 ;
- REPEATSET K=I + K;
- SET I=I + 1;
- NTIL I>100END REPEAT;
- SELECT K;
再看看MySQL的LOOP循环
- DECLARE I,K INTDEFAULT 0 ;
- LABEL: LOOPSET K=I + K;
- SET I=I + 1;
- IF I>100 THENLEAVE LABEL;
- END IF;
- END LOOP;
- SELECT K;
细微区别太多,这里就不一一列举了。