2013-09-17 2 views
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 

в этой таблице я хочу добавить еще один столбец PartitionID Int (4) неподписанных NOT NULL, здесь я хочу вставить данные столбца 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) 
+0

Использование ALTER TABLE http://dev.mysql.com/doc/refman/5.1/en/alter-table.html –

+0

Было бы неплохо, если бы вы попытались форматировать ваш вопрос правильно. –

ответ

0

Вы не можете установить значение по умолчанию для этого столбца, поскольку это расчетная величина, и по умолчанию должны быть постоянными. Но вы можете создать триггер, который вычисляет это значение при вставке

delimiter | 
CREATE TRIGGER PartitionIDtrigger BEFORE INSERT ON tmp 
FOR EACH ROW 
BEGIN 
    SET NEW.PartitionID = DAYOFYEAR(CURDATE()); 
END 
| 
delimiter ; 
+0

в этой таблице с 1lac строками .. я хочу обновить все строки –

+0

Вы можете обновить существующие записи простым оператором обновления: 'update tmp set PartitionID = DAYOFYEAR (CURDATE())' –

+0

Предположим, что данные ihave start 2009-01-01 к сегодняшнему дню ... тогда как я могу обновить все строки –

0
ALTER TABLE TestTable 
ADD NewCol int 
CONSTRAINT DF_TestTable_NewCol DEFAULT '1' NOT NULL 
GO 

Я не уверен, если это то, что вы ищете, но это используется, чтобы добавить новый столбец со значением по умолчанию.

Затем вы можете создать TRIGGER как @juergen d, а затем изменить значения.

+0

i dont хочу значение по умолчанию ...... я хочу обновить строку PartitionID с значениями DAYOFYEAR (CallStartTime) –

+0

@karukala Вы можете использовать ответ juergens после этого шага и обновить его. –

Смежные вопросы