天天看點

SQL Server和My SQL某些T-SQL用法的差別MySql與SqlServer的一些常用用法的差别

1、設定初始流水号,比如設定某一列的各個依次為1、2、3、4、5...... ;在SS中是IDENTITY(1, 1),而在MS寫法是auto_increment

2、修改表中列的資料類型,在SS中是ALTER TABLE students01 ALTER COLUMN Id SMALLINT,而在MS中寫法是ALTER TABLE students01 MODIFY Id SMALLINT

.......

因為之前一直在用SQL Server,是以一時間适應不過來。 還有好多細節在寫法上有各種各樣的差別,先記錄一下自己碰到的,以後再補上去

=====================================================================

轉載一下網上的資料 Link:http://www.jb51.net/article/54346.htm

這篇文章主要介紹了MySQL與SQL Server的一些差別淺析,本文羅列了MySQL與SQL Server的25個不同的地方,并對它們的分頁技術的不同做了講解,需要的朋友可以參考下

1、mysql支援enum,和set類型,sql server不支援

2、mysql不支援nchar,nvarchar,ntext類型

3、mysql的遞增語句是AUTO_INCREMENT,而mssql是identity(1,1)

4、mssql預設到處表建立語句的預設值表示是((0)),而在mysql裡面是不允許帶兩括号的

5、mysql需要為表指定存儲類型

6、mssql識别符是[],[type]表示他差別于關鍵字,但是mysql卻是 `,也就是按鍵1左邊的那個符号

7、mssql支援getdate()方法擷取目前時間日期,但是mysql裡面可以分日期類型和時間類型,擷取目前日期是cur_date(),目前完整時間是 now()函數

8、mssql不支援replace into 語句,但是在最新的sql20008裡面,也支援merge文法

9、mysql支援insert into table1 set t1 = ‘', t2 = ‘' ,但是mssql不支援這樣寫

10、mysql支援insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)

11 mssql不支援limit語句,是非常遺憾的,隻能用top 取代limt 0,N,row_number() over()函數取代limit N,M

12、mysql在建立表時要為每個表指定一個存儲引擎類型,而mssql隻支援一種存儲引擎

13、mysql不支援預設值為目前時間的datetime類型(mssql很容易做到),在mysql裡面是用timestamp類型

14、mssql裡面檢查是否有這個表再删除,需要這樣:if exists (select * from dbo.sysobjects where id=id (N'uc_newpm') and OBJECTPROPERTY(id, N'IsUserTable') = 1) 但是在mysql裡面隻需要 DROP TABLE IF EXISTS cdb_forums;

15、mysql支援無符号型的整數,那麼比不支援無符号型的mssql就能多出一倍的最大數存儲

16、mysql不支援在mssql裡面使用非常友善的varchar(max)類型,這個類型在mssql裡面既可做一般資料存儲,也可以做blob資料存儲

17、mysql建立非聚集索引隻需要在建立表的時候指定為key就行,比如:KEY displayorder (fid,displayorder) 在mssql裡面必須要:

複制代碼 代碼如下: create unique nonclustered index index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers (username asc,appid asc)

18、mysql text字段類型不允許有預設值

19、mysql的一個表的總共字段長度不超過65XXX。

20、一個很表面的差別就是mysql的安裝特别簡單,而且檔案大小才23M左右(5.5.23),相比微軟這個龐然大物,安裝進度來說簡直就是.....

21、mysql的管理工具有幾個比較好的,mysql_front,和官方那個套件,不過都沒有SSMS的使用友善,這是mysql很大的一個缺點。

22、mysql的存儲過程隻是出現在最新的版本中,穩定性和性能可能不如mssql。

23、同樣的負載壓力,mysql要消耗更少的CPU和記憶體,mssql的确是很耗資源。

24、php連接配接mysql和mssql的方式都差不多,隻需要将函數的mysql替換成mssql即可,如果是PDO方式隻需要把mysql替換mssql即可。

25、mysql支援date,time,year類型,mssql到2008才支援date和time。

附:MySQL與MSSQL分頁的差別

之前一直用MySQL,雖然比起mssql這個龐大的資料庫系統mysql很苗條,但它并不遜色。以下說說這兩個在資料庫各自的分頁差別

例1,取出前十條

複制代碼 代碼如下:

SELECT * FROM table LIMIT 10;

在mssql中

複制代碼 代碼如下:

SELECT TOP 10 * FROM table

例2,每頁十條,取出第三頁

在MySQL中

複制代碼 代碼如下:

SELECT * FROM table LIMIT 20,10

在mssql中

複制代碼 代碼如下:

SELECT TOP 10 * FROM table WHERE id NOT IN(

SELECT TOP 20 id FROM table ORDER BY id DESC

) ORDER BY id DESC;

由以上例子可以看出,在MySQL中分頁用LIMIT關鍵字,如果是LIMIT 10表示取前十條,如果是LIMIT 10,10表示偏移十條取前十條記錄。在mssql中用top關鍵字,如果隻取前n條記錄直接top n即可,但是要是分頁取就有點麻煩。 ================================================================================== Link:http://www.cnblogs.com/fish-li/archive/2011/04/05/2006107.html

MySql與SqlServer的一些常用用法的差别

由于工作的原因:上家公司的資料庫全采用MySql,是以不得不用它。是以也學到了MySql的一些知識,但考慮到今後可能沒機會使用了,是以想趁現在離職在家休息,打算把這些東西整理一下,也為了萬一今後能用上,留個參考的資源。考慮到一直在使用SqlServer,是以就打算直接與SqlServer對比來寫。

本文将主要列出MySql與SqlServer不同的地方,且以常用的存儲過程的相關内容為主。

1. 辨別符限定符

SqlServer []
MySql ``

2. 字元串相加

SqlServer 直接用 +
MySql concat()

3. isnull()

SqlServer isnull()
MySql

ifnull()

注意:MySql也有isnull()函數,但意義不一樣

4. getdate()

SqlServer getdate()
MySql now()

5. newid()

SqlServer newid()
MySql uuid()

6. @@ROWCOUNT

SqlServer @@ROWCOUNT
MySql

row_count()

注意:MySql的這個函數僅對于update, insert, delete有效

7. SCOPE_IDENTITY()

SqlServer SCOPE_IDENTITY()
MySql last_insert_id()

8. if ... else ...

SqlServer
IF Boolean_expression 
     { sql_statement | statement_block } 
[ ELSE 
     { sql_statement | statement_block } ] 
 
-- 若要定義語句塊,請使用控制流關鍵字 BEGIN 和 END。
      
MySql
IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF
      

注意:對于MySql來說,then, end if是必須的。類似的還有其它的流程控制語句,這裡就不一一列出。

9. declare

其實,SqlServer和MySql都有這個語句,用于定義變量,但差别在于:在MySql中,DECLARE僅被用在BEGIN ... END複合語句裡,并且必須在複合語句的開頭,在任何其它語句之前。這個要求在寫遊标時,會感覺很BT.

10. 遊标的寫法

SqlServer
declare @tempShoppingCart table (ProductId int, Quantity int)
insert into @tempShoppingCart (ProductId, Quantity)
	select ProductId, Quantity from ShoppingCart where UserGuid = @UserGuid


declare @productId int
declare @quantity int
declare tempCartCursor cursor for 
		select ProductId, Quantity from @tempShoppingCart

open tempCartCursor
fetch next from tempCartCursor into @productId, @quantity
while  @@FETCH_STATUS = 0
begin
	update Product set SellCount = SellCount + @quantity	where productId = @productId

	fetch next from tempCartCursor into @productId, @quantity
end

close tempCartCursor
deallocate tempCartCursor
      
MySql
declare m_done int default 0;
declare m_sectionId int;
declare m_newsId int;

declare _cursor_SN cursor for select sectionid, newsid from _temp_SN;
declare continue handler for not found set m_done = 1;

create temporary table _temp_SN 
	select sectionid, newsid from SectionNews  group by sectionid, newsid having count(*) > 1;

open _cursor_SN;
while( m_done = 0 ) do
	fetch _cursor_SN into m_sectionId, m_newsId;
	
	if( m_done = 0 ) then 
		-- 具體的處理邏輯
	end if;
end while;
close _cursor_SN;
drop table _temp_SN;
      

注意:為了提高性能,通常在表變量上打開遊标,不要直接在資料表上打開遊标。

11. 分頁的處理

SqlServer
create procedure GetProductByCategoryId( 
    @CategoryID int, 
    @PageIndex int = 0, 
    @PageSize int = 20, 
    @TotalRecords int output
) 
as
begin
     
declare @ResultTable table
( 
    RowIndex int, 
    ProductID int, 
    ProductName nvarchar(50), 
    CategoryID int, 
    Unit nvarchar(10), 
    UnitPrice money, 
    Quantity int
); 
     
insert into @ResultTable 
select row_number() over (order by ProductID asc) as RowIndex, 
       p.ProductID, p.ProductName, p.CategoryID, p.Unit, p.UnitPrice, p.Quantity 
from   Products as p 
where CategoryID = @CategoryID; 
       
select  @TotalRecords = count(*) from  @ResultTable; 
     
select * 
from   @ResultTable 
where  RowIndex > (@PageSize * @PageIndex) and RowIndex <= (@PageSize * (@PageIndex+1)); 
     
end;
      
當然,SqlServer中并不隻有這一種寫法,隻是這種寫法是比較常見而已。
MySql
create procedure GetProductsByCategoryId(
   in _categoryId int,
   in _pageIndex int,
   in _pageSize int,
   out _totalRecCount int
)
begin
 
   set @categoryId = _categoryId;
   set @startRow = _pageIndex * _pageSize;
   set @pageSize = _pageSize;
 
   prepare PageSql from 
	'select sql_calc_found_rows * from product  where categoryId = ? order by ProductId desc limit ?, ?';
   execute PageSql using @categoryId, @startRow, @pageSize;
   deallocate prepare PageSql;
   set _totalRecCount = found_rows();
 
end      

繼續閱讀