Py学习  »  DATABASE

mysql 8与mysql 5.7的区别

sbrbot • 4 年前 • 849 次点击  

我有以下功能,可以在mysql v5.7中创建,但不能在mysql 8(8.0.13)中创建:

CREATE FUNCTION IsRoomAvailable(rid INT,fymd DATE,tymd DATE,bid INT)
  RETURNS BOOL
  READS SQL DATA
BEGIN
  DECLARE bids INT;
  SELECT COUNT(*) INTO bids
    FROM bookings AS b
   WHERE ((b.bstart<tymd AND b.bend>=fymd) OR (b.bstart<=fymd AND b.bend>tymd))
     AND b.rid=rid
     AND b.bid!=bid;
  RETURN IF(bids>0,FALSE,TRUE);
END

我收到以下错误消息:“错误代码:1064。SQL语法中有错误;请查看与MySQL服务器版本相对应的手册,以获取在第5行“”附近使用的正确语法。

有趣的是,我在创建过程时没有这个问题,只是创建一个函数。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46128
 
849 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Madhur Bhaiya
Reply   •   1 楼
Madhur Bhaiya    5 年前

您需要将分隔符定义为除 ; (如: $$ )最后,将分隔符重新定义为 ; :

DELIMITER $$
CREATE FUNCTION IsRoomAvailable(rid INT,fymd DATE,tymd DATE,bid INT)
  RETURNS BOOL
  READS SQL DATA
BEGIN
  DECLARE bids INT;
  SELECT COUNT(*) INTO bids
    FROM bookings AS b
   WHERE ((b.bstart<tymd AND b.bend>=fymd) OR (b.bstart<=fymd AND b.bend>tymd))
     AND b.rid=rid
     AND b.bid!=bid;
  RETURN IF(bids>0,FALSE,TRUE);
END $$
DELIMITER ;

附笔. 我做了一个比较 5.7 Docs 8.0 Docs 对于MySQL中的用户定义函数。似乎什么都没变。