MySQL 触发器 存储过程 一点小用
同事离职,又一个一个烂摊子要收拾。这里修修,那里补补都没有精力来写点东西。
明天回家,上午整理好文档。下午决定抽点时间,把最近的东西尽量理一理。很多灵感都已经遗忘。我们总在不断面对,所以我们不断遗忘。【syslog、mysql优化、触发器、存储过程、文件读写……】疯狂的Google着这些关键词,以求在对项目整体改动最小、影响最小情况下完成这些工作。
过程很痛苦,今天这篇算是痛定思痛吧!
在技术可行的情况下,优雅的设计永远很重要,否则就不断痛苦吧。(思考,成熟的思考一定在行动之前)
言归正传:触发器、存储过程可以理解一些预先编写好的函数,存储在数据库服务器上。触发器关联到具体表,对一张数据表进行插入、更新、删除这三类操作前、操作后都可以做一些事情,比如:删除某张表一条记录后,可以同时删除一张相关表中的对应记录。而这些工作都会由数据库自动完成。
一个例子:
DELIMITER ;;
TRIGGER `targetTest` AFTER INSERT ON `tbl_1` FOR EACH ROW BEGIN
if not exists (select id from tbl_2 where name=NEW.name) then
INSERT INTO tbl_2 (`name`,`record`) VALUES (NEW.name,'1');
else
UPDATE tbl_2 SET record=record+1 WHERE name=NEW.name;
end if;
END */;;
DELIMITER ;
说明:上面例子实现功能,向表tbl_1中插入一条数据之后,判断tbl_2中有没有此记录,如果没有插入一条新的记录到tbl_2,如果有对应name则更新一下tbl_2的record字段。(触发器语法解释可以Google其他资料)
存储过程,一段编写好的SQL语句可以封装成函数,直接调用:
一个例子:
DELIMITER $$
CREATE DEFINER=`xxx`@`localhost` PROCEDURE `pro_test`(e_table varchar(1000),e_filename varchar(1000),e_condition varchar(1000))
begin
SET @sql = CONCAT('select * into outfile "',e_filename, '" from ',e_table);
IF e_condition IS NOT NULL AND e_condition <> '' THEN
SET @sql = CONCAT(@sql,' where ',e_condition);
END IF;
PREPARE record from @sql;
EXECUTE record;
DEALLOCATE PR
相关文档:
假如我有个user表,我想查询符合某些条件的第50个用户开始的10个用户,且不能使用id号between and那样查询,应该怎么写SQL语句?
在mysql数据库中有limit,offset语句可以方便的实现,那么在SQL server中呢?SQL Server是否支持limit和offset语句呢?
select top 10 * from
(select top 60 * from [user] order by userid) a ......
准备:下载Mysql5.1<mysql-essential-5.1.41-win32.msi>
安装:step by step
测试:1.MySQL测试
点开MySQL Command Line Client, 输入安装时建立的密码。
mysql>show databases;
mysql>use <<database name>>;
mysql>show tables;
mysql>select * from <<table name>>;
......
mastering Phpmyadmin
Beginning Php And Mysql程序设计
Beginning PHP and MySQL from Novice to Professional 3rd Edition
Head First PHP MySQL
MySQL入门经典
MySQL Stored Procedure Pr ......
mysql 明明已经装好了,但是无法访问。链接的时候 总是说
Access Denied.
解决方法:
用mysqld --skip-grant-table启动mysql
然后在mysql库中执行这个
INSERT INTO user VALUES ('localhost', 'root', PASSWORD('some_pass'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y', ......
MySQL Java 开发套装(服务器,管理工具,JDBC驱动,示例代码)
小更新: 为了减轻负担, 用 MySQL-Front 2.5 来管理, 这个软件无中文问题. 如果以后开源版本HeidiSQL的解决了中文问题, 就用开源的.
下载: http://tomcatmonitor.googlecode.com/files/portable_mysql5.exe 4.02MB (自解压包)
参考文档: MySQL 5 绿色 ......