gpt4 book ai didi

mysql - Mariadb columnstore 自动增量不起作用

转载 作者:行者123 更新时间:2023-11-29 06:02:06 26 4
gpt4 key购买 nike

我正在尝试使用 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 Error [1364] [HY000]: (conn:4) Field 'deaf_id' doesn't have a default value

但是使用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

这有什么已知问题吗?还是我遗漏了什么?

克莱森里奥斯。

最佳答案

简答:

不是客户端或驱动程序问题。这是一个 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 还是其他客户端。您应该能够运行插入。

长答案:

首先,让我们回顾一下正确的创建表语法,因为在定义自动增量字段时,它们在 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 Error [1364] [HY000]: (conn:4) Field 'deaf_id' doesn't have a default value

如果你尝试运行:

select * from mytable;

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

ERROR 1044 (42000): Access denied for user 'myuser'@'%' to database 'infinidb_vtable'

基于这个错误,我找到了这个页面,它给出了详细的解释:

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

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

作为完成前的简短建议..三思而后行,是要使用 Columnstore 还是坚持使用 MySQL/MariaDB InnoDB。我们目前正在进行 Columnstore 评估。当涉及到大表的选择速度时,它向我们展示了一些非常令人印象深刻的性能。我怀疑即使经过精心调优,我能否通过 MySQL/MariaDB 获得一半的性能。

但 Columnstore 有其自身的缺点。我会提到其中两个让我们有些头疼的问题:

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

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

因此请谨慎选择您的数据库引擎。

[编辑:]

我忘了说我说的是 MariaDB Columnstore 1.0.9。 future 的版本可能会显示不同的语法/行为等。

关于mysql - Mariadb columnstore 自动增量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44189252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com