从 MySQL 手册,它说:
布尔值,布尔值
这些类型是 TINYINT(1) 的同义词。零值被认为是错误的。非零值被认为是真的:
我创建了一个 BOOLEAN 列0
作为默认值。然后我将值更新为2
. 从逻辑上讲,我希望 MySQL 接受0
或者1
因为它是一个布尔值。但是,MySQL 没有发出错误或阻止我执行更新。
如果 BOOLEAN 的工作方式与 TINYINT(1) 完全相同,那么我使用 TINYINT(1) 还是 BOOLEAN 有什么区别吗?
auto_increment
在使用存储过程执行批量插入后,我在 Bids 表的 bidID 中记录的值中看到了这种奇怪的行为,我感到非常不安:
INSERT INTO Bids (itemID, buyerID, bidPrice)
SELECT itemID, rand_id(sellerID, user_last_id), FLOOR((1 + RAND())*askPrice)
FROM Items
WHERE closing BETWEEN NOW() AND NOW() + INTERVAL 1 WEEK ORDER BY RAND() LIMIT total_rows;
Run Code Online (Sandbox Code Playgroud)
例如,如果开始时的auto_increment
bidID 值为 101,并且我插入了 100 行,则结束值变为 213 而不是 201。但是,这些插入行的 bidID 依次运行,最多为 201。
检查以下内容后,
SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会这样。什么可能导致auto increment
价值的跳跃?
我从一个示例配置文件中读取了以下内容:
# Sort buffer is used to perform sorts for some ORDER BY and GROUP BY
# queries. If sorted data does not fit into the sort buffer, a disk
# based merge sort is used instead - See the "Sort_merge_passes"
# status variable. Allocated per thread if sort is needed.
Run Code Online (Sandbox Code Playgroud)
我有几个使用文件排序的查询。如何确定查询在不碰到磁盘的情况下顺利运行所需的缓冲区大小是多少?
我想备份我的网站,其中包含用户上传的图像和存储在 MySQL 数据库中的数据,以便它们在任何特定时间点始终保持一致。在寻找解决方案时,我发现这个应用程序 rsnapshot 可能适合该任务。在互联网上浏览了一些博客后,我意识到这实际上是使用 mysqldump 方法通过 backup_script 完成的:
backup_script ssh root@example.com "mysqldump -A > /var/db/dump/mysql.sql" unused2
backup root@example.com:/var/db/dump/ example.com/
Run Code Online (Sandbox Code Playgroud)
我不确定的是是否有必要在脚本中执行转储之前用读锁刷新所有表以确保数据库的一致性。如果是这样,这应该如何纳入?如果没有,为什么没有必要?
我正在探索 MySQL 5.5.18 版中不同数据库引擎的效率,以查看哪个最适合与 500 万行数据集的范围查询一起使用:
SELECT P.col1, P.col2, P.col3, P.col4, P.col5, P.col6, P.col7, P.col8, P.col9
, P.col10, P.col10 * R.col3 as 'combi'
FROM PRODUCT P INNER JOIN RATE R ON R.col2 = P.col2
WHERE P.col3 = 'y'
AND P.col4 >= 1000
AND P.col5 >= 5
AND P.col6 BETWEEN 10 AND 100
AND P.col7 >= 0
AND P.col8 >= 7
AND P.col9 >= NOW()
AND P.col10 * R.col3 BETWEEN 50 AND 80
ORDER BY P.col8 DESC LIMIT 100;
Run Code Online (Sandbox Code Playgroud)
基于对Stackoverflow 的 …
我需要在我的 Web 服务器上升级 MySQL。随时可能有许多用户连接到服务器,对数据库执行查询或更新,或将文件上传到服务器。除了提前通知系统将在一定时间内进行维护,我还应该怎么做才能避免在某些用户操作仍在进行时停止MySQL服务或服务器的情况,这可能导致损坏文件系统还是数据库?
我做了一个mysqldump
将所有数据库转储到一个.sql
文件中,然后安装了一个 mariadb 服务器。安装后没有错误。但是在恢复数据库后,我开始观察到以下两个错误:
[错误] 表 mysql.event 的定义不正确:位置 14 处的预期列 'sql_mode' 的类型设置为 ('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','IGNORE_BAD_TABLE_OPTIONS','ONLY_FULL_GROUP_TRABUNTIONED' ','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI', 'NO_AUTO_VALUE_ON_ZERO'、'NO_BACKSLASH_ESCAPES'、'STRICT_TRANS_TABLES'、'STRICT_ALL_TABLES'、'NO_ZERO_IN_DATE'、'NO_ZERO_DATE'、'INVALID_DATES'、'ERROR_FOR_DIVISION_、'_AUTOZERO_CREATEHIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH'), 发现类型集('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','GROUP_SUBTRAN_CREED','ONLY_BTRAIN_CREED','ONLY_BTRAIN_FLOAT' ','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_CAPACKESSL' 'STRICT_TRANS_TABLES','STRICT_AONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_SQLMY_OPTIONS','NO_SQLMYMY_OPTIONS3' ,'ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_AONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_SQLMY_OPTIONS','NO_SQLMYMY_OPTIONS3' ,'ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_A
[错误] 事件调度程序:初始化系统表时出错。禁用事件调度程序。
看起来mysql.event
表格中的某些东西被覆盖了。我没有创建任何事件,所以我没想到这里会受到任何影响。应该怎么做才能消除这个错误?
我计划将数据库迁移到新服务器。在过渡阶段,我不希望 Apache 用户能够向数据库写入任何内容。我有两个选择。
撤销写入权限:
REVOKE INSERT, UPDATE ON `mydb`.* FROM 'apache'@'localhost';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)将数据库设置为只读模式:
FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = 1;
Run Code Online (Sandbox Code Playgroud)选择其中之一是否有任何实际考虑?
我测试了几个简单的查询,如下所示:
SELECT COUNT(*) FROM Users WHERE courses='a';
Run Code Online (Sandbox Code Playgroud)
但没有一个被缓存。以下是缓存相关变量:
show variables like "%cache%";
+-------------------------------+----------------------+
| Variable_name | Value |
+-------------------------------+----------------------+
| aria_pagecache_age_threshold | 300 |
| aria_pagecache_buffer_size | 100000000 |
| aria_pagecache_division_limit | 100 |
| binlog_cache_size | 32768 |
| binlog_stmt_cache_size | 32768 |
| have_query_cache | YES |
| join_cache_level | 2 |
| key_cache_age_threshold | 300 |
| key_cache_block_size | 1024 |
| key_cache_division_limit | 100 |
| key_cache_segments | 0 |
| max_binlog_cache_size | 18000000000000000000 |
| …
Run Code Online (Sandbox Code Playgroud)