故事背景: 我有一个环境需要导入其他环境的数据,但在导入数据的时候出现由于外键约束导致数据录入失败的情况
ERROR 3780 (HY000) at line 25: Referencing column 'email_template_id' and referenced column 'id' in foreign key constraint 't_email_record_t_email_template_id_fk' are incompatible.
于是尝试通过设置临时关闭外键约束的方式强制录入(这样可能会影响数据完整性和一致性,需谨慎操作)
mysql> show variables like '%FOREIGN%';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| foreign_key_checks | ON |
+--------------------+-------+
1 row in set (0.00 sec)
mysql> SET GLOBAL FOREIGN_KEY_CHECKS = 0;
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation
mysql>
因为使用的 Azure Database for MySQL flexible server 官方授予的账号缺乏 SUPER 权限,故无法直接修改 global 级别的参数
但我们可以通过以下两种方式临时关闭会话级别的 外键约束 以已进行数据导入
方式一:会话登录前设置
mysql -u${MYSQL_USERNAME} -p${MYSQL_PASSWORD} -h${MYSQL_HOST} -P${MYSQL_PORT} --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;"
方式二:会话登录后设置
SET FOREIGN_KEY_CHECKS = 0;
Finished, Well done.🚀