Questions tagged «mysql»

MySQL的所有版本(不是Microsoft SQL Server)。如果与此问题相关,还请添加特定于版本的标记,例如mysql-5.7。

4
是否真的有可能无法保证针对此特定的冗余派生表的顺序?
在与Lukas Eder的Twitter交谈中,我偶然发现了这个问题。 尽管正确的行为是将ORDER BY子句应用于最外层查询,因为在这里,我们没有在最外层查询中使用DISTINCT,GROUP BY,JOIN或任何其他WHERE子句,因此RDBMS为什么不通过传入的数据是否由内部查询排序? SELECT * FROM ( SELECT * FROM table ORDER BY time DESC ) AS t 至少在PostgreSQL上运行此示例时,对于内部查询和此派生表示例,您将获得相同的执行计划,以及相同的结果集。 因此,我认为规划器将只丢弃最外面的查询,因为它是多余的,或者只是传递内部表的结果。 有人认为情况可能并非如此吗?

2
在提交之前,InnoDB在哪里存储交易数据?
我做了使用一些测试READ_COMMITTED,并READ_UNCOMMITTED在家里,使用JDBC技术。 我看到它READ_UNCOMMITTED实际上可以读取未提交的数据,例如,来自尚未提交的某些事务的数据(可以执行UPDATE查询)。 问题 未提交的数据存储在哪里,以便一个READ_UNCOMMITTED事务可以从另一个事务中读取未提交的数据? 为什么READ_COMMITTED事务不可能读取未提交的数据,即执行“脏读”?哪种机制强制执行此限制?

2
在一个查询中更新具有不同值的多行
我试图了解如何用不同的值更新多行,但我不明白。解决方案无处不在,但对我来说似乎很难理解。 例如,将两个更新更新为1个查询: UPDATE mytable SET fruit='orange', drink='water', food='pizza' WHERE id=1; UPDATE mytable SET fruit='strawberry', drink='wine', food='fish' WHERE id=2; 我不了解CASE WHEN .. THEN ... END的工作原理以及如何使用它。 想知道是否有人可以帮助我。
12 mysql  update 

2
将character_set_client的值设置为utf8mb4
我正在尝试将我的数据库转换为utf8mb4遵循本指南。我已经设定: [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] init-connect='SET NAMES utf8mb4' collation_server=utf8mb4_unicode_ci character_set_server=utf8mb4 skip-character-set-client-handshake 但价值character_set_client并character_set_results仍然不会改变utf8mb4。 mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; +--------------------------+--------------------+ | Variable_name | Value | +--------------------------+--------------------+ | character_set_client | utf8 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary …
12 mysql  collation  utf-8 


3
MySQL复制-从属服务器持续落后于主服务器
我将MySQL-5.1.50与主从复制设置一起使用。 大多数情况下,从服务器落后于主机。 当我运行时show processlist;,没有查询花费很长时间。我也启用slow_log了。但是,它找不到任何运行缓慢的查询。 从服务器不断发出警报,提示复制时间比主服务器落后几秒钟。有时,延迟时间会增加。 我如何诊断问题的原因? 我需要紧急帮助,因为此问题在过去20天内一直持续存在。

2
一对一关系是否正常化?
考虑我们有大量的统计数据记录;例如20-30 INT列。最好将整个集合都保留在一个表中,因为它们都属于一条记录,还是创建另一个具有一对一关系的表。 前者的优点是避免JOIN并可以快速访问相应记录的所有统计数据。 后者的优点是使色谱柱保持整洁。第一列是读密集型的,第二列是写密集型的。当然,我认为它对性能没有显着影响,因为我将InnoDB与行级阻塞一起使用。 总的来说,我想知道为一条记录分离不同的数据集是否有用?


5
MySQL-用于InnoDB的ALTER TABLE的最快方法
我有一个要更改的InnoDB表。该表有约8000万行,并退出了一些索引。 我想更改其中一列的名称并添加更多索引。 最快的方法是什么(假设即使停机,我也可能会遭受痛苦-服务器是未使用的从属服务器)? 是“普通” alter table的最快解决方案吗? 此时,我只关心速度:)

2
我可以在一个查询中重命名MySQL ENUM列中的值吗?
假设我有一个带的数据库表ENUM('value_one','value_two')。我想将其更改为ENUM('First value','Second value')。我目前正在这样做,如下所示: ALTER TABLE `table` MODIFY `column` ENUM('value_one','value_two','First value','Second value'); UPDATE `table` SET `column`='First Value' WHERE `column`='value_one'; UPDATE `table` SET `column`='Second Value' WHERE `column`='value_two'; ALTER TABLE `table` MODIFY `column` ENUM('First value','Second value'); 有没有更有效的方式来做到这一点,例如,用一个做到这一点的方式 单一的 ALTER TABLE声明?

5
从一组值中,如何找到未存储在表的列中的值?
我有一个表,它可能存储数十万个整数 desc id_key_table; +----------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+---------+-------+ | id_key | int(16) | NO | PRI | NULL | | +----------------+--------------+------+-----+---------+-------+ 从程序中,我有大量的整数。我想看看上面的id_key列中没有这些整数中的哪个。 到目前为止,我已经提出了以下方法: 1)遍历每个整数并执行: select count(*) count from id_key_table where id_key = :id_key 当count为0时,表中缺少id_key。 这似乎是一种可怕的,可怕的方式。 2)创建一个临时表,将每个值插入临时表,然后在两个表上执行JOIN。 create temporary table id_key_table_temp …
12 mysql 

1
死锁报告中“锁定记录但不等待间隙”的含义
关于locks rec but not gap waitingTRANSACTION(1)中的含义,哪个正确? 已经授予间隙锁,正在等待聚集索引X锁? 已经授予聚集索引X锁,正在等待间隙锁? Transaction(1)中有31行。这些行的含义是什么?这代表间隙锁定吗? 0: len 4; hex 800c20d6; asc ;; .... 29: SQL NULL; 30: SQL NULL; 最新检测到的死锁报告 LATEST DETECTED DEADLOCK ------------------------ 2015-09-25 15:27:24 1b8084000 *** (1) TRANSACTION: TRANSACTION 5226928, ACTIVE 0 sec fetching rows mysql tables in use 1, locked 1 LOCK WAIT …
12 mysql  deadlock 

1
查看最后几个innodb僵局
我看到可以在mysql / innodb中查看最新的死锁,但是有没有办法查看过去的死锁?我们有两个僵局问题,一个很重要,另一个不重要。不太重要的死锁每天发生几次,因此它成为“最新的”死锁。

1
为什么在MySQL的FULLTEXT索引上,LIKE比MATCH…AGAINST快4倍以上?
我不明白这一点。 我有一张带有这些索引的表 PRIMARY post_id INDEX topic_id FULLTEXT post_text 表具有(仅)346 000行。我正在尝试执行2个查询。 SELECT post_id FROM phpbb_posts WHERE topic_id = 144017 AND post_id != 155352 AND MATCH(post_text) AGAINST('http://rapidshare.com/files/5494794/photo.rar') 需要4.05秒,而 SELECT post_id FROM phpbb_posts WHERE topic_id=144017 AND post_id != 155352 AND post_text LIKE ('%http://rapidshare.com/files/5494794/photo.rar%') 需要0.027秒。 EXPLAIN显示唯一的区别是possible_keys(fulltext包括post_text,LIKE没有) 真的很奇怪 这背后是什么?后台发生了什么事?LIKE不使用索引时怎么能这么快,而使用FULLTEXT时却那么慢呢? UPDATE1: 实际上,现在大约需要0.5秒,也许表已锁定,但是,当我打开分析时,它表明FULLTEXT INITIALIZATION花费了0.2秒。这是怎么回事? 我LIKE每秒查询表10次​​,全文查询2次 UPDATE2: 惊喜! …

1
如何在mysql中的复合主键上进行INDEX?
当为两个或更多列创建复合主键时,例如PRIMARY KEY(col1, col2, col3);系统会分别对INDEX每一列进行吗? 我问这个问题的原因是,当我们使用时UNIQUE INDEX (col1, col2, col3),它仅充当INDEX第一列,而我们需要INDEX为其他列创建其他。我想知道复合主键是否也是如此。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.