我最近从MSSQL转到了MySQL。
我想使用MySQL 5.5存储例程中的表变量(或等效变量)来填充联机报告的数据集。
在MS SQL中,我会这样做
...
...
DECLARE @tblName TABLE
WHILE <condition>
BEGIN
Insert Row based on iteration value
END
...
...
据我所知,我不能在MySQL中声明表变量(如果我错了,请纠正我)如何在MySQL存储过程中实现上述逻辑?
我对mysql不是很了解。所以如果这是个愚蠢的问题请原谅。
我今天接到了一个来自我的DBA的电话,我的应用程序创建的临时表数量激增。
但我没有显式地创建任何临时表。
在故障排除后,我们发现每次在子查询中使用文本colomn时,都会创建一个临时表。
作为开发人员,使用子查询和文本列创建临时表使我感到困惑。
我的问题是,作为开发人员,我如何理解查询何时会创建临时表(在后台)。
我做了一些搜索,发现我可以做一些类似的事情
show GLOBAL status like 'created_tmp_disk_tables'
但它告诉我什么呢?如何知道我的查询是否导致了临时表。
考虑到在连接到ODBC的客户端应用程序中有一长串键,那么在MySql中处理许多行的好方法是什么?
注意:我的经验主要是Server,所以我知道一点,只是不知道具体的MySQL。
任务是从9个表中删除一些行,但我可能有5000对以上的密钥对。
首先,我使用了一种简单的方法,可以循环遍历所有键,并针对每个表为每个键提交一条语句,例如:
DELETE FROM Table WHERE Key1 = 123 AND Key2 = 567 -- and 8 more tables
DELETE FROM Table WHERE Key1 = 124 AND Key2 = 568 -- and 8 mor
我希望在MySQL中创建一个视图,以便数据分析用户能够轻松地过滤大量数据,但是当我创建一个具有任何分组的视图时,整个视图都会被扫描,使得该视图在性能上毫无用处。
一个简单的例子
值表-约35亿行,每月分区
SELECT
Timestamp,
DeviceId,
SUM(Entry)
FROM Value v
WHERE DeviceId = 123456 AND Timestamp >= '2020-08-01'AND Timestamp <= '2020-08-30'
GROUP BY Timesta
我希望能够在Mysql中轻松地调试我的脚本,就像在MSSQL中那样(运行脚本的一部分然后验证表等等),但是临时表不会被保存在服务器上。例如:
CREATE temporary table a(i int);
INSERT INTO a VALUE (1);
SELECT * FROM a;
如果运行整个脚本,它将返回正确的结果,但如果我在insert上按语句运行它,则会得到以下错误:
SQL.sql:错误(2,13):表'test.a‘不存在
我想这是一个服务器配置问题。
我把我的问题归结为这个简单的SP。列名被缓存在末尾的SELECT *中。我不知道为什么,也不知道怎么阻止它。我试着添加SQL_NO_CACHE,但这并没有什么不同。
DROP TABLE IF EXISTS foo;
CREATE TABLE foo(
col1 int,
col2 int);
INSERT INTO foo VALUES(1,2),(3,4),(5,6);
DROP PROCEDURE IF EXISTS mysp;
DELIMITER ;;
CREATE DEFINER=root@localhost PROCEDURE mysp(c INT)
BEGIN
DROP T
我想在名为data的引用上建立全文索引
SELECT `data` FROM (
SELECT `body` as `data` FROM `table1`
UNION
SELECT `text` as `data` FROM `table2`
) as `search`
我们假设两个使用联合的SQL语句创建了一个虚拟表,从中选择了data,如何使data表现得像全文索引一样,以便稍后在第一个SELECT语句中使用MATCH() AGAINST()?
使用MySQL,我得到了表
表1
Id D
--------
A 100
A 125
A 50
B 50
B 25
C 5
C 50
C 50
我需要新的表:哪个sum ID是where =ID的
表新
Id D
--------
A 275
B 75
C 105
如何使用带ID的游标执行此操作?
如何使用joins和临时表?
我有一组csv文件要导入到mysql中,并且我在对数据进行排序时犯了一些错误。我需要在不更新整个表的情况下对表中的特定行进行大量更新(对表进行了一些更改,重新导入所有内容将恢复这些更改)。
这是我用来导入csv文件的命令:
LOAD DATA LOW_PRIORITY LOCAL INFILE 'C:\\location\\of\\CSVs\\import.csv'
REPLACE INTO TABLE `database`.`contacts` CHARACTER SET utf8
FIELDS TERMINATED BY ','
OPTIONALLY