1.存储过程的语法各式
eg:
DELIMITER $$
CREATE PROCEDURE test_p_add9
(
p_name VARCHAR(100),
p_test VARCHAR(100),
p_age INT,
OUT o_newid INT
)
BEGIN
INSERT INTO table_test (f_name,f_test,f_age,f_date) VALUES (p_name,p_test,p_age,NOW());
SET o_newid=LAST_INSERT_ID();
END$$
DELIMITER ;
/*
DELIMITER 其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。
默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,
那么回车后,mysql将会执行该命令。如输入下面的语句
select * from test_table;
然后回车,那么MySQL将立即执行该语句。
但有时候,不希望MySQL这么做。在为可能输入较多的语句,且语句中包含有分号。
*/
注意点:
a.每句话后边都要加分号。
b.存储过程参数不需要加@
c.使用call 调用存储过程的时候 参数 需要加@
例如:
SET @s=0;
CALL test_p_add9 (‘xxx‘,‘123xx‘,12, @s);
SELECT @s;
d.声明变量可以直接赋值 set 不需要 declare
e.没有 as
f. output 在前边 sqlserver 的在后边
g.存储过程没有参数也要写 ()
h.mysqlparams 参数 需要用?代替 @
2.分页语句
SELECT * FROM table_test LIMIT 5,3;
3.相应的top 语句
SELECT * FROM table_test LIMIT 5;
4.字符串拼接使用concat
SELECT CONCAT(‘1‘,‘2‘);
如果使用‘1‘+‘2‘ 结果是3
5.使用now() 获取当前时间
select now();
select curdate()日期 current_date()
select CURTIME()时间
6.isnull 函数
如果参数是null 返回1 不是则返回0
7.ifnull 函数 相当于sql isnull
ifnull(null,10)
8.uuid() 函数 代替mssql newid();
9.row_count() 函数 代替 @@rowcount
仅限于 update delete insert
10.scop_identity()
last_insert_id()
11.mysql 不支持nchar,nvarchar,ntext类型
12.自增语句 使用auto_increment
13. default 后边直接写值不用加括号
14.识别符
sqlserver: [name]
mysql: ‘name‘
15.mysql 支持 values 这个 sql sqlserver 2008 以后也支持
INSERT INTO table_test (f_name,f_test,f_age,f_date) VALUES (‘321‘,‘321‘,21,NOW()),(‘123‘,‘123‘,123,NOW())
16 select @count=count(*) from table
mysql select count(*) from table into @count
17 if条件语句
if 条件 then
end if
或者
if 条件 then
else
end if
或者
if 条件then
elseif 条件 then
end if
eg:
DELIMITER $$
CREATE PROCEDURE test_test1
(
p_index INT
)
BEGIN
IF p_index >0 THEN
SELECT 1 ;
ELSE
SELECT 2;
END IF ;
END $$;
DELIMITER;
mysql 语法没有return
18. 时间操作函数
SELECT DATE_ADD(CURDATE(),INTERVAL 1 DAY) 当前时间加1天
SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY) 当前时间减去1天