1

これらのテーブルに似た2つのテーブルがあります

メンバー

CREATE TABLE IF NOT EXISTS `members` (
    `ID` int(10) unsigned NOT NULL auto_increment,
    `email` varchar(255) NOT NULL,
    `password` varchar(100) NOT NULL,
    PRIMARY KEY  (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

アーカイブされたメンバー

CREATE TABLE IF NOT EXISTS `archived_members` (
    `ID` int(10) unsigned NOT NULL,
    `email` varchar(255) NOT NULL,
    `password` varchar(100) NOT NULL,
    `archived_date` timestamp NOT NULL,
    `archived_type` varchar(20) NOT NULL
) ENGINE=ARCHIVE DEFAULT CHARSET=utf8 ;

私は通常、このクエリステートメントを使用してテーブル間で行を移動します これは単なる例です

INSERT INTO `archived_members` (`ID`, `email`, `password`) SELECT * FROM `members` WHERE `ID`=1;
DELETE FROM `members` WHERE `ID`=1;

しかし、私の場合(この場合)、archived_membersテーブルの他のフィールドの値を指定する必要がありますarchived_date& archived_type。したがって、私は試しました

INSERT INTO `archived_members` (`ID`, `email`, `password`) SELECT * FROM `members` WHERE `ID`=1;
UPDATE `archived_members` SET `archived_date`=CURRENT_DATE(), `archived_type`='reason of archving' WHERE `ID`=1;
DELETE FROM `members` WHERE `ID`=1;

archived_members残念ながら、テーブルのエンジンはARCHIVEであるべきだと思うので、テーブルに挿入された後に行を更新することはできません。

助けてください!

4

2 に答える 2

0

それが声明SELECT * FROM...を書く唯一の方法ではないことを知っていますよね?SELECT

INSERT INTO `archived_members` 
 (`ID`, `email`, `password`, `archived_date`, `archived_type` ) 
SELECT 
 `ID`, `email`, `password`, CURRENT_DATE(), 'reason of archving' 
FROM `members` WHERE `ID`=1;
于 2013-07-04T16:40:19.417 に答える