标签: mariadb-10.3

什么是“隐形列”以及如何使用它们?

我在 MariaDB 10.3.x 中看到了一个新功能Invisible Columns。DBA 和 Web 开发人员的实际用例是什么?什么时候使用这个功能?

可以INVISIBLECREATE TABLEorALTER TABLE语句中为列指定属性。这些列将不会列在语句的结果中SELECT *,也不需要在 INSERT语句中为它们分配值,除非INSERT通过名称明确提及它们。

由于SELECT *不返回不可见列,因此以这种方式创建的新表或视图将不会有不可见列的痕迹。如果在语句中特别引用SELECT,列将被带入视图/新表,但INVISIBLE 属性不会。

不可见列可以声明为NOT NULL,但随后需要一个 DEFAULT

mariadb terminology mariadb-10.3

6
推荐指数
1
解决办法
5596
查看次数

将字符集 utf8mb4 的默认排序规则更改为 utf8mb4_unicode_ci

在不指定字符集或排序规则的情况下创建数据库时,将使用服务器默认值(如预期)。

MariaDB [(none)]> SHOW VARIABLES LIKE '%_server' ;
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| character_set_server | utf8mb4            |
| collation_server     | utf8mb4_unicode_ci |
+----------------------+--------------------+

MariaDB [(none)]> CREATE DATABASE `test-without-charset` ;
MariaDB [(none)]> SELECT `DEFAULT_COLLATION_NAME` FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME` LIKE 'test-without-charset';
+------------------------+
| DEFAULT_COLLATION_NAME |
+------------------------+
| utf8mb4_unicode_ci     |
+------------------------+
Run Code Online (Sandbox Code Playgroud)

但是,在CREATE DATABASE-query 中指定字符集时,默认排序规则更改为utf8mb4_general_ci.

MariaDB [(none)]> CREATE DATABASE `test-with-charset` CHARACTER SET utf8mb4 ;
MariaDB [(none)]> SELECT `DEFAULT_COLLATION_NAME` FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME` LIKE 'test-with-charset';
+------------------------+
| DEFAULT_COLLATION_NAME …
Run Code Online (Sandbox Code Playgroud)

mariadb collation character-set mariadb-10.3

6
推荐指数
1
解决办法
8731
查看次数

MariaDB 或 MySQL 是否实现了 VALUES(表达式)表值构造函数?

我只是想知道 MariaDB 或 MySQL 是否<table value constructor>在 SQL 规范中实现了。在SQL ServerPostgreSQL 中,这是通过标准化的VALUES (expression)?

SELECT *
FROM ( VALUES (1) ) AS t(x);
 x 
---
 1
(1 row)
Run Code Online (Sandbox Code Playgroud)

(来自语法)。

mysql mariadb sql-standard mariadb-10.3

5
推荐指数
1
解决办法
3315
查看次数

如何使用生成列获取 mysqldump?

我在导入转储时遇到以下错误,

第 82 行出现错误 3105 (HY000):不允许为表“table_name”中的生成列“column_name”指定值。

当我描述错误的表时,其中有一些生成的列。

选项类型 | varchar(45) | varchar(45) | 是的 | 乘法 | 空| 虚拟生成

为数据库包含生成的列进行 mysql 转储时使用的正确命令是什么?

MySQL服务器源和目标版本:

mysqld 版本 5.7.26,适用于 x86_64 上的 Linux(MySQL 社区服务器 (GPL))

MariaDB mysqldump CLI 版本:

mysqldump 版本 10.17 Distrib 10.3.12-MariaDB,适用于 Linux (x86_64)

mysqldump mysql-5.7 mariadb-10.3

5
推荐指数
1
解决办法
1万
查看次数

如何为 mariaDB 获取更多连接或如何减少每个线程的 RAM 使用量?

我们有一个 MariaDB 10.3 数据库服务器,运行在 8 核和 64GB RAM 的机器上。数据库引擎是innoDB。我们当前的max_connections = 175数据库管理员告诉我,不可能进一步增加连接数量(至少在不增加物理 RAM 等的情况下不可能)。

我们有一个高负载场景,需要将数量从 175 增加到 350。通过“调整”下面的数字可以吗?

我的直觉是,通过优化数据库设置,应该可以实现更多功能。从评论来看,我们的管理员似乎确实运行了 MySQL Tuner。在与他交谈时,我想提出一些改进建议,因此我对 SO 社区对我们设置的意见很感兴趣。

# Memory-Sizing
open-files-limit                = 16384
table_cache                     = 8192
thread_cache_size               = 32
max_allowed_packet              = 128M
myisam_sort_buffer_size         = 32M
key_buffer_size                 = 128M
tmp_table_size                  = 1G
max_heap_table_size             = 1G
query_cache_type                = 1
query_cache_size                = 16M
query_cache_limit               = 16M
sort_buffer_size                = 8M
read_buffer_size                = 1M
read_rnd_buffer_size            = 512K

# InnoDB
innodb_open_files               = 16384
innodb_strict_mode              = 1
innodb_log_file_size            = 6G
innodb_log_buffer_size …
Run Code Online (Sandbox Code Playgroud)

mysql mariadb mariadb-10.3

2
推荐指数
1
解决办法
2094
查看次数

插入前删除数据

我有这个表,用于生成带有结果的第二个表:

INSERT INTO payment_transactions_daily_facts (count, volume, date, year, month, week, day, transaction_type, contract_id, merchant_id, terminal_id, status, card_brand, currency)
SELECT
        COUNT(*) count,
        SUM(amount) volume,
        DATE(created_at) date,
        YEAR(created_at) year,
        MONTH(created_at) month,
        WEEK(created_at) week,
        DAY(created_at) day,
        type transaction_type,
        contract_id, merchant_id, terminal_id,
        status, card_brand, currency
        FROM payment_transactions
        WHERE created_at BETWEEN '2018-11-11' AND '2018-11-14'
        GROUP by date, contract_id, merchant_id, terminal_id, transaction_type, status, card_brand, currency
Run Code Online (Sandbox Code Playgroud)

但是我需要在插入之前删除旧数据。有没有办法用一个 SQL 先删除从某个日期开始的表数据,然后再插入一个新的?

mysql mariadb insert mariadb-10.3

0
推荐指数
1
解决办法
3326
查看次数

查询连接四个表导致一行

我有这两个查询,它们从四个表中提取数据:

select files.id, files.name, dirs.dir
from files
inner join dirs on dirs.id = files.idDir
where files.id = 45

select label
from labels
inner join labels_files on labels_files.idLabel = labels.id
where labels_files.idFile = 45
Run Code Online (Sandbox Code Playgroud)

第一个查询返回 1 行。第二个查询返回 1 个或多个 row/s

我的目标是在结果集中获得一个查询和一行。说:

--------------------------------------------------
45 | test.txt  |  /home  | label1, label2, labeln |
--------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我想我应该尝试派生表,但一直在尝试无济于事。

mariadb join mariadb-10.3

-1
推荐指数
1
解决办法
66
查看次数