Mariadb columnstore autoincrement无法正常工作

时间:2017-05-25 20:25:25

标签: mysql mariadb columnstore

我正在尝试使用Mariadb列存储,但是在定义了自动增量列的表中插入数据时遇到了一些错误。

使用JDBC驱动程序时会出现问题。

CREATE TABLE schema.mytable
(
  deaf_id bigint NOT NULL COMMENT 'autoincrement=1',
  name varchar(80) NOT NULL,
  country varchar(14) NOT NULL
) ENGINE=ColumnStore;

使用DBeaver,我尝试在表格中插入新数据:

INSERT INTO schema.mytable
(name, country)
VALUES('ny', 'usa');

但是我收到以下错误:

  

SQL错误[1364] [HY000] :( conn:4)字段'deaf_id'没有   默认值

但是使用mcsmysql,我可以成功添加数据:

MariaDB [schema]> INSERT INTO schema.mytable (name, country) VALUES('ny', 'usa');
Query OK, 1 row affected, 1 warning (0.28 sec)

MariaDB [schema]> select * from schema.mytable;
+---------+------+---------+
| deaf_id | name | country |
+---------+------+---------+
|       1 | ny   | usa     |
+---------+------+---------+
1 row in set (0.07 sec)

MariaDB [bovespa]>

我尝试使用这两种驱动程序:

https://downloads.mariadb.com/Connectors/java/connector-java-2.0.1/mariadb-java-client-2.0.1.jar

https://downloads.mariadb.com/Connectors/java/connector-java-1.5.9/mariadb-java-client-1.5.9.jar

这有什么问题吗?或者我错过了什么?

Kleyson Rios。

1 个答案:

答案 0 :(得分:2)

简答:

不是客户端或驱动程序问题。这是Columnstore用户权限问题。 假设您用于连接Columnstore的用户称为“myuser”。以root身份运行以下命令:

-- if necessary replace % below with localhost or whatever IP you use for the connection
GRANT ALL PRIVILEGES ON `infinidb_vtable`.* TO 'myuser'@'%';
FLUSH PRIVILEGES;

现在尝试再次使用'myuser'连接,无论您使用的是DBeaver还是其他任何客户端。您应该能够运行插入。

答案很长:

首先,让我们回顾一下正确的create table语法,因为在定义自动增量字段时,Columnstore和Innodb之间的区别是不同的:

-- Columnstore syntax
CREATE TABLE schema.mytable
(
  deaf_id bigint NOT NULL COMMENT 'autoincrement=1',
  name varchar(80) NOT NULL,
  country varchar(14) NOT NULL
) ENGINE=ColumnStore;

-- InnoDB syntax
CREATE TABLE schema.mytable
(
  deaf_id bigint NOT NULL AUTO_INCREMENT,
  name varchar(80) NOT NULL,
  country varchar(14) NOT NULL,
  PRIMARY KEY (`deaf_id`)
) ENGINE=InnoDB;

不要混淆它们,因为您可能会收到错误或意外结果。

你所描述的问题在过去也给我带来了一些麻烦。以下错误非常具有误导性:

  

SQL错误[1364] [HY000] :( conn:4)字段'deaf_id'没有   默认值

如果您尝试运行:

select * from mytable;

你会得到一个更有用的错误:

  

错误1044(42000):拒绝用户'myuser'@'%'访问数据库'infinidb_vtable'

基于此错误,我发现此页面提供了详细解释:

https://mariadb.com/kb/en/mariadb/columnstore-database-user-management/

所以,只需运行我在答案开头写的GRANT,你的问题就解决了。不要忘记在您希望能够访问Columnstore表的所有用户上运行相同的授权。

在完成之前作为简短的建议.. 想一想是否要使用Columnstore或坚持使用MySQL / MariaDB InnoDB。 我们目前正在进行Columnstore评估。当谈到巨型桌子的选择速度时,它向我们展示了一些非常令人印象深刻的表现。我怀疑即使经过精心的调整,我也无法获得MySQL / MariaDB的一半性能。

但Columnstore有其自身的缺点。我想提到其中两个给我们带来一些麻烦的事情:

  • 插入速度很慢(根据我们的一些测试,比在simo InnoDB表上慢20倍)

  • Columnstore尚未成熟,因此有时会让您头疼

请仔细选择数据库引擎。

[编辑:]

我忘了提到我正在谈论MariaDB Columnstore 1.0.9。未来版本可能会显示不同的语法/行为等。