mysql数据库,外键关联删除主表数据,binlog只记主表binlog

环境:8.0.32

场景一、开启外键约束关联删除时,删除主表记录,binlog中内容解析

1、写入测试数据,并删除主键 id=1,子表id=1一并删除

mysql> create table t1(id int primary key ,name varchar(200));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t1 select 1,'zs';
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into t1 select 2,'ls';
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into t1 select 3,'ww';
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> create table t2(id int,mx varchar(200) ,constraint wj foreign key(id) references t1(id) ON UPDATE NO ACTION ON DELETE CASCADE);
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> select * from t1;
+----+------+
| id | name |
+----+------+
|  1 | zs   |
|  2 | ls   |
|  3 | ww   |
+----+------+
3 rows in set (0.00 sec)

mysql> insert into t2 select 4,4;
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`ceshi`.`t2`, CONSTRAINT `wj` FOREIGN KEY (`id`) REFERENCES `t1` (`id`) ON DELETE CASCADE)
mysql> insert into t2 select 1,1;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into t2 select 1,2;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into t2 select 1,3;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql>
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

mysql> delete from t1 where id=1;
Query OK, 1 row affected (0.01 sec)

mysql> select * from t2;
Empty set (0.00 sec)

 

 

2、分析binlog

BEGIN
/*!*/;
# at 354
#240909 10:41:26 server id 3306  end_log_pos 411 CRC32 0x4d8ebc49     Table_map: `ceshi`.`t1` mapped to number 131
# has_generated_invisible_primary_key=0
# at 411
#240909 10:41:26 server id 3306  end_log_pos 455 CRC32 0xaa89f9cc     Delete_rows: table id 131 flags: STMT_END_F

BINLOG '
VmDeZhPqDAAAOQAAAJsBAAAAAIMAAAAAAAMABWNlc2hpAAJ0MQACAw8CIAMCAQEAAgP8/wBJvI5N
VmDeZiDqDAAALAAAAMcBAAAAAIMAAAAAAAEAAgAC/wABAAAAAgB6c8z5iao=
'/*!*/;
### DELETE FROM `ceshi`.`t1`
### WHERE
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */
###   @2='zs' /* VARSTRING(800) meta=800 nullable=1 is_null=0 */
# at 455
#240909 10:41:26 server id 3306  end_log_pos 486 CRC32 0x9ce4b572     Xid = 77
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 

 

场景二、关闭外键约束,关联删除时,删除主表记录,binlog中内容解析

1、测试数据如下,关闭外键约束后,删除主表记录,子表数据并没有跟着删除

mysql> select * from t1;
+----+------+
| id | name |
+----+------+
|  2 | ls   |
|  3 | ww   |
+----+------+
2 rows in set (0.00 sec)

mysql> select * from t2;
Empty set (0.00 sec)

mysql> insert into t2 select 2,2;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into t2 select 2,3;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into t2 select 2,4;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> SET FOREIGN_KEY_CHECKS=0;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from t1 where id=2;
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+----+------+
| id | name |
+----+------+
|  3 | ww   |
+----+------+
1 row in set (0.00 sec)

mysql> select * from t2;
+------+------+
| id   | mx   |
+------+------+
|    2 | 2    |
|    2 | 3    |
|    2 | 4    |
+------+------+
3 rows in set (0.00 sec)

 

2、分析 binlog

#240909 10:53:51 server id 3306  end_log_pos 2661 CRC32 0xe5698ce8     Query    thread_id=12    exec_time=0    error_code=0
SET TIMESTAMP=1725850431/*!*/;
BEGIN
/*!*/;
# at 2661
#240909 10:53:51 server id 3306  end_log_pos 2718 CRC32 0xcbe15e87     Table_map: `ceshi`.`t1` mapped to number 131
# has_generated_invisible_primary_key=0
# at 2718
#240909 10:53:51 server id 3306  end_log_pos 2762 CRC32 0xab449127     Delete_rows: table id 131 flags: STMT_END_F

BINLOG '
P2PeZhPqDAAAOQAAAJ4KAAAAAIMAAAAAAAMABWNlc2hpAAJ0MQACAw8CIAMCAQEAAgP8/wCHXuHL
P2PeZiDqDAAALAAAAMoKAAAAAIMAAAAAAAMAAgAC/wACAAAAAgBscyeRRKs=
'/*!*/;
### DELETE FROM `ceshi`.`t1`
### WHERE
###   @1=2 /* INT meta=0 nullable=0 is_null=0 */
###   @2='ls' /* VARSTRING(800) meta=800 nullable=1 is_null=0 */
# at 2762
#240909 10:53:51 server id 3306  end_log_pos 2793 CRC32 0x11115280     Xid = 93
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;

 

 

 

posted on 2024-09-09 10:58  柴米油盐酱醋  阅读(77)  评论(0编辑  收藏  举报

导航