分號不能少;分號不能少;分號不能少;重要的事情說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)]DATEDATETIMEDECIMAL[(M[,D])]SIGNED [INTEGER]TIMEUNSIGNED [INTEGER]
使用的時候需要注意,諸如:SELECT CAST(0 AS INT); -- 這種寫法是行不通的,給我乖乖改成--> SELECT CAST(0 AS SIGNED);
2.獲取字符串長度函數
MYSQL中的CHAR_LENGTH()等同MSSQL中的LEN();
MYSQL中的LENGTH()等同MSSQL中的DATA_LENGTH();
未完待續……
