我正在尝试支持使用mysql的另一个开发人员的CodeIgniter框架php。
代码执行以下操作(以及之前和之后):
$sql_case_00_4 = "DROP TABLE IF EXISTS top_domains_video_image_audio_detected";
$this->db->query($sql_case_00_4);
$sql_case_00_5 = "CREATE TABLE top_domains_video_image_audio_detected (domain_name varchar(255),genId varchar (12),trackingId int)";
$this->db->query($sql_case_00_5);
有时mysql会生成以下错误,我们会记录:"查询错误:表' top_domains_video_image_audio_detected'已存在"。这是代码中唯一生成表(或者完全使用表)的地方。
我想到的一种可能性是,如果两个请求同时尝试创建表,则可能发生竞争条件。
但这似乎很少见,因为没有多少人在查询此服务器,除非同一用户的两次背对背动作可能导致两个同时发出的请求。
我不是100%肯定,但我猜测query()函数会阻塞,从而阻止在DROP期间调用CREATE。
这还有其他可能导致这种情况吗?
答案 0 :(得分:1)
一次尝试两个查询。 $sql_case_00_4 = "DROP TABLE IF EXISTS top_domains_video_image_audio_detected; CREATE TABLE top_domains_video_image_audio_detected (domain_name varchar(255),genId varchar (12),trackingId int)";
答案 1 :(得分:1)
我建议组合phpfreak或检查提到的两个查询,以确保您使用的db用户具有DROP权限。 (不确定您的Web应用程序是否会在此时抛出异常或无声地失败)。
答案 2 :(得分:0)
$ sql_case_00_4 =" DROP TABLE IF EXISTS top_domains_video_image_audio_detected; CREATE TABLE top_domains_video_image_audio_detected(domain_name varchar(255),genId varchar(12),trackingId int)&#34 ;;