I'm using mysql-max 4.04. This works.

drop table if exists Parent;
create table Parent (
        id int not null auto_increment primary key
) type = InnoDB;

drop table if exists Child;
create table Child (
        id int not null auto_increment primary key,
        parent_id int not null
) type = InnoDB;
alter table Child add index(parent_id);
alter table Child add constraint foreign key(parent_id) references
Parent(id) on delete cascade;

mysql> insert into Parent values(1);
Query OK, 1 row affected (0.04 sec)

mysql> insert into Parent values(2);
Query OK, 1 row affected (0.04 sec)

mysql> insert into Parent values(3);
Query OK, 1 row affected (0.03 sec)

mysql> select * from Parent;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.00 sec)

mysql> insert into Child (parent_id) values (1);
Query OK, 1 row affected (0.04 sec)

mysql> insert into Child (parent_id) values (2);
Query OK, 1 row affected (0.04 sec)

mysql> insert into Child (parent_id) values (3);
Query OK, 1 row affected (0.11 sec)

mysql> select * from Child;
+----+-----------+
| id | parent_id |
+----+-----------+
|  2 |         1 |
|  3 |         2 |
|  4 |         3 |
+----+-----------+
3 rows in set (0.00 sec)

mysql> delete from Parent where id = 1;
Query OK, 1 row affected (0.04 sec)

mysql> select * from Child;
+----+-----------+
| id | parent_id |
+----+-----------+
|  3 |         2 |
|  4 |         3 |
+----+-----------+
2 rows in set (0.00 sec)

you see the cascade. the only thing I can suggest is have a look at your
msql version, or use the syntax I have above...

good luck



"R.Dobson" wrote:
> 
> mmm, i've just tried the example within the mysql docs:
> 
> CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
> CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id),
>              FOREIGN KEY (parent_id) REFERENCES parent(id)
>              ON DELETE cascade
> ) TYPE=INNODB;
> 
> Now, insert a couple of lies of data:
> 
> mysql> insert into parent values(1);
> Query OK, 1 row affected (0.00 sec)
> 
> mysql> insert into parent values(2);
> Query OK, 1 row affected (0.00 sec)
> 
> mysql> insert into parent values(3);
> Query OK, 1 row affected (0.00 sec)
> 
> mysql> insert into child values(1,1);
> Query OK, 1 row affected (0.01 sec)
> 
> mysql> insert into child values(2,2);
> Query OK, 1 row affected (0.00 sec)
> 
> mysql> insert into child values(3,3);
> Query OK, 1 row affected (0.00 sec)
> 
> mysql> select * from child;
> +------+-----------+
> | id   | parent_id |
> +------+-----------+
> |    1 |         1 |
> |    2 |         2 |
> |    3 |         3 |
> +------+-----------+
> 3 rows in set (0.00 sec)
> 
> mysql> select * from parent;
> +----+
> | id |
> +----+
> |  1 |
> |  2 |
> |  3 |
> +----+
> 3 rows in set (0.00 sec)
> 
> When I come to try to delete some data from the parent table i'm getting
> errors as in:
> 
> mysql> delete from parent where id=1;
> ERROR 1217: Cannot delete a parent row: a foreign key constraint fails
> 
> any thoughts?
> 
> cheers,tia
> r
> 
> Jeff Mathis wrote:
> 
> >I just looked at your table syntax. you've got two auto_increment pk
> >columns. do you always have a 1:1 correspondence between the name and
> >gene tables? would it not be better to have a gene_id column in name,
> >put an index on it, and then issue:
> >
> >"alter table name add foreign key(gene_id) references gene(id) on delete
> >cascade;"
> >
> >In fact, I'm not sure you can actually create the constraint as you
> >currently describe it ....
> >
> >
> >"R.Dobson" wrote:
> >
> >
> >>  Hi, yes, I should have included in the first mail. They are:
> >>
> >>mysql> show table status like 'gene%';
> >>+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+----------------+-----------------------+
> >>| Name | Type   | Row_format | Rows | Avg_row_length | Data_length |
> >>Max_data_length | Index_length | Data_free | Auto_increment |
> >>Create_time | Update_time | Check_time | Create_options |
> >>Comment               |
> >>+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+----------------+-----------------------+
> >>| gene | InnoDB | Dynamic    |    0 |              0 |       16384
> >>|            NULL |            0 |         0 |              1 |
> >>NULL        | NULL        | NULL       |                | InnoDB free:
> >>55296 kB |
> >>+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+----------------+-----------------------+
> >>1 row in set (0.00 sec)
> >>
> >>mysql> show table status like 'name%';
> >>+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+----------------+-----------------------+
> >>| Name | Type   | Row_format | Rows | Avg_row_length | Data_length |
> >>Max_data_length | Index_length | Data_free | Auto_increment |
> >>Create_time | Update_time | Check_time | Create_options |
> >>Comment               |
> >>+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+----------------+-----------------------+
> >>| name | InnoDB | Dynamic    |    1 |          16384 |       16384
> >>|            NULL |            0 |         0 |             10 |
> >>NULL        | NULL        | NULL       |                | InnoDB free:
> >>55296 kB |
> >>+------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+----------------+-----------------------+
> >>1 row in set (0.00 sec)
> >>
> >>cheers
> >>Rich
> >>
> >>Egor Egorov wrote:
> >>
> >>
> >>
> >>>"R.Dobson" <[EMAIL PROTECTED]> wrote:
> >>>
> >>>
> >>>
> >>>
> >>>>Hi, I have a db where I have converted all the tables innodb. I have 2 tables in 
> >>>>particular called gene and name.
> >>>>
> >>>>They both have a primary key call id. I want the primary key from name to be 
> >>>>deleted when the corresponding key is deleted from gene.
> >>>>
> >>>>It doesn't seem to be happening as yet!
> >>>>
> >>>>show columns from name;
> >>>>+---------------------+-----------------------+------+-----+---------+----------------+
> >>>>| Field               | Type                  | Null | Key | Default | Extra     
> >>>>     |
> >>>>+---------------------+-----------------------+------+-----+---------+----------------+
> >>>>| id                  | mediumint(8) unsigned |      | PRI | NULL    | 
> >>>>auto_increment |
> >>>>| other_name          | varchar(100)          |      |     |         |           
> >>>>     |
> >>>>| other_symbol        | varchar(100)          |      |     |         |           
> >>>>     |
> >>>>| refseq_ID           | varchar(20)           | YES  |     | NULL    |           
> >>>>     |
> >>>>| GO                  | varchar(20)           | YES  |     | NULL    |           
> >>>>     |
> >>>>| locus_link          | varchar(20)           | YES  |     | NULL    |           
> >>>>     |
> >>>>| other_species_index | varchar(20)           | YES  |     | NULL    |           
> >>>>     |
> >>>>+---------------------+-----------------------+------+-----+---------+----------------+
> >>>>7 rows in set (0.00 sec)
> >>>>
> >>>>mysql> show columns from gene;
> >>>>+---------+-----------------------+------+-----+---------+----------------+
> >>>>| Field   | Type                  | Null | Key | Default | Extra          |
> >>>>+---------+-----------------------+------+-----+---------+----------------+
> >>>>| id      | mediumint(8) unsigned |      | PRI | NULL    | auto_increment |
> >>>>| name    | varchar(100)          |      |     |         |                |
> >>>>| species | varchar(100)          |      |     |         |                |
> >>>>+---------+-----------------------+------+-----+---------+----------------+
> >>>>3 rows in set (0.00 sec)
> >>>>
> >>>>
> >>>>mysql>alter table name add foreign key(id) references gene(id) on delete cascade;
> >>>>
> >>>>mysql> select * from gene;
> >>>>+----+------+---------+
> >>>>| id | name | species |
> >>>>+----+------+---------+
> >>>>|  9 | hi   | human   |
> >>>>+----+------+---------+
> >>>>1 row in set (0.00 sec)
> >>>>
> >>>>mysql> select * from name;
> >>>>+----+------------+--------------+-----------+------+------------+---------------------+
> >>>>| id | other_name | other_symbol | refseq_ID | GO   | locus_link | 
> >>>>other_species_index |
> >>>>+----+------------+--------------+-----------+------+------------+---------------------+
> >>>>|  9 | hi         | human        | i         | i    | i          | i             
> >>>>      |
> >>>>+----+------------+--------------+-----------+------+------------+---------------------+
> >>>>1 row in set (0.00 sec)
> >>>>
> >>>>mysql> delete from gene where id=9;
> >>>>Query OK, 1 row affected (0.00 sec)
> >>>>
> >>>>mysql> select * from name;
> >>>>+----+------------+--------------+-----------+------+------------+---------------------+
> >>>>| id | other_name | other_symbol | refseq_ID | GO   | locus_link | 
> >>>>other_species_index |
> >>>>+----+------------+--------------+-----------+------+------------+---------------------+
> >>>>|  9 | hi         | human        | i         | i    | i          | i             
> >>>>      |
> >>>>+----+------------+--------------+-----------+------+------------+---------------------+
> >>>>1 row in set (0.00 sec)
> >>>>
> >>>>mysql> select * from gene;
> >>>>Empty set (0.00 sec)
> >>>>
> >>>>The entry from name should be deleted as well?
> >>>>
> >>>>
> >>>>
> >>>>
> >>>Check if table types are InnoDB with SHOW CREATE TABLE or SHOW TABLE STATUS 
> >>>statements.
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >
> >
> >
> 
> --
> 
> Richard Dobson
> MRC Bright Study
> Clinical Pharmacolgy
> St Bartholomew's and the Royal London
> School of Medicine and Dentistry
> Charterhouse Square
> London EC1M 6BQ
> Tel: 020-7882-5670
> Mob: 07711-522926
> Fax: 020-7882-5672
> [EMAIL PROTECTED]

-- 
Jeff Mathis, Ph.D.                      505-955-1434
The Prediction Company                  [EMAIL PROTECTED]
525 Camino de los Marquez, Ste 6        http://www.predict.com
Santa Fe, NM 87505

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

Reply via email to