problem with adding timestamp as a column

2005-02-28 Thread Zhe Wang
Hi, there,
 I have MySQL 4.1.10. I need to add a timestamp column to an existing 
table. I am having a problem of setting the newly added column to be the 
current time.

 This is what I did:
CREATE TABLE try (id INTEGER); INSERT INTO try VALUES(1), (2), (3);
ALTER TABLE try ADD timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
SELECT * FROM try;
+--+-+
| id   | timestamp   |
+--+-+
|1 | -00-00 00:00:00 |
|2 | -00-00 00:00:00 |
|3 | -00-00 00:00:00 |
+--+-+

 I've  read the on-line manual regarding the change in timestamp, still 
couldn't figure out why 0's got inserted instead of a meaningful current 
time stamp. I would greatly appreciate if someone can let me know what 
the correct way is. Unfortunately I cannot recreate the table.

  Thank you very much!
Regards,
Zhe
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]


Re: problem with adding timestamp as a column

2005-02-28 Thread Hank
I'd suggest not using the keyword timestamp as a column name.  I'd
suggest using ts or tstamp or something like that.

To update the records to the current timestamp:

update try set tstamp=null;

should do it.  I don't know why the default isn't working, though.




On Mon, 28 Feb 2005 10:05:32 -0500, Zhe Wang [EMAIL PROTECTED] wrote:
 Hi, there,
 
  I have MySQL 4.1.10. I need to add a timestamp column to an existing
 table. I am having a problem of setting the newly added column to be the
 current time.
 
  This is what I did:
 
 CREATE TABLE try (id INTEGER); INSERT INTO try VALUES(1), (2), (3);
 
 ALTER TABLE try ADD timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
 
 SELECT * FROM try;
 
 +--+-+
 
 | id   | timestamp   |
 
 +--+-+
 
 |1 | -00-00 00:00:00 |
 
 |2 | -00-00 00:00:00 |
 
 |3 | -00-00 00:00:00 |
 
 +--+-+
 
  I've  read the on-line manual regarding the change in timestamp, still
 couldn't figure out why 0's got inserted instead of a meaningful current
 time stamp. I would greatly appreciate if someone can let me know what
 the correct way is. Unfortunately I cannot recreate the table.
 
   Thank you very much!
 
 Regards,
 Zhe
 
 --
 MySQL General Mailing List
 For list archives: http://lists.mysql.com/mysql
 To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]
 
 


-- 

-Hank

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]



Re: problem with adding timestamp as a column

2005-02-28 Thread Joerg Bruehe
Hi!

Am Mo, den 28.02.2005 schrieb Hank um 17:09: [top-posting reordered!]
 On Mon, 28 Feb 2005 10:05:32 -0500, Zhe Wang [EMAIL PROTECTED] wrote:
  Hi, there,
  
   I have MySQL 4.1.10. I need to add a timestamp column to an existing
  table. I am having a problem of setting the newly added column to be the
  current time.
  
   This is what I did:
  
  CREATE TABLE try (id INTEGER); INSERT INTO try VALUES(1), (2), (3);
  ALTER TABLE try ADD timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
  SELECT * FROM try;
  
  +--+-+
  | id   | timestamp   |
  +--+-+
  |1 | -00-00 00:00:00 |
  |2 | -00-00 00:00:00 |
  |3 | -00-00 00:00:00 |
  +--+-+
  
   I've  read the on-line manual regarding the change in timestamp, still
  couldn't figure out why 0's got inserted instead of a meaningful current

They did not get inserted - see below.

  time stamp. I would greatly appreciate if someone can let me know what
  the correct way is. Unfortunately I cannot recreate the table.
  
[[...]]
  
 I'd suggest not using the keyword timestamp as a column name.  I'd
 suggest using ts or tstamp or something like that.

I second that - avoid using keywords as identifiers!

 
 To update the records to the current timestamp:
 
 update try set tstamp=null;
 
 should do it.  I don't know why the default isn't working, though.

The default is a value that is used when a row is inserted but no
value for this columnt is provided. It is applied at insert time, but
not at select time - here simply the existing value is returned.
ALTER TABLE ADD creates the new column, but it does no inserts.

The general procedure for such situations is:
1) Add the new column to the table.
2) Add code handling this column to all your triggers, stored
procedures, web interfaces, application programs, ... that enter data
into your DB.
3) Use an Update command to set the default value into this column in
all rows where it is still empty or NULL. (These are the rows inserted
before the respective application provided a value.)
4) Add code handling this column to all data output functions. (Now you
are sure all DB contents is valid.)

If necessary: Repeat steps 2), 3), and 4) if you missed an application,
or if your logic demanded you to have valid contents immediately.

HTH,
Joerg

-- 
Joerg Bruehe, Senior Production Engineer
MySQL AB, www.mysql.com

Are you MySQL certified?  www.mysql.com/certification


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]



Re: problem with adding timestamp as a column

2005-02-28 Thread Zhe Wang
Hi, Joerg,
  Thank you very much for your clear reply. Now I completely understand 
what is going on behind the screen.

   Also a big thanks to all the people who gave me kind reply.
Regards,
Zhe
Joerg Bruehe wrote:
Hi!
Am Mo, den 28.02.2005 schrieb Hank um 17:09: [top-posting reordered!]
 On Mon, 28 Feb 2005 10:05:32 -0500, Zhe Wang [EMAIL PROTECTED] wrote:
  Hi, there,
 
   I have MySQL 4.1.10. I need to add a timestamp column to an existing
  table. I am having a problem of setting the newly added column to 
be the
  current time.
 
   This is what I did:
 
  CREATE TABLE try (id INTEGER); INSERT INTO try VALUES(1), (2), (3);
  ALTER TABLE try ADD timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
  SELECT * FROM try;
 
  +--+-+
  | id   | timestamp   |
  +--+-+
  |1 | -00-00 00:00:00 |
  |2 | -00-00 00:00:00 |
  |3 | -00-00 00:00:00 |
  +--+-+
 
   I've  read the on-line manual regarding the change in timestamp, 
still
  couldn't figure out why 0's got inserted instead of a meaningful 
current

They did not get inserted - see below.
  time stamp. I would greatly appreciate if someone can let me know 
what
  the correct way is. Unfortunately I cannot recreate the table.
 
[[...]]
 
 I'd suggest not using the keyword timestamp as a column name.  I'd
 suggest using ts or tstamp or something like that.

I second that - avoid using keywords as identifiers!

 To update the records to the current timestamp:

 update try set tstamp=null;

 should do it.  I don't know why the default isn't working, though.
The default is a value that is used when a row is inserted but no
value for this columnt is provided. It is applied at insert time, but
not at select time - here simply the existing value is returned.
ALTER TABLE ADD creates the new column, but it does no inserts.
The general procedure for such situations is:
1) Add the new column to the table.
2) Add code handling this column to all your triggers, stored
procedures, web interfaces, application programs, ... that enter data
into your DB.
3) Use an Update command to set the default value into this column in
all rows where it is still empty or NULL. (These are the rows inserted
before the respective application provided a value.)
4) Add code handling this column to all data output functions. (Now you
are sure all DB contents is valid.)
If necessary: Repeat steps 2), 3), and 4) if you missed an application,
or if your logic demanded you to have valid contents immediately.
HTH,
Joerg
--
Joerg Bruehe, Senior Production Engineer
MySQL AB, www.mysql.com
Are you MySQL certified?  www.mysql.com/certification
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:http://lists.mysql.com/[EMAIL PROTECTED]