Archive

Archive for the ‘trigger’ Category

Mysql에서 Stored Procedure 사용 예제

June 28, 2007 Leave a comment

*where : http://www.phpschool.com/gnuboard4/bbs/board.php…

1. 테이블 생성
CREATE TABLE `TranTest` (
`num` int(11) NOT NULL auto_increment,
`col01` varchar(32) default NULL,
PRIMARY KEY (`num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `TranTest2` (
`num` int(11) NOT NULL auto_increment,
`col01` varchar(32) default NULL,
PRIMARY KEY (`num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. 입력 용 프로시저 생성
CREATE PROCEDURE `Prc_TranTest_Input`
(
in in_col01 varchar(32)
)
BEGIN
INSERT INTO TranTest SET col01 = in_col01;
END;

3. SELECT 용 프로시저 생성
CREATE PROCEDURE `Prc_TranTest_Select`
(
in in_col01 varchar(32)
)
BEGIN
SELECT num, col01 FROM TranTest WHERE col01 like concat(in_col01, ‘%’) ;
END;

4. Transaction 용 프로시저 생성
CREATE PROCEDURE `Prc_TranTest_InError`
(
)
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ”
BEGIN
DECLARE dbErr int default 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET dbErr = -1;
START TRANSACTION;
INSERT INTO TranTest SET col01 = ‘1234′;
INSERT INTO TranTest2 SET col012 = ‘1234′; //일부러 에러값을 내기위해 칼럼명을 다르게 적습니다.
IF dbErr < 0 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END;

5. PHP 를 이용하여 SELECT 및 입력하기
$mysqli = new mysqli(“localhost”, “USERID”, “USERPW”, “USERDB”);
if (mysqli_connect_error()) {
printf(“Connect Failed : %s\n”, mysqli_connect_error());
exit;
}
$mysqli->query(“set names utf8″);

//SELECT
if($qry = $mysqli->query(“Call Prc_TranTest_Select(‘123′)”)) {
$rs = $qry->fetch_object();
echo $rs->col01;
}

//INSERT TranTest;
$mysqli->query(“Call Prc_TranTest_InError()”);

What is Triggers? :: MySQL 5.0 Reference Manual :: 18 Triggers

March 4, 2007 Leave a comment

MySQL 5.0 Reference Manual :: 18 Triggers
Support for triggers is included beginning with MySQL 5.0.2. A trigger is a named database object
that is associated with a table and that is activated when a particular event occurs for the table.For example, the following statements create a table and an INSERT trigger.
The trigger sums the values inserted into one of the table’s columns:
………..
………..

트리거에 대한 지원은 MySQL 5.0.2버전에서부터 지원한다.
트리거란 이름이 있는 데이터 베이스 오브젝트(named database object )로서, 테이블과 연관되어 있으며,
특정 이벤트가 테이블에 대해 발생하면 동작을 하게 된다.
예를 들면, 아래의 명령문은 하나의 테이블과 하나의 INSERT 트리거를 생성한다.
트리거는 테이블의 컬럼에 삽입된 값들을 더하게 한다.:

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
Query OK, 0 rows affected (0.03 sec)
mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)

이 장에서는 트리거를 생성하고 없애는 신텍스를 설명할 것이며,
트리거를 어떻게 사용하는지에 대한 예문을 보여 주기로 한다.
트리거 사용의 제약 사항은 Section I.1, “스토어드 루틴과 트리거상의 제약 사항”을 참조하기 바란다. 
바이너리 로깅이 트리거에 적용될 때의 제약 사항은 Section 17.4, “스토어드 루틴과 트리거의 바이너리 로깅”에서 다루었다.

트리거(Triggers)란?

  • 데이터베이스 내에서 참조의 무결성을 유지하기 위해 어떤 프로시저를 자동으로 호출하는 것과 같은 행동이다.
  • 트리거는 사용자가 데이터를 삽입하거나 삭제하는 등과 같은, 데이터 변경에 관한 시도를 했을 때 효력을 나타낸다.
  • 트리거는 지정된 어떤 변경이 시도되면, 일련의 행동들을 취하도록 시스템에게 알릴 수 있다.
  • 트리거는 부정확하고, 허가 받지 않았으며, 일관성이 없는 데이터 변경을 방지함으로써,
    데이터베이스의 무결성을 유지하는데 도움을 준다.