MySQL與MSSQL的一些語法差異(持續更新中)


分號不能少;分號不能少;分號不能少;重要的事情說3遍

Insert或者Update的數據包含反斜杠\的時候需要進行轉義\\,例:insert into tablename(id,name) values(1,'劉\\一哥'); -- 保存到數據庫后就是 1 劉\一哥

 

一、變量申明(非常重要)

1.帶@的變量不需要申明直接使用

select columnname into @V_ColumnName from tablename Limit 0,1;

select @V_ColumnName;

2.變量申明必須放在最前面,包括申明游標(如果游標是基於臨時表的循環也是一樣的,先申明游標,在后面創建循環的臨時表);

3.存儲過程中的變量申明不能使用@

例:Declare V_ID1,V_ID2 INT Default 0;

4.變量的命名千萬不要和字段名稱一致,否則MySQL數據庫會把字段當成是變量;比如可以在前面加上V_,例:V_ColumnName

 

二、MySQL不支持匿名塊

例如:

DECLARE V_ColumnName varchar(50);
select columnname into V_ColumnName from tablename LIMIT 0,1;

select V_ColumnName; -- 會報錯,是不是很奇怪?明明沒有語法錯誤吧,新手會這些問題搞得郁悶到死

這種語句在MySQL中是不能執行的,如果要執行就必須放到存儲過程或函數中;

 

三、存儲過程的調用

call procedure_name(參數1,參數2……);

如果有OUT參數,例如:Create Procedure SP_TEST(IN Param1 int, OUT Param2 int)

call SP_TEST(1,@Param2);

select @Param2;

 

四、臨時表

不需要#號,#在MySQL是單行注釋符,在存儲過程中使用臨時表必須先判斷是否存在,否則同一進程中第二次執行存儲過程就會提示表已經存在了

例:DROP TEMPORARY TABLE IF EXISTS tmptable;

Create TEMPORARY TABLE tmptable(……);

 

五、IF語句

IF ... THEN ... ELSEIF ... THEN ... ELSE ... END IF;

記住千萬不要閑得蛋疼給它加BEGIN END就對了;

 

六、視圖

不能在視圖中使用子查詢,例:select * from (select * from xxx) as x;  --會報錯的

如果實在需要這樣做,就創建2個視圖進行嵌套;

 

七、數據庫內部函數

1.類型轉換函數:MySQL和MSSQL的類型轉換函數名稱都是CAST和CONVERT,但CONVERT函數的參數有些不太一致;

MSSQL的語法如下:

CAST ( expression AS data_type [ ( length ) ] )

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

 

 

 

MySQL的語法如下:

CAST ( expression AS data_type ( length ) );

CONVERT ( expression , data_type ( length ) );

 

 

 

但MYSQL中的類型轉換函數有一些限制,type只能是以下幾種類型:

  • BINARY[(N)]
  • CHAR[(N)]
  • DATE
  • DATETIME
  • DECIMAL[(M[,D])]
  • SIGNED [INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

使用的時候需要注意,諸如:SELECT CAST(0 AS INT); -- 這種寫法是行不通的,給我乖乖改成--> SELECT CAST(0 AS SIGNED);

 

2.獲取字符串長度函數

MYSQL中的CHAR_LENGTH()等同MSSQL中的LEN();

MYSQL中的LENGTH()等同MSSQL中的DATA_LENGTH();

 

未完待續……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM