Loading...
MySQL 9.5 Reference Manual 9.5의 A.5 MySQL 9.5 FAQ: Triggers의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
A.5.1. MySQL 9.5 트리거에 대한 documentation은 어디에서 찾을 수 있습니까?
A.5.2. MySQL Triggers에 대한 discussion forum이 있습니까?
A.5.3. MySQL에는 statement-level 또는 row-level triggers가 있습니까?
A.5.4. default triggers가 있습니까?
A.5.5. MySQL에서 triggers는 어떻게 관리됩니까?
A.5.6. 지정된 database의 모든 triggers를 볼 수 있는 방법이 있습니까?
A.5.7. triggers는 어디에 저장됩니까?
A.5.8. trigger가 stored procedure를 호출할 수 있습니까?
A.5.9. triggers가 tables에 접근할 수 있습니까?
A.5.10. table에 동일한 trigger event와 action time을 가진 여러 triggers를 둘 수 있습니까?
A.5.11. trigger가 remote server의 tables를 update하는 것이 가능합니까?
A.5.12. triggers는 replication과 함께 동작합니까?
A.5.13. source에서 triggers를 통해 수행된 actions는 replica로 어떻게 replicate됩니까?
| A.5.1. | MySQL 9.5<br>triggers에 대한 documentation은 어디에서 찾을 수 있습니까? |
| Section 27.4, “Using Triggers”를 참조하십시오. | |
| A.5.2. | MySQL Triggers에 대한 discussion forum이 있습니까? |
| 예. https://forums.mysql.com/list.php?99에 있습니다. | |
| A.5.3. | MySQL에는 statement-level 또는 row-level triggers가 있습니까? |
모든 triggers는 FOR EACH ROW입니다. 즉, trigger는 insert, update 또는 delete되는 각 row마다 활성화됩니다. MySQL은 FOR EACH STATEMENT를 사용하는 triggers를 지원하지 않습니다. | |
| A.5.4. | default triggers가 있습니까? |
명시적으로는 없습니다. MySQL에는 일부 TIMESTAMP column과 AUTO_INCREMENT로 정의된 column에 대해 특정한 special behavior가 있습니다. | |
| A.5.5. | MySQL에서 triggers는 어떻게 관리됩니까? |
triggers는 CREATE TRIGGER statement를 사용하여 생성할 수 있으며, DROP TRIGGER를 사용하여 삭제할 수 있습니다. Section 15.1.26, “CREATE TRIGGER Statement” 및 Section 15.1.39, “DROP TRIGGER Statement”에서 이러한 statement에 대한 자세한 내용을 참조하십시오. | |
triggers에 대한 정보는 INFORMATION_SCHEMA.TRIGGERS table에 대한 query로 얻을 수 있습니다. Section 28.3.50, “The INFORMATION_SCHEMA TRIGGERS Table”를 참조하십시오. | |
| A.5.6. | 지정된 database의 모든 triggers를 볼 수 있는 방법이 있습니까? |
예. database dbname에 정의된 모든 triggers의 목록을 INFORMATION_SCHEMA.TRIGGERS table에 대한 query를 사용하여 얻을 수 있습니다. 예시는 다음과 같습니다: | |
| ```sql | |
| SELECT TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_STATEMENT | |
| FROM INFORMATION_SCHEMA.TRIGGERS | |
| WHERE TRIGGER_SCHEMA='dbname'; | |
| ``` | |
| 이 table에 대한 자세한 내용은 Section 28.3.50, “The INFORMATION_SCHEMA TRIGGERS Table”를 참조하십시오. | |
또한 MySQL에 특화된 SHOW TRIGGERS statement를 사용할 수도 있습니다. Section 15.7.7.41, “SHOW TRIGGERS Statement”를 참조하십시오. | |
| A.5.7. | triggers는 어디에 저장됩니까? |
triggers는 data dictionary의 일부인 mysql.triggers system table에 저장됩니다. | |
| A.5.8. | trigger가 stored procedure를 호출할 수 있습니까? |
| 예. 가능합니다. | |
| A.5.9. | triggers가 tables에 접근할 수 있습니까? |
| trigger는 자신의 table에서 old data와 new data 모두에 접근할 수 있습니다. trigger는 다른 tables에 영향을 줄 수도 있으나, function 또는 trigger를 호출한 statement에 의해 (읽기 또는 쓰기 용도로) 이미 사용 중인 table을 수정하는 것은 허용되지 않습니다. | |
| A.5.10. | table에 동일한 trigger event와 action time을 가진 여러 triggers를 둘 수 있습니까? |
MySQL 9.5에서는 특정 table에 대해 동일한 trigger event와 action time을 가진 여러 triggers를 정의하는 것이 가능합니다. 예를 들어, 하나의 table에 대해 두 개의 BEFORE UPDATE triggers를 둘 수 있습니다. 기본적으로, 동일한 trigger event와 action time을 가진 triggers는 생성된 순서대로 활성화됩니다. trigger 순서에 영향을 주려면, FOR EACH ROW 뒤에 FOLLOWS 또는 PRECEDES와 동일한 trigger event와 action time을 가진 기존 trigger의 이름을 나타내는 절을 지정하십시오. FOLLOWS를 사용하면 새 trigger는 기존 trigger 뒤에 활성화됩니다. PRECEDES를 사용하면 새 trigger는 기존 trigger 앞에 활성화됩니다. | |
| A.5.11. | trigger가 remote server의 tables를 update하는 것이 가능합니까? |
예. FEDERATED storage engine을 사용하여 remote server의 table을 update할 수 있습니다. (자세한 내용은 Section 18.8, “The FEDERATED Storage Engine”을 참조하십시오). | |
| A.5.12. | triggers는 replication과 함께 동작합니까? |
| 예. 그러나 동작 방식은 MySQL의 “classic” statement-based 형식을 사용하는지 row-based replication 형식을 사용하는지에 따라 달라집니다. | |
| statement-based replication을 사용할 때는, replica의 triggers는 source에서 실행되고 (그리고 replica로 replicate되는) statements에 의해 실행됩니다. | |
| row-based replication을 사용할 때는, source에서 실행된 statements가 replica로 replicate되더라도 triggers는 replica에서 실행되지 않습니다. 대신 row-based replication을 사용할 때는, source에서 trigger 실행으로 인해 발생한 변경 사항이 replica에 적용됩니다. | |
| 자세한 내용은 Section 19.5.1.37, “Replication and Triggers”를 참조하십시오. | |
| A.5.13. | source에서 triggers를 통해 수행된 actions는 replica로 어떻게 replicate됩니까? |
| 마찬가지로, 이는 statement-based replication을 사용하는지 row-based replication을 사용하는지에 따라 달라집니다. | |
| Statement-based replication. | |
먼저, source에 존재하는 triggers를 replica server에 다시 생성해야 합니다. 이 작업이 완료되면, replication flow는 replication에 참여하는 다른 표준 DML statement와 동일하게 동작합니다. 예를 들어, replication source server에 AFTER insert trigger가 있는 EMP table이 있다고 가정해 봅시다. 동일한 EMP table과 AFTER insert trigger가 replica server에도 존재합니다. replication flow는 다음과 같습니다: | |
1. INSERT statement가 EMP에 대해 실행됩니다. | |
2. EMP에 대한 AFTER trigger가 활성화됩니다. | |
3. INSERT statement가 binary log에 기록됩니다. | |
4. replica는 EMP에 대한 INSERT statement를 가져와 실행합니다. | |
5. replica에 존재하는 EMP의 AFTER trigger가 활성화됩니다. | |
| Row-based replication. | |
| row-based replication을 사용하는 경우, source에서 trigger 실행으로 인해 발생한 변경 사항이 replica에 적용됩니다. 그러나 row-based replication에서는 triggers 자체는 replica에서 실제로 실행되지 않습니다. 이는 source와 replica 모두가 source에서 발생한 변경 사항을 적용하고, 추가로 replica에서 trigger까지 실행된다면, 변경 사항이 replica에서 두 번 적용되어 source와 replica 간의 data가 달라지게 되기 때문입니다. | |
| 대부분의 경우, row-based replication과 statement-based replication의 결과는 동일합니다. 그러나 source와 replica에서 서로 다른 triggers를 사용하는 경우에는 row-based replication을 사용할 수 없습니다. (이는 row-based 형식이 triggers가 source에서 실행되어 만든 변경 사항을 replicas로 replicate하기 때문이며, triggers를 실행하게 만든 statements를 replicate하는 것이 아니고, replica의 해당 triggers는 실행되지 않기 때문입니다.) 대신, 이러한 triggers를 실행하게 만드는 statements는 statement-based replication을 사용하여 replicate되어야 합니다. | |
| 자세한 내용은 Section 19.5.1.37, “Replication and Triggers”를 참조하십시오. |
A.4 MySQL 9.5 FAQ: Stored Procedures and Functions
A.6 MySQL 9.5 FAQ: Views