Thanks for your ultra detailed reply.

The tables are just samples (no where related to
actual table). Well I am not that bad in db designing
also ;)

I checked the manual - you indeed can execute two
statements like this in one. And if you see the query
I am even changing the table type in the later part of
the query.

Executing it separately causes no problem but I just
wanted to know why the two comnined throw up an error.

Regards,
karam

--- Rhino <[EMAIL PROTECTED]> wrote:

> There is certainly *something* wrong if the ALTER
> TABLE statement causes the
> server to hang; the statement should either succeed
> or fail with an error
> but in neither case should the server hang.
> 
> I'm still back on 4.0.15 so I'm not in a great
> position to try the code
> myself but I see a few odd things in your
> statements.
> 
> First of all, you are using InnoDB for 'master' but
> MyISAM for 'child'; as I
> recall, MySQL will only enforce foreign keys if both
> tables in the
> relationship are using InnoDB as their engines.
> You'll want to confirm that
> in the manual of course, I may just be
> misremembering.
> 
> Second, your Alter table statement has a Type=InnoDB
> at the end. According
> to the manual, you *can* change the type of the
> table in an ALTER TABLE
> statement. However, based on past experience with
> DB2 which works much like
> MySQL much of the time, you probably can't do two
> changes in the same
> statement. You might have better results if you
> changed the table type in
> one ALTER TABLE and then added the foreign key in
> another ALTER TABLE. Or,
> drop both tables and recreate them so that both are
> InnoDB, then add the
> foreign key via ALTER TABLE.
> 
> You can also create the foreign key while you are
> creating the 'child'
> table; that's how I normally do it. However, you may
> be separating the
> creation of the 'child' table and the creation of
> its foreign key into two
> statements deliberately and that should work
> correctly.
> 
> By the way, I can't help but notice that your table
> design is rather odd. It
> makes little sense to have child.id be a foreign key
> pointing to master.id
> the way you are doing since they will, presumably,
> never contain the same
> values. After all, child.id contains the child's ID
> number while parent.id
> contains the parent's ID number which will,
> presumably, be different.
> Wouldn't it make more sense to do something like
> this [untested]?
> 
> create table master
> (parent_id int(11) not null,
>  parent_name char(20) not null,
>  primary key(parent_id)
> ) Engine=InnoDB, charset=utf8;
> 
> create table child
> (child_id int(11) not null,
>  child_name char(20) not null,
>  parent_id int(11) not null,
>  primary key(child_id)
>  foreign key parent_id references master(parent_id)
> ) Engine=InnoDB, charset=utf8;
> 
> This would result in tables like this:
> 
> Master
> parent_id    parent_name
> 1                Tom Smith
> 2                Mary Jones
> 
> Child
> child_id    child_name        parent_id
> 555         Bonnie Smith      1
> 689         Ted    Jones        2
> 
> You could easily look up the names of the parents of
> the children by joining
> child.parent_id to parent.parent_id and you could be
> assured that the
> child.parent_id was always a value from the Master
> table.
> 
> Rhino
> 
> ----- Original Message ----- 
> From: "Karam Chand" <[EMAIL PROTECTED]>
> To: <mysql@lists.mysql.com>
> Sent: Tuesday, January 25, 2005 10:49 AM
> Subject: Serious bug (or my foolishness) with alter
> table and InnoDB
> 
> 
> > Hello,
> >
> > I am running mysql 4.1.7 on Win2K.
> >
> > I have two tables:
> >
> > CREATE TABLE `child` (
> >           `id` int(11) NOT NULL default '0',
> >           `name` char(1) NOT NULL default '',
> >           PRIMARY KEY  (`id`,`name`)
> >
> >
> >
> >         ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
> >
> > CREATE TABLE `master` (
> >
> >
> >
> >           `id` int(11) NOT NULL default '0',
> >           `name` char(10) NOT NULL default '',
> >           PRIMARY KEY  (`id`,`name`)
> >           ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
> >
> > If I execute the following statement:
> >
> > alter table child add foreign key (id) references
> > master (id), type = innodb;
> >
> > the mysql server hangs and needs to be killed.
> After
> > restarting the table child is also lost.
> >
> > Is this a known bug?
> >
> > Karam
> >
> >
> >
> >
> >
> >
> > __________________________________
> > Do you Yahoo!?
> > Yahoo! Mail - You care about security. So do we.
> > http://promotions.yahoo.com/new_mail
> >
> > -- 
> > MySQL General Mailing List
> > For list archives: http://lists.mysql.com/mysql
> > To unsubscribe:   
>
http://lists.mysql.com/[EMAIL PROTECTED]
> >
> >
> >
> > -- 
> > No virus found in this incoming message.
> > Checked by AVG Anti-Virus.
> > Version: 7.0.300 / Virus Database: 265.7.2 -
> Release Date: 21/01/2005
> >
> >
> 
> 
> 
> -- 
> No virus found in this outgoing message.
> Checked by AVG Anti-Virus.
> Version: 7.0.300 / Virus Database: 265.7.2 - Release
> Date: 21/01/2005
> 
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

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

Reply via email to