2017-04-01 132 views
0

你能帮我解决这个问题吗? 其实我试图TRUNCATE一些TABLES在MySql中的数据库,但是当我尝试这样做时,出现错误。MySql SET FOREIGN_KEY_CHECK不起作用

请在计,我已经设置好的了FOREIGN_KEY_CHECK为0,就像说,在line 2line 9

所以返回到1,为什么呢?以及如何解决?

这里我查询 My SQL Query that desnt works

在这里,我得到了错误 The error

更新1

添加表结构

-- 
-- Table structure for table `metadata` 
-- 

CREATE TABLE IF NOT EXISTS `metadata` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `user` int(11) NOT NULL, 
    `date` date NOT NULL, 
    `time` time NOT NULL, 
    `ip` varchar(15) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `user` (`user`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=54 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `patients` 
-- 

CREATE TABLE IF NOT EXISTS `patients` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `nss` bigint(11) DEFAULT NULL, 
    `name_1st` varchar(50) NOT NULL, 
    `name_2nd` varchar(30) DEFAULT NULL, 
    `last_name_1st` varchar(50) NOT NULL, 
    `last_name_2nd` varchar(30) DEFAULT NULL, 
    `clinic` int(11) DEFAULT NULL, 
    `attached` text, 
    `valid` tinyint(1) DEFAULT NULL, 
    `status` tinyint(2) NOT NULL, 
    `metadata` bigint(20) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `status` (`status`), 
    KEY `clinic` (`clinic`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `queue` 
-- 

CREATE TABLE IF NOT EXISTS `queue` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `consecutive` int(11) NOT NULL, 
    `creat_day` date NOT NULL, 
    `patient` bigint(20) DEFAULT NULL, 
    `status` tinyint(2) DEFAULT NULL, 
    `metadata` bigint(20) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `consecutive` (`consecutive`,`creat_day`), 
    KEY `status` (`status`), 
    KEY `metadata` (`metadata`), 
    KEY `patient_ident` (`patient`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `triage_regs` 
-- 

CREATE TABLE IF NOT EXISTS `triage_regs` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `queue` bigint(20) NOT NULL, 
    `patient` bigint(20) NOT NULL, 
    `cod_color` int(11) NOT NULL, 
    `medicines` text NOT NULL, 
    `time_start_triage` time NOT NULL, 
    `time_end_triage` time NOT NULL, 
    `tens_arterial` varchar(7) NOT NULL, 
    `frec_card` int(3) NOT NULL, 
    `frec_resp` int(3) NOT NULL, 
    `temp` int(3) NOT NULL, 
    `gluc` int(3) NOT NULL, 
    `esc_glasgown` int(3) NOT NULL, 
    `atention` varchar(500) NOT NULL DEFAULT 'n/a', 
    `questions` longtext, 
    `exp_fis` longtext, 
    `aux_diag` longtext, 
    `pron` longtext, 
    `trat` longtext, 
    `diag` longtext, 
    `status` tinyint(2) NOT NULL, 
    `metadata` bigint(20) DEFAULT NULL, 
    `metadata2` bigint(20) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `patient` (`patient`), 
    KEY `status` (`status`), 
    KEY `metadata2` (`metadata2`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; 
+0

请出示表结构 –

+0

@MuhammadMuazzam更新 –

+0

http://stackoverflow.com/questions/5452760/truncate-foreign-key-constrained-table/8074510#8074510 –

回答

0

它是完全一样的错误说:你不能截断一个表BY一个外键约束,因为它是一个WITH CHECK约束或不是。这是因为TRUNCATE强制该表被删除并重新创建,显然,外键关系中定义为“主”的表不能被删除,即使是暂时的。

所以,你必须做的是首次下降全都FK约束其中引用您的表,然后截断它,然后重新 FK约束。

+0

但当我用phpmyadmin做同样的事情时,我可以截取我需要的所有表格 –

+0

;那么这只是MySql的一个问题,它决不允许这样的行为。但是我知道什么:-) –