MySQL 저장 프로시저는 대규모 데이터베이스 시스템에서 특정 기능을 완료하기 위한 SQL 문 집합입니다. 트리거는 저장 프로시저가 실행되는 동안 주로 이벤트에 의해 트리거된다는 점에서 저장 프로시저와 다릅니다. 저장 프로시저 이름을 통해 직접 호출할 수 있습니다.
저장 프로시저: 대규모 데이터베이스 시스템에서 특정 기능을 완료하는 데 사용되는 SQL 문 집합입니다. Trigger(트리거)는 저장 프로시저와는 다른 특별한 유형의 저장 프로시저입니다. 트리거는 주로 이벤트에 의해 트리거되어 실행되지만 저장 프로시저 이름을 통해 직접 호출할 수 있습니다.
저장 프로시저:
특정 기능을 완료하기 위한 SQL 문 집합입니다.
첫 번째 컴파일 후에는 다시 호출할 때 다시 컴파일할 필요가 없습니다. 사용자 지정 저장 프로시저의 이름을 지정하고 이를 실행하기 위한 매개변수(저장 프로시저에 매개변수가 있는 경우)를 지정합니다.
저장 프로시저는 데이터베이스의 중요한 개체입니다.
장점:
2 더 빠른 실행 허용
3 네트워크 트래픽 감소
4 더 나은 보안 메커니즘
형식:
DELIMITER // CREATE PROCEDURE 储存名([ IN ,OUT ,INOUT ]?参数名?数据类形...) BEGIN SQL语句 END // DELIMITER ;
호출 프로시저:
호출 프로시저 이름 사용( )
모든 저장 프로시저 보기 프로시저 상태 표시
생성된 저장 프로시저 보기 프로시저 생성 프로시저 이름 표시삭제 프로시저 삭제 프로시저 프로시저 이름
In은 매개변수가 외부 입력은 프로세스 내부에서 사용됩니다.
Inout 데이터는 프로세스 외부에서 내부로 전달되어 사용할 수 있습니다. 동시에 내부 작업 후에 데이터가 사용됩니다. 외부로 반환
트리거는 저장 프로시저와는 다른 특별한 형태의 저장 프로시저입니다.
트리거는 주로 이벤트를 통해 실행되지만 저장 프로시저는 저장 프로시저를 통해 직접 호출할 수 있습니다. 프로시저 이름.
기능:
2. 트리거에서 오류가 발생하면 변경 결과가 취소됩니다.
Format
DELIMITER // Create trigger --触发器名字 触发时机 触发事件 on 表 for each row Begin --操作的内容 End // DELIMITER ;
트리거 개체: 테이블 각 행 트리거에 대해 트리거 바인딩은 기본적으로 테이블의 모든 행이므로 각 행이 변경되면 트리거가 트리거됩니다.
트리거 타이밍: 각 테이블의 해당 행은 SQL 명령이 발생하면가 다른 상태를 갖게 됩니다. 행의 데이터가 변경되면 각 행에는 항상 두 가지 상태가 있습니다. 데이터 운영 전(이전), 운영 후(이후)
트리거 이벤트:
Mysql에서 트리거의 대상은 데이터 변경(추가, 삭제, 변경)뿐이며 쿼리는 데이터를 변경하지 않습니다.
그래서 쿼리에는 트리거 이벤트가 없습니다
참고:
테이블에는 각 트리거 타이밍에 바인딩된 트리거 이벤트에 해당하는 트리거 유형이 하나만 있을 수 있습니다.
테이블에 트리거를 삽입한 후에는 하나만 있을 수 있습니다. 테이블에 있는 대부분의 트리거는 6개만 가능합니다.
저장 프로시저 생성
DELIMITER // CREATE PROCEDURE addUser (IN uCode VARCHAR(50),IN uName VARCHAR(20),IN uRole INT,IN sex INT,IN tel VARCHAR(30)) BEGIN INSERT INTO smbms_user (userCode,userName,userRole,gender,phone) VALUES(uCode,uName,uRole,sex,tel); END// DELIMITER // 查看存储过程 show procedure status; <insert id="saveUser"> CALL addUser(#{userCode},#{userName},#{userRole},#{gender},#{phone}) </insert> public int saveUser( @Param("userCode") String userCode, @Param("userName") String userName, @Param("userRole") Integer userRole, @Param("gender") Integer gender, @Param("phone") String phone); public List<User> findUserListPage(String queryUserName, Integer queryUserRole, Integer currentPageNo, Integer pageSzie); public boolean saveUser(String userCode, String userName, Integer userRole, Integer gender, String phone) { SqlSession sqlSession = null; int row = 0; // 受影响的行数 try { sqlSession = MyBatisUtil.createSqlSession(); row = sqlSession.getMapper(UserMapper.class).saveUser(userCode, userName, userRole, gender, phone); // 提交事务 sqlSession.commit(); } catch (Exception e) { if (sqlSession != null) { sqlSession.rollback(); } row = 0; e.printStackTrace(); } finally { MyBatisUtil.closeSqlSession(sqlSession); } if (row > 0) { return true; } return false; } userService.saveUser("zhangcuishan", "亚索", 1, 2, "15645678941");
트리거 생성
创建两张表 create table my_goods( id int primary key auto_increment, name varchar(20) not null, inv int ) create table my_orders( id int primary key auto_increment, goods_id int not null, goods_num int not null) insert into my_goods values(null,'手机',1000),(null,'电脑',500),(null,'游戏机',100); DELIMITER // CREATE TRIGGER a_i_o_t AFTER INSERT ON my_orders FOR EACH ROW BEGIN UPDATE my_goods SET inv =inv -new.goods_num WHERE id=new.goods_id; END // DELIMITER ; DELIMITER // CREATE TRIGGER b_i_o_t BEFORE INSERT ON my_orders FOR EACH ROW BEGIN SELECT inv FROM my_goods WHERE id=new.goods_id INTO @inv; IF @inv <new.goods_num THEN INSERT INTO xxx VALUES('xx'); END IF; END // DELIMITER // 测试 insert into my_orders values(null,3,5);
위 내용은 mysql 저장 프로시저와 트리거의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!