Questions tagged «mysql»

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

2
为什么mysql使用错误的索引来按查询排序?
这是我的表,具有约10,000,000行数据 CREATE TABLE `votes` ( `subject_name` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `subject_id` int(11) NOT NULL, `voter_id` int(11) NOT NULL, `rate` int(11) NOT NULL, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`subject_name`,`subject_id`,`voter_id`), KEY `IDX_518B7ACFEBB4B8AD` (`voter_id`), KEY `subject_timestamp` (`subject_name`,`subject_id`,`updated_at`), KEY `voter_timestamp` (`voter_id`,`updated_at`), CONSTRAINT `FK_518B7ACFEBB4B8AD` FOREIGN KEY (`voter_id`) REFERENCES `users` (`id`) ) …

4
如何禁用烦人的MySql更新控制台
我已经安装了mysql 5.7,并且有时(每隔几天一次)会查找更新(据我了解)。控制台窗口将打开几秒钟,然后消失。不在乎,这次我正在看电影,并且此控制台位于播放器的顶部。真的很烦人,为什么MySql以这种用户不友好的方式进行更新?我可以配置它以静默方式进行吗?
9 mysql  windows 

1
MySQL->遍历表,在每个条目上运行存储过程
我有一个包含“书籍”(儿童短篇小说)的数据库,对书籍中每个单词的字数统计将非常有用。 我想出了如何使用以下方法获得每个单词的单词计数: SELECT SUM ( ROUND ( (LENGTH(pageText) - LENGTH (REPLACE (pageText, "Word", ""))) /LENGTH("Word") ) ) FROM pages WHERE bookID = id; 这对于计数单词非常有用。但是,这需要我仔细阅读每本书,找出每个单词,然后通过该功能运行它(我将其保存为存储过程。) 我有一个包含每个单词的表格,没有重复。 我的问题:有没有办法使用存储过程在Words表上执行某种“ for each”循环? 即。向存储过程传递一个书ID和一个单词并记录结果。为每本书做每个字。这样可以节省大量的手动时间...这甚至是我应该从数据库方面做的事情吗?我应该用PHP代替吗? 老实说,任何输入都将不胜感激!

2
在MySQL 5.5中具有类似PostgreSQL的部分索引
我有大数据,一次只能选择一小段数据,因此选择总是按顺序进行的。我正在尝试针对此类目的在MySQL中实现像部分索引这样的PostgreSQL。我不确定部分唯一约束是否与我想要的约束相同。 PostgreSQL 9.4中的代码 CREATE UNIQUE INDEX dir_events ON events (measurement_id) USING btree (eventBody) WHERE is_active; 在MySQL中尝试ypercube的部分索引 CREATE UNIQUE INDEX dir_events [index_type] -- TODO what here? ON events (measurement_id, is_active) [index_type] -- TODO what here? 如何在MySQL 5.5或类似版本中创建类似PostgreSQL的部分索引?
9 mysql  index 

2
为什么mysql密码哈希在内部用星号(星号)保存?
我正在阅读一些mysql内部知识,当通过我的mysqlshell中的mysql.user表时,我得到了 mysql> select * from mysql.user limit 1 \G *************************** 1. row *************************** Host: localhost User: root Password: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B 密码显然是散列的,但是为什么要以星号(星号)开头?

2
授予对视图的权限,拒绝对表的选择
我有一个MySQL用户,我希望它仅查看所需的视图,而不查看数据库中的任何其他表。我仅在某些视图上授予此用户权限,如下所示: GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%' 如果我show grants;发表声明,我只能按预期看到此权限。但是,我希望该用户仅查询视图,而不查询与这些视图相关的表,但是我找不到解决方法。似乎是如果我希望用户在视图上进行选择,则还必须为表授予选择权,否则我错了吗? 如果我select在其余表中拒绝该语句,并且在命令行中尝试进行选择,则会得到以下信息: SELECT * FROM myDatabase.fordibenForYouTable; ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable' 那确实是我想要的,但是如果选择视图数据,我也会被拒绝。 有没有一种方法可以让用户只使用视图而不是表?

3
在MySQL中批量删除大型表
我有一个Notification表,其中包含1000个IOPS的Amazon RDS中的大约1亿行主机,我想删除一个月以上的行。 如果这样做DELETE FROM NOTIFICATION WHERE CreatedAt < DATE_SUB(CURDATE(), INTERVAL 30 day);,将使用所有IOPS,整个过程将花费数小时,并且由于“超出了锁定等待超时;尝试重新启动事务”,因此无法插入许多新条目。 我试图按照此处描述的方式进行操作:http : //mysql.rjweb.org/doc.php/deletebig 但是,我使用的是UUID而不是增量ID。 在不影响正在插入/更新的新数据的情况下,删除这些行的正确而有效的方法是什么?

5
PostgreSQL相当于MySQL查询变量?
有没有一种直接的方法可以将这些类型的MySQL查询改编为PostgreSQL: 在MySQL中设置变量 set @aintconst = -333 set @arealconst = -9.999 好像没有。 从SELECT查询分配变量,然后在我的SQL中使用这些变量,例如: select @pfID := id from platform where bios like '%INTEL%' select @clientID := id from client where platformID = @pfID 我非常感谢指针,尤其是在(2)上。

2
选择查询花费的时间超过了原先的时间
我有一个具有近2300万条记录的MySQL数据库表。该表没有主键,因为没有唯一的键。它有2列,均已索引。下面是它的结构: 以下是一些数据: 现在,我运行了一个简单的查询: SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001' 不幸的是,这花费了超过5秒钟才能检索数据并将其显示给我。我的未来表将有1500亿条记录,因此这一次非常高。 我运行Explain命令以查看发生了什么。结果如下。 然后,我使用以下命令运行配置文件。 SET profiling=1; SELECT `indexVal` FROM `key_word` WHERE `hashed_word` = '001'; SHOW profile; 以下是分析的结果: 以下是有关我的表格的更多信息: 那么,为什么要花这么长时间?他们也被索引!将来,我必须运行很多LIKE命令,因此这会花费太多时间。出了什么问题?

1
Amazon RDS上的数据库连接过多
用户在Drupal中运行查询/视图时遇到问题,有时会导致我们的网站冻结。发生冻结是因为查询导致数据库连接数增加到400个以上,并且基本上在站点超过100个数据库连接的任何时候,站点都会严重减速,并且没有响应。 我们正在使用MySQL Red Hat Linux运行Amazon RDS 我们的前端应用服务器上有足够大的EC2,还有足够大的RDS。 我们现在解决此问题的方法是找到有问题的查询,然后将其杀死。一旦查询被终止,我们的数据库连接将下降到20左右,这是监视站点统计信息时看到的正常数量。 有没有办法停止令人讨厌的查询并在它运行太长时间并消耗连接之前将其杀死?我试图在错误查询发生之前自动将其杀死,或者至少在30秒后意识到错误查询并将其杀死。

4
如何通过Linux终端创建mysql存储过程
在mysql控制台中,我们将使用delimiter命令更改定界符,这对定义过程很有用。我了解 delimiter仅适用于mysql客户端的命令(客户端命令)。 但我使用不具有该命令的MySQL客户端delimiter 一样dbslayer,对这种客户我该怎么定义程序。 现在考虑: create procedure test_pro() begin select 'hello pro'; end 我尝试了以下方法: mysql -u root -pmypass test < proc_file 其中proc_file包含以上过程; 但这给了我以下错误: ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right …

6
MySQL-错误1045(28000):用户被拒绝访问
我刚刚在新计算机上安装了Ubuntu 10.04.2 LTS的新副本。我以root身份登录MySQL: david@server1:~$ mysql -u root -p123 我创建了一个名为repl的新用户。我将主机保留为空白,因此新用户可以从任何位置访问。 mysql> CREATE USER 'repl' IDENTIFIED BY '123'; Query OK, 0 rows affected (0.00 sec) 我检查了用户表以验证是否正确创建了新用户repl。 mysql> select host, user, password from mysql.user; +-----------+------------------+-------------------------------------------+ | host | user | password | +-----------+------------------+-------------------------------------------+ | localhost | root | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | server1 | …
9 mysql 


4
MySQL为什么会产生这么多临时MYD文件?
在托管许多PHP / MySQL网站(照相馆)的Debian Linux服务器上,有时我有“许多”文件,例如/tmp/#sql_6405_58.MYD。 例如今天: [2012-12-15 15:18:11] /tmp/#sql_6405_6.MYD : 88MB [2012-12-15 15:18:11] /tmp/#sql_6405_3.MYD : 22MB [2012-12-15 15:18:11] /tmp/#sql_6405_4.MYD : 138MB [2012-12-15 15:18:11] /tmp/#sql_6405_10.MYD : 88MB ... [2012-12-15 15:18:11] /tmp/#sql_6405_9.MYD : 15MB [2012-12-15 15:18:11] /tmp/#sql_6405_65.MYD : 49MB [2012-12-15 15:18:11] /tmp/#sql_6405_44.MYD : 69MB (同时59个文件,超过6GB ...是的,我监视/ tmp中的大文件) 不幸的是,/tmp它位于同一个分区,/并且临时中断了Web服务器,因为/我想它已满。然后文件消失,服务器恢复正常。 所有文件名都遵循该#sql_6405_*.MYD模式。我想了解哪个MySQL操作意味着这么多的临时文件。我在此服务器上大约有2000个数据库。是否可以知道与哪个数据库有关?

3
如何用LIMIT计算行数?
我想捕获X行,因此,我设置了LIMIT X;但是我又如何同时计算总行数呢? 目前,我使用两个单独的查询来执行以下操作: SELECT COUNT(*) FROM col WHERE CLAUSE SELECT * FROM col WHERE CLAUSE LIMIT X 有没有办法在一个查询中做到这一点? 编辑:输出应为col单元格和行数。实际上,在选择了col单元格之后,它应该遍历表格进行计数。 我知道不可能合并这两个查询,因为第一个返回1行,但是第二个返回X行。我很好奇mysql中是否有一个函数在存在时返回行数LIMIT。

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.