Mysql的range提示语法错误


mysql> create table bookinfo(
    -> book_id int,
    -> book_name varchar(20)
    -> );
Query OK, 0 rows affected (0.24 sec)

mysql> partition by range(book_id)(
    -> partition p1 values less than(20109999),
    -> partition p2 values less than(20159999),
    -> partition p3 values less than MAXVALUE);
ERROR 1064 (42000): Partitioning can not be used stand-alone in query near 'partition by range(book_id)(
partition p1 values less than(20109999),
partition ' at line 1

一直报语法错误,求指教。

引用 皆我百晓生 小程序回复内容作答:
在MySQL中,对于表的分区操作应该在创建表的时候一起进行,而不是单独执行。根据你提供的信息,你可以使用以下语法进行创建带分区的表:

CREATE TABLE bookinfo (
    book_id INT,
    book_name VARCHAR(20)
)
PARTITION BY RANGE(book_id)(
    PARTITION p1 VALUES LESS THAN (20109999),
    PARTITION p2 VALUES LESS THAN (20159999),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

请确保在执行分区操作时,将其与创建表的语句合并在一起。这样就能避免出现语法错误。

【以下回答由 GPT 生成】

根据提供的错误信息,可以看出问题出在分区语句的书写上。根据MySQL文档的说明,分区语句应该写在表定义语句之后。

解决方案如下:

  1. 创建表的同时定义分区语句,可以将分区语句写在表定义语句之后。
  2. 在分区语句中添加必要的关键词和正确的语法。

下面是修正后的代码:

CREATE TABLE bookinfo(
    book_id INT,
    book_name VARCHAR(20)
)
PARTITION BY RANGE(book_id) (
    PARTITION p1 VALUES LESS THAN (20109999),
    PARTITION p2 VALUES LESS THAN (20159999),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

或者可以使用以下代码,在创建表之后再对表进行分区:

CREATE TABLE bookinfo(
    book_id INT,
    book_name VARCHAR(20)
);

ALTER TABLE bookinfo
PARTITION BY RANGE(book_id) (
    PARTITION p1 VALUES LESS THAN (20109999),
    PARTITION p2 VALUES LESS THAN (20159999),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

请注意,在分区语句中,VALUES关键词后面的值应该是一个具体的数值而不是一个表达式。所以,在这里我们使用了具体的数值来表示每个分区的上限。

希望以上解决方案对您有所帮助。如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^