我刚接触mysql数据库,今天遇到了一些问题一直不能解决,请求高手赐教!!!!该如何解决?急!!!
sql脚本是:
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (   
name          VARCHAR(50) NOT NULL,  
current_value INT(6) NOT NULL,   
increment       INT(6) NOT NULL DEFAULT 1,   
PRIMARY KEY (name)   
)
  
DROP FUNCTION IF EXISTS currval;
DELIMITER    
CREATE FUNCTION currval (`seq_name` VARCHAR(50))   
RETURNS INTEGER   
CONTAINS SQL   
BEGIN   
  DECLARE value INTEGER;   
  SET value = 0;   
  SELECT current_value INTO value   
  FROM sequence   
  WHERE name = seq_name;   
  RETURN value;   
END
DELIMITER ; DROP FUNCTION IF EXISTS nextval;   
DELIMITER 
CREATE FUNCTION nextval (seq_name VARCHAR(50))   
RETURNS INTEGER   
CONTAINS SQL   
BEGIN   
   UPDATE sequence   
   SET          current_value = current_value + increment   
   WHERE name = seq_name;   
   RETURN currval(seq_name);   
END
DELIMITER ;  报错:
You have an error in your syntax;check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP FUNCTION IF EXISTS currval' at line 1
或者
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TABLE sequence (name VARCHAR(50) NOT NULL,current_value INT(6) NOT NULL,incremen' at line 1

解决方案 »

  1.   

    测试正常。估计是你没有指定 DELIMITER //
    mysql> DROP TABLE IF EXISTS sequence;
    Query OK, 0 rows affected, 1 warning (0.00 sec)mysql>
    mysql> CREATE TABLE sequence (
        ->  name      VARCHAR(50) NOT NULL,
        ->  current_value INT(6) NOT NULL,
        ->  increment     INT(6) NOT NULL DEFAULT 1,
        ->  PRIMARY KEY (name)
        -> );
    Query OK, 0 rows affected (0.09 sec)mysql>
    mysql> DROP FUNCTION IF EXISTS currval;
    Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> DELIMITER //
    mysql> CREATE FUNCTION currval (`seq_name` VARCHAR(50))
        -> RETURNS INTEGER
        -> CONTAINS SQL
        -> BEGIN
        ->  DECLARE `value` INTEGER;
        ->  SET `value` = 0;
        ->  SELECT current_value INTO `value`
        ->          FROM sequence
        ->          WHERE name = seq_name;
        ->  RETURN value;
        -> END
        -> //
    Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;
    mysql>
    mysql> DELIMITER //
    mysql>
    mysql> CREATE FUNCTION nextval (seq_name VARCHAR(50))
        -> RETURNS INTEGER
        -> CONTAINS SQL
        -> BEGIN
        ->  UPDATE sequence
        ->          SET current_value = current_value + increment
        ->          WHERE name = seq_name;
        ->  RETURN currval(seq_name);
        -> END
        -> //
    Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;
    mysql>
      

  2.   

    你是在MYSQL SHELL下输入?
    输入UDF前,用DELIMITER 改变结束符,结束后修改回来