1
    CREATE TABLE `tmp` (
    `CallID` bigint(8) unsigned NOT NULL,
    `InfoID` bigint(8) unsigned NOT NULL,
   `CallStartTime` datetime NOT NULL,
    KEY `CallStartTime` (`CallStartTime`)
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1

このテーブルに、int(4) unsigned NOT NULL 列をもう 1 つ追加したいPartitionID。ここでは、PartitionID 列のデータを挿入したい。つまり、PartitionID=(DAYOFYEAR('2009-01-01 00:00:00')) = 1自動でデータを挿入したい ... PartitionID=(DAYOFYEAR( CallStartTime))

このような私のテーブルの古いデータ

        (144,   56, '2011-06-19 1:00:00'),
        (100,   57, '2011-09-01 10:24:00'),
        (168,   68, '2012-07-13 12:10:06'),
        (207,   30,         '12012-12-05 12:12:00'),
        (112,   14, '2013-05-19 1:00:00');
        (177,   90, '2013-06-05 12:12:00'),
        (144,   56, '2013-06-19 1:00:00'),
        (168,   68,     '2013-07-13 12:10:06'),
        (119,   17, '2013-08-01 10:24:00'),
        (110,   10, '2013-08-05 12:12:00'),
        (113,   11, '2013-08-13 12:10:06'),
        (100,   57, '2013-09-01 10:24:00'),

新しい列を追加した後...私はこのようにしたい

PartitionID 手動ではなく自動的にデータを挿入するだけです

(177,   90, '2010-06-05 12:12:00',156),
(144,   56, '2011-06-19 01:00:00',170),
(100,   57, '2011-09-01 10:24:00',244),
(168,   68, '2012-07-13 12:10:06',194),
(207, 30, '2012-12-05 12:12:00',340),
(112,   14, '2013-05-19 01:00:00',139),
(177,   90, '2013-06-05 12:12:00',156),
(144,   56, '2013-06-19 01:00:00',170),
(168,   68, '2013-07-13 12:10:06',194),
(119,   17, '2013-08-01 10:24:00',213),
(110,   10, '2013-08-05 12:12:00',217),
(113,   11, '2013-08-13 12:10:06',225),
(100,   57, '2013-09-01 10:24:00',244)
4

2 に答える 2

0

これは計算された値であり、デフォルトは定数である必要があるため、その列のデフォルト値を設定することはできません。ただし、挿入時にその値を計算するトリガーを作成できます

delimiter |
CREATE TRIGGER PartitionIDtrigger BEFORE INSERT ON tmp
FOR EACH ROW 
BEGIN
    SET NEW.PartitionID = DAYOFYEAR(CURDATE());
END
|
delimiter ;
于 2013-09-17T08:24:44.227 に答える
0
ALTER TABLE TestTable
ADD NewCol int
CONSTRAINT DF_TestTable_NewCol DEFAULT '1' NOT NULL
GO

これがあなたが探しているものかどうかはわかりませんが、これはデフォルト値 1 の新しい列を追加するために使用されます。

@juergen dが言ったようにTRIGGERを作成してから、値を変更できます。

于 2013-09-17T08:32:42.393 に答える