我在 MariaDB 10.3.x 中看到了一个新功能Invisible Columns。DBA 和 Web 开发人员的实际用例是什么?什么时候使用这个功能?
可以
INVISIBLE
在CREATE TABLE
orALTER TABLE
语句中为列指定属性。这些列将不会列在语句的结果中SELECT *
,也不需要在INSERT
语句中为它们分配值,除非INSERT
通过名称明确提及它们。由于
SELECT *
不返回不可见列,因此以这种方式创建的新表或视图将不会有不可见列的痕迹。如果在语句中特别引用SELECT
,列将被带入视图/新表,但INVISIBLE
属性不会。不可见列可以声明为
NOT NULL
,但随后需要一个DEFAULT
值
在不指定字符集或排序规则的情况下创建数据库时,将使用服务器默认值(如预期)。
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 或 MySQL 是否<table value constructor>
在 SQL 规范中实现了。在SQL Server和PostgreSQL 中,这是通过标准化的VALUES (expression)
?
SELECT *
FROM ( VALUES (1) ) AS t(x);
x
---
1
(1 row)
Run Code Online (Sandbox Code Playgroud)
(来自postgresql 的语法)。
我在导入转储时遇到以下错误,
第 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)
我们有一个 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) 我有这个表,用于生成带有结果的第二个表:
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 先删除从某个日期开始的表数据,然后再插入一个新的?
我有这两个查询,它们从四个表中提取数据:
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-10.3 ×7
mariadb ×6
mysql ×3
collation ×1
insert ×1
join ×1
mysql-5.7 ×1
mysqldump ×1
sql-standard ×1
terminology ×1