我正在尝试使用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。
答案 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。未来版本可能会显示不同的语法/行为等。