考虑到在连接到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中轻松地调试我的脚本,就像在MSSQL中那样(运行脚本的一部分然后验证表等等),但是临时表不会被保存在服务器上。例如:
CREATE temporary table a(i int);
INSERT INTO a VALUE (1);
SELECT * FROM a;
如果运行整个脚本,它将返回正确的结果,但如果我在insert上按语句运行它,则会得到以下错误:
SQL.sql:错误(2,13):表'test.a‘不存在
我想这是一个服务器配置问题。
我最近从MSSQL转到了MySQL。
我想使用MySQL 5.5存储例程中的表变量(或等效变量)来填充联机报告的数据集。
在MS SQL中,我会这样做
...
...
DECLARE @tblName TABLE
WHILE <condition>
BEGIN
Insert Row based on iteration value
END
...
...
据我所知,我不能在MySQL中声明表变量(如果我错了,请纠正我)如何在MySQL存储过程中实现上述逻辑?
我在mysql的datadir中找到了一些旧文件:
-rw-rw---- 1 mysql mysql 0 2012-10-09 09:39 #sql_263c_0.MYD
-rw-rw---- 1 mysql mysql 1.0K 2012-10-09 09:39 #sql_263c_0.MYI
-rw-rw---- 1 mysql mysql 0 2012-10-09 09:40 #sql_263c_1.MYD
-rw-rw---- 1 mysql mysql 1.0K 2012-10-09 09:40 #sql_263c_1.MYI
-rw-rw---- 1
我有一个MySQL存储例程,在这里我想使用一个临时数据表来存储中间结果。为了避免创建一个“正常”表,我想使用一个内存中的表,当例程执行完成后,这个表就会消失。我是一个MySQL新手,但我想这是个好办法:
DROP TABLE IF EXISTS MyInMemoryTable;
CREATE TABLE MyInMemoryTable ( numberField int ) ENGINE = MEMORY;
...
DROP TABLE IF EXISTS MyInMemoryTable;
我的例程只适用于一个用户,但是如果多个用户同时运行例程,我会感到紧张吗?
MyInMemoryTable
我有MySQL5.5,我创建了一个存储过程
CREATE DEFINER=`root`@`%` PROCEDURE `refresh_mobileTemp`()
BEGIN
DROP TABLE IF EXISTS mobileTemp;
CREATE TEMPORARY TABLE mobileTemp AS
(SELECT distinct
...
);
END
正在运行
call refresh_mobileTemp();
创建临时表。
然后我删除了临时表并创建了一个事件:
CREATE EVENT `schedulerMobileTemp`
ON SCHEDULE ev
我在MySQL中使用一个递归存储过程来生成一个名为id_list的临时表,但是我必须在后续的select查询中使用该过程的结果,所以我不能在过程中使用临时表.
BEGIN;
/* generates the temporary table of ID's */
CALL fetch_inheritance_groups('abc123',0);
/* uses the results of the SPROC in the WHERE */
SELECT a.User_ID
FROM usr_relationships r
INNER JOIN usr_accts