Re: Resetting the auto_increment to start from 1

2003-01-09 Thread Stefan Hinz, iConnect \(Berlin\)
Paul,

>>It's a rather old book, which deals with MySQL 3.23, and not with
MySQL
>>4.x.

>Actually, he's talking about MySQL Cookbook (p549).  Which is a new
book,
>which is why I said *may* reset the counter rather than *will*
>reset the counter as was true in older versions of MySQL.

Oops. Sorry for calling the brand new MySQL Cookbook an "old book"! :/

>>  TRUNCATE TABLE tbl
>>This will in fact do a DROP/CREATE, thus resetting the AUTO_INCREMENT
>>counter etc.

>Not always!
>Try this script:
>CREATE TABLE t (i INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY)
>TYPE = INNODB;
>INSERT INTO t SET i = NULL;
>INSERT INTO t SET i = NULL;
>INSERT INTO t SET i = NULL;
>SELECT * FROM t;
>TRUNCATE TABLE t;
>INSERT INTO t SET i = NULL;
>SELECT * FROM t;

You're right, and my 4.0.7 behaves the same way. Is TRUNCATE supposed to
behave this way? (The manual doesn't say anything about TRUNCATE and
AUTO_INCREMENT.)

>>Actually, the counter is reset to 0, not 1. The first inserted value
>>then is auto-incremented, and thus becomes 1.

>Sure about that?  Create a new table and try SHOW TABLE STATUS LIKE 't'
>and you'll get:
[snip]
>  Auto_increment: 1

Oh, well ... There's a slight contradiction in the manual, but you're
right again, anyway:

"When you insert a value of NULL (recommended) or 0 into an
AUTO_INCREMENT column, the column is set to value+1, where value is the
largest value for the column currently in the table. AUTO_INCREMENT
sequences begin with 1."

So, if initially value=1, then the first auto_increment value would be
1+1. Anyway, we know what the manual wants to tell us, so sorry for
being precocious.

Regards,
--
  Stefan Hinz <[EMAIL PROTECTED]>
  Geschäftsführer / CEO iConnect GmbH <http://iConnect.de>
  Heesestr. 6, 12169 Berlin (Germany)
  Tel: +49 30 7970948-0  Fax: +49 30 7970948-3

- Original Message -
From: "Paul DuBois" <[EMAIL PROTECTED]>
To: "Stefan Hinz, iConnect (Berlin)" <[EMAIL PROTECTED]>; "Octavian
Rasnita" <[EMAIL PROTECTED]>; "MySQL" <[EMAIL PROTECTED]>
Sent: Thursday, January 09, 2003 1:49 AM
Subject: Re: Resetting the auto_increment to start from 1


At 20:39 +0100 1/8/03, Stefan Hinz, iConnect (Berlin) wrote:
>Octavian,
>
>>  I've read the following in a MySQL book:
>
>It's a rather old book, which deals with MySQL 3.23, and not with MySQL
>4.x.

Actually, he's talking about MySQL Cookbook (p549).  Which is a new
book,
which is why I said *may* reset the counter rather than *will*
reset the counter as was true in older versions of MySQL.


>
>>   DELETE FROM tbl_name WHERE 1 > 0;
>
>In MySQL 3.23, this was a workaround to force the server to delete a
>table row by row. By default, 3.23 would on DELETE FROM tbl just do a
>DROP TABLE + CREATE TABLE, because this was faster in most cases than
>deleting the rows. This behaviour wasn't ANSI SQL compliant, though.
>
>MySQL 4.x does a DELETE FROM tbl with or without WHERE clause ANSI
>compliant. This means, it will always delete the rows, not DROP/CREATE
>the table. To do the latter, use
>
>  TRUNCATE TABLE tbl
>
>This will in fact do a DROP/CREATE, thus resetting the AUTO_INCREMENT
>counter etc.

Not always!

Try this script:

DROP TABLE IF EXISTS t;
CREATE TABLE t (i INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY)
TYPE = INNODB;
INSERT INTO t SET i = NULL;
INSERT INTO t SET i = NULL;
INSERT INTO t SET i = NULL;
SELECT * FROM t;
TRUNCATE TABLE t;
INSERT INTO t SET i = NULL;
SELECT * FROM t;

See if you get the output I do (MySQL 4.0.8):

+---+
| i |
+---+
| 1 |
| 2 |
| 3 |
+---+
+---+
| i |
+---+
| 4 |
+---+

What's the solution?  Do this:

ALTER TABLE t AUTO_INCREMENT = 1;

>
>>  Well, I've tried that sql statement, but the auto_increment point of
>start
>>  was not reset to 1.
>
>Actually, the counter is reset to 0, not 1. The first inserted value
>then is auto-incremented, and thus becomes 1.

Sure about that?  Create a new table and try SHOW TABLE STATUS LIKE 't'
and you'll get:

mysql> show table status like 't'\G
*** 1. row ***
Name: t
Type: InnoDB
  Row_format: Fixed
Rows: 0
  Avg_row_length: 0
 Data_length: 16384
Max_data_length: NULL
Index_length: 0
   Data_free: 0
  Auto_increment: 1
 Create_time: NULL
 Update_time: NULL
  Check_time: NULL
  Create_options:
 Comment: InnoDB free: 14336 kB


>
>Regards,
>--
>   Stefan Hinz <[EMAIL PROTECTED]>
>   Geschäftsführer / CEO iConnect GmbH <http://iConnect.de>
>   Heesestr. 6, 12169 Berlin (Germany)
>   Tel: +49 30 7970948-0  Fax: +49 30

Re: Resetting the auto_increment to start from 1

2003-01-09 Thread Octavian Rasnita
Ha ha, thank you for "page 558" but I am blind and I am reading the
electronic version of the book.
However, I think I've reached to page 558 because I've seen how to do it.

Teddy,
Teddy's Center: http://teddy.fcc.ro/
Email: [EMAIL PROTECTED]

- Original Message -
From: "Paul DuBois" <[EMAIL PROTECTED]>
To: "Octavian Rasnita" <[EMAIL PROTECTED]>; "MySQL" <[EMAIL PROTECTED]>
Sent: Wednesday, January 08, 2003 9:26 PM
Subject: Re: Resetting the auto_increment to start from 1


At 9:33 +0200 1/8/03, Octavian Rasnita wrote:
>Hi all,
>
>I've read the following in a MySQL book:
>
>   A special case of record deletion occurs when you clear out a table
>entirely using a DELETE with no WHERE clause:
>  DELETE FROM tbl_name;
>   In this case, the sequence counter may be reset to 1, even for table
types
>for which values normally are not reused (MyISAM and InnoDB). For those
>types, if you wish to delete all the records while maintaining the current
>sequence value, tell MySQL to perform a record-at-a-time delete by
including
>a WHERE clause that specifies some trivially true condition:
>  DELETE FROM tbl_name WHERE 1 > 0;
>
>---
>
>Well, I've tried that sql statement, but the auto_increment point of start
>was not reset to 1.

Note that the text in question says *may* be reset to 1.

To reset it for sure, use the statement at the top of page 558. :-)

>I use MySQL 4.05 under Windows 2000.
>
>Thanks.
>
>Teddy,
>Teddy's Center: http://teddy.fcc.ro/
>Email: [EMAIL PROTECTED]





-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: Resetting the auto_increment to start from 1

2003-01-08 Thread Paul DuBois
At 20:39 +0100 1/8/03, Stefan Hinz, iConnect (Berlin) wrote:

Octavian,


 I've read the following in a MySQL book:


It's a rather old book, which deals with MySQL 3.23, and not with MySQL
4.x.


Actually, he's talking about MySQL Cookbook (p549).  Which is a new book,
which is why I said *may* reset the counter rather than *will*
reset the counter as was true in older versions of MySQL.





  DELETE FROM tbl_name WHERE 1 > 0;


In MySQL 3.23, this was a workaround to force the server to delete a
table row by row. By default, 3.23 would on DELETE FROM tbl just do a
DROP TABLE + CREATE TABLE, because this was faster in most cases than
deleting the rows. This behaviour wasn't ANSI SQL compliant, though.

MySQL 4.x does a DELETE FROM tbl with or without WHERE clause ANSI
compliant. This means, it will always delete the rows, not DROP/CREATE
the table. To do the latter, use

 TRUNCATE TABLE tbl

This will in fact do a DROP/CREATE, thus resetting the AUTO_INCREMENT
counter etc.


Not always!

Try this script:

DROP TABLE IF EXISTS t;
CREATE TABLE t (i INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY)
TYPE = INNODB;
INSERT INTO t SET i = NULL;
INSERT INTO t SET i = NULL;
INSERT INTO t SET i = NULL;
SELECT * FROM t;
TRUNCATE TABLE t;
INSERT INTO t SET i = NULL;
SELECT * FROM t;

See if you get the output I do (MySQL 4.0.8):

+---+
| i |
+---+
| 1 |
| 2 |
| 3 |
+---+
+---+
| i |
+---+
| 4 |
+---+

What's the solution?  Do this:

ALTER TABLE t AUTO_INCREMENT = 1;




 Well, I've tried that sql statement, but the auto_increment point of

start

 was not reset to 1.


Actually, the counter is reset to 0, not 1. The first inserted value
then is auto-incremented, and thus becomes 1.


Sure about that?  Create a new table and try SHOW TABLE STATUS LIKE 't'
and you'll get:

mysql> show table status like 't'\G
*** 1. row ***
   Name: t
   Type: InnoDB
 Row_format: Fixed
   Rows: 0
 Avg_row_length: 0
Data_length: 16384
Max_data_length: NULL
   Index_length: 0
  Data_free: 0
 Auto_increment: 1
Create_time: NULL
Update_time: NULL
 Check_time: NULL
 Create_options:
Comment: InnoDB free: 14336 kB




Regards,
--
  Stefan Hinz <[EMAIL PROTECTED]>
  Geschäftsführer / CEO iConnect GmbH <http://iConnect.de>
  Heesestr. 6, 12169 Berlin (Germany)
  Tel: +49 30 7970948-0  Fax: +49 30 7970948-3

- Original Message -
From: "Octavian Rasnita" <[EMAIL PROTECTED]>
To: "MySQL" <[EMAIL PROTECTED]>
Sent: Wednesday, January 08, 2003 8:33 AM
Subject: Resetting the auto_increment to start from 1



 Hi all,

 I've read the following in a MySQL book:

   A special case of record deletion occurs when you clear out a table
 entirely using a DELETE with no WHERE clause:
  DELETE FROM tbl_name;
   In this case, the sequence counter may be reset to 1, even for table

types

 for which values normally are not reused (MyISAM and InnoDB). For

those

 types, if you wish to delete all the records while maintaining the

current

 sequence value, tell MySQL to perform a record-at-a-time delete by

including

 a WHERE clause that specifies some trivially true condition:
  DELETE FROM tbl_name WHERE 1 > 0;

 ---

 Well, I've tried that sql statement, but the auto_increment point of

start

 was not reset to 1.
 I use MySQL 4.05 under Windows 2000.

 Thanks.

 Teddy,
 Teddy's Center: http://teddy.fcc.ro/

 > Email: [EMAIL PROTECTED]



-
Before posting, please check:
  http://www.mysql.com/manual.php   (the manual)
  http://lists.mysql.com/   (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: Resetting the auto_increment to start from 1

2003-01-08 Thread Stefan Hinz, iConnect \(Berlin\)
Octavian,

> I've read the following in a MySQL book:

It's a rather old book, which deals with MySQL 3.23, and not with MySQL
4.x.

>  DELETE FROM tbl_name WHERE 1 > 0;

In MySQL 3.23, this was a workaround to force the server to delete a
table row by row. By default, 3.23 would on DELETE FROM tbl just do a
DROP TABLE + CREATE TABLE, because this was faster in most cases than
deleting the rows. This behaviour wasn't ANSI SQL compliant, though.

MySQL 4.x does a DELETE FROM tbl with or without WHERE clause ANSI
compliant. This means, it will always delete the rows, not DROP/CREATE
the table. To do the latter, use

 TRUNCATE TABLE tbl

This will in fact do a DROP/CREATE, thus resetting the AUTO_INCREMENT
counter etc.

> Well, I've tried that sql statement, but the auto_increment point of
start
> was not reset to 1.

Actually, the counter is reset to 0, not 1. The first inserted value
then is auto-incremented, and thus becomes 1.

Regards,
--
  Stefan Hinz <[EMAIL PROTECTED]>
  Geschäftsführer / CEO iConnect GmbH <http://iConnect.de>
  Heesestr. 6, 12169 Berlin (Germany)
  Tel: +49 30 7970948-0  Fax: +49 30 7970948-3

- Original Message -
From: "Octavian Rasnita" <[EMAIL PROTECTED]>
To: "MySQL" <[EMAIL PROTECTED]>
Sent: Wednesday, January 08, 2003 8:33 AM
Subject: Resetting the auto_increment to start from 1


> Hi all,
>
> I've read the following in a MySQL book:
>
>   A special case of record deletion occurs when you clear out a table
> entirely using a DELETE with no WHERE clause:
>  DELETE FROM tbl_name;
>   In this case, the sequence counter may be reset to 1, even for table
types
> for which values normally are not reused (MyISAM and InnoDB). For
those
> types, if you wish to delete all the records while maintaining the
current
> sequence value, tell MySQL to perform a record-at-a-time delete by
including
> a WHERE clause that specifies some trivially true condition:
>  DELETE FROM tbl_name WHERE 1 > 0;
>
> ---
>
> Well, I've tried that sql statement, but the auto_increment point of
start
> was not reset to 1.
> I use MySQL 4.05 under Windows 2000.
>
> Thanks.
>
> Teddy,
> Teddy's Center: http://teddy.fcc.ro/
> Email: [EMAIL PROTECTED]
>
>
>
> -
> Before posting, please check:
>http://www.mysql.com/manual.php   (the manual)
>http://lists.mysql.com/   (the list archive)
>
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail
<[EMAIL PROTECTED]>
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
>


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: Resetting the auto_increment to start from 1

2003-01-08 Thread Paul DuBois
At 9:33 +0200 1/8/03, Octavian Rasnita wrote:

Hi all,

I've read the following in a MySQL book:

  A special case of record deletion occurs when you clear out a table
entirely using a DELETE with no WHERE clause:
 DELETE FROM tbl_name;
  In this case, the sequence counter may be reset to 1, even for table types
for which values normally are not reused (MyISAM and InnoDB). For those
types, if you wish to delete all the records while maintaining the current
sequence value, tell MySQL to perform a record-at-a-time delete by including
a WHERE clause that specifies some trivially true condition:
 DELETE FROM tbl_name WHERE 1 > 0;

---

Well, I've tried that sql statement, but the auto_increment point of start
was not reset to 1.


Note that the text in question says *may* be reset to 1.

To reset it for sure, use the statement at the top of page 558. :-)


I use MySQL 4.05 under Windows 2000.

Thanks.

Teddy,
Teddy's Center: http://teddy.fcc.ro/
Email: [EMAIL PROTECTED]




-
Before posting, please check:
  http://www.mysql.com/manual.php   (the manual)
  http://lists.mysql.com/   (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Resetting the auto_increment to start from 1

2003-01-08 Thread Octavian Rasnita
Hi all,

I've read the following in a MySQL book:

  A special case of record deletion occurs when you clear out a table
entirely using a DELETE with no WHERE clause:
 DELETE FROM tbl_name;
  In this case, the sequence counter may be reset to 1, even for table types
for which values normally are not reused (MyISAM and InnoDB). For those
types, if you wish to delete all the records while maintaining the current
sequence value, tell MySQL to perform a record-at-a-time delete by including
a WHERE clause that specifies some trivially true condition:
 DELETE FROM tbl_name WHERE 1 > 0;

---

Well, I've tried that sql statement, but the auto_increment point of start
was not reset to 1.
I use MySQL 4.05 under Windows 2000.

Thanks.

Teddy,
Teddy's Center: http://teddy.fcc.ro/
Email: [EMAIL PROTECTED]



-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php