Thank Gleb,
I misunderstood the meaning of the manual..

==== this is from the manual ======

|SERIAL| is an alias for |BIGINT UNSIGNED NOT NULL AUTO_INCREMENT|.

|SERIAL DEFAULT VALUE| in the definition of an integer column is an alias for |NOT NULL AUTO_INCREMENT UNIQUE|.

====================

The primary key is a modifier, so would it be reasonable to modify the source code:
adding an if statement,
if column already a unique key, then just rename the key to primary
other than creating another key named unique.

I also noticed that you can add as many indices as you want to a column. This should also be prevented by the server. This is related to the
serial primary key definition redundancy.

In real life I have seen tables has more indices then the content of the table.
Normally people would take a look at the index of the table
show index from <table>
but some people are not careful enough.  So I would recommend that the
implementation team adding some checking as to the indices.
Kemin



Gleb Paharenko wrote:

Hello.

SERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.
So you really specifying two keys (primary and unique). See:
 http://dev.mysql.com/doc/mysql/en/news-4-1-0.html
        http://bugs.mysql.com/bug.php?id=13140



Kemin Zhou <[EMAIL PROTECTED]> wrote:
I recently discovered that the following

create table ttt (
  id serial primary key,
  txt text
);

show index from ttt

is telling me that there is a primary ke on id column with BTREE
and at the same time, there is another unique index on the id column.

This is redundant.
if the id column had been specified as

id integer auto_increment primary key,
then there is only one primary key

So it looks that there is a bug in the mysql source code.
Could some exper please confirm my opinion?

I am using version 4.1

Kemin





Reply via email to