易截截图软件、单文件、免安装、纯绿色、仅160KB

MySQL触发器解决方案历程

最近,项目中用到mysql,由于数据量非常大,每天的数据量在百万级,考虑到mysql数据库处理性能以及数据属性,决定保存足够多的查询数据即可,距当前时间最久远的数据直接删除,无需进行备份。
头脑中冒出的第一个想法就是,能否利用mysql中的触发器,检查数据表大小,如果超过预设长度,则删除部分数据。
CREATE TRIGGER tg AFTER INSERT ON traffic_info
FOR EACH ROW BEGIN
...
DELETE from traffic_info WHERE time <= "..."
...
END;
执行后出现如下错误:
ERROR 1442 (HY000): Can't update table 'traffic_info' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
原来,目前MySQL触发器还不支持删除触发器所在的表的数据,ok,我原始的想法是每个数据表自己管理表大小,现在看来是行不通了。
第二个想法是干脆用存储过程得了,手动调用存储过程来更新所有表的大小,考虑到数据表很多,想协议个接受数据表名为参数的存储过程:
CREATE PROCEDURE P(IN table_name VARCHAR(50), IN max_count INT)
READS SQL DATA
BEGIN
...
SELECT COUNT(1) from table_name
...
END;
这种做法行不通,mysql会将“table_name”字符串作为表名,搜索后发现,需要用到mysql新特性prepare,不过需要注意的是,就算是利用prepare,还是无法直接传入数据表名,需要利用CONCAT事先连接查询字符串:
CREATE PROCEDURE P(IN table_name VARCHAR(50), IN max_count INT)
READS SQL DATA
BEGIN
...
SET @query_str = CONCAT("SELECT COUNT(1) from ", table_name);
PREPARE stmt from @query_str
EXECUTE stmt;
...
END;
总算是送了一口气,可是又发现,我需要在存储过程中动态获取PREPARE查询的返回结果,但是,目前mysql还无法做到这一点,真是让人失望,看来只能另觅它途了……
时间仓促,今是为记


相关文档:

忘记mysql root 密码的修改方式

如果忘记mysql的密码,可以用以下的方式进行修改:
我用的mysql是5.1的server
在windows下:
打开命令行窗口,停止mysql服务:Net stop mysql
到mysql的安装路径启动mysql,在bin目录下使用mysqld.exe启动,在命令行窗口执行:mysqld --skip-grant-tables
然后另外打开一个命入令行窗口,执行mysql,此时无需输入密码 ......

在WebLogic 9中配置MySql的数据源

第一步,下载Mysql的JDBC驱动程序,名为connectorJ。下载网址:http://dev.mysql.com/downloads/connector/j/
解压缩zip文件后,将文件mysql-connector-java-5.1.12-bin.jar到目录d:\Software\MySQL\MySQL Server 5.1\jdbcdriver\中
第二步,修改文件d:\Software\bea\WebLogic 9.23\user_projects\domains\MyDomain\bin\s ......

Linux下Apache2+MySQL5+PHP5安装

安装环境:VMware Workstation 5.5.0 build-18463
Linux版本:Red Hat Enterprise Linux AS (2.6.9-42.EL)
软件版本:MySQL5 - mysql-5.0.37.tar.gz
     Apache2 - httpd-2.2.4.tar.gz
     PHP5 - php-5.2.1.tar.gz
     (将以上文件保存至/home/tmp目录)
[MySQL]
# cd /home/tmp (进入压缩包 ......

用 PHP 调用 MySQL 存储过程

    MySQL 5.0 以上支持存储过程。
    PHP 5.0 以上的 mysqli 系列函数可以支持操作 MySQL 的存储过程。
    以下是一些简单的存储过程和用 PHP 调用的示例。     一、返回单个数据: 1: <?php
2: header("Content-Type:t ......

mysql中的SQL分析工具

Another Look at MySQL 5.1's SQL Diagnostic Tools
http://dev.mysql.com/tech-resources/articles/mysql_51_diagnostic_tools.html 数据库的性能决定因素:
(1)数据库的设计
(2)SQL代码 可以用以下几种方法来解决一些性能问题:
(1)索引
(2)水平分区
(3)列适应的表
colum ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号