Vinita,

thank you for the bug report. The BLOB silently changes the CHAR(20) field
to a VARCHAR(20) field in te parent table. But the field in the child stays
CHAR(20).

There is a bug in ON UPDATE CASCADE which forgets to pad the field in the
child table with spaces. The child table becomes corrupt because a fixed
length field is shorter than it should be!

The fix will be in 4.0.14.

Thank you,

Heikki Tuuri
Innobase Oy
http://www.innodb.com
Transactions, foreign keys, and a hot backup tool for MySQL

----- Original Message ----- 
From: "vinita Vigine Murugiah" <[EMAIL PROTECTED]>
Newsgroups: mailing.database.mysql
Sent: Wednesday, June 11, 2003 9:03 AM
Subject: ON DELETE CASCADE ON UPDATE CASCADE


> HI I'm not sure  whether it's a bug or my configuration problem??
>
> I have upgraded mysql from 3.23.53 to 4.0.12 so that the on update
> cascade will work! then the I got mysql  crash when I did the update.
> Any idea??
>
> mysql> CREATE TABLE software (
>     ->         softwareID   CHAR(20)  NOT NULL,
>     ->         softwareName   CHAR(100),
>     ->         softwareVers   CHAR(20),
>     ->         installedDate   DATE,
>     ->         softwareSource   BLOB,
>     ->         PRIMARY KEY (softwareID)
>     -> ) TYPE=INNODB;
> Query OK, 0 rows affected (0.04 sec)
>
> mysql> CREATE TABLE software_machineOSs (
>     ->         softwareID   CHAR(20) NOT NULL,
>     ->         osName   CHAR(20) NOT NULL,
>     ->         osRevision   CHAR(20),
>     ->         INDEX (softwareID),
>     ->         FOREIGN KEY (softwareID) REFERENCES software (softwareID)
> ON DELETE CASCADE ON UPDATE CASCADE,
>     ->         PRIMARY KEY (softwareID, osName)
>     -> ) TYPE=INNODB;
> Query OK, 0 rows affected (0.00 sec)
>
> mysql> insert into software (softwareID,softwareName,softwareVers)
> values ("test-1.1", "test", "1.1");
> Query OK, 1 row affected (0.00 sec)
>
> mysql> insert into software_machineOSs (softwareID,osName,osRevision)
> values ("test-1.1", "win", "2002");
> Query OK, 1 row affected (0.00 sec)
>
> mysql> select * from software;
>
+------------+--------------+--------------+---------------+----------------
+
> | softwareID | softwareName | softwareVers | installedDate |
> softwareSource |
>
+------------+--------------+--------------+---------------+----------------
+
> | test-1.1   | test         | 1.1          | NULL          |
> NULL           |
>
+------------+--------------+--------------+---------------+----------------
+
> 1 row in set (0.00 sec)
>
> mysql> select * from software_machineOSs;
> +------------+--------+------------+
> | softwareID | osName | osRevision |
> +------------+--------+------------+
> | test-1.1   | win    | 2002       |
> +------------+--------+------------+
> 1 row in set (0.00 sec)
>
> mysql> update software set softwareID="test-1.6" where
> softwareID="test-1.1";
> Query OK, 1 row affected (0.01 sec)
> Rows matched: 1  Changed: 1  Warnings: 0
>
> mysql> select * from software;
>
+------------+--------------+--------------+---------------+----------------
+
> | softwareID | softwareName | softwareVers | installedDate |
> softwareSource |
>
+------------+--------------+--------------+---------------+----------------
+
> | test-1.6   | test         | 1.1          | NULL          |
> NULL           |
>
+------------+--------------+--------------+---------------+----------------
+
> 1 row in set (0.00 sec)
>
> mysql> select * from software_machineOSs;
> ERROR 2013: Lost connection to MySQL server during query
> mysql>
>
> ****** mungah.cs.mu.OZ.AU.err ************
>
> mysqld got signal 11;
> This could be because you hit a bug. It is also possible that this binary
> or one of the libraries it was linked against is corrupt, improperly
built,
> or misconfigured. This error can also be caused by malfunctioning
hardware.
> We will try our best to scrape up some info that will hopefully help
> diagnose
> the problem, but since we have already crashed, something is definitely
> wrong
> and this may fail.
>
> key_buffer_size=16777216
> read_buffer_size=131072
> sort_buffer_size=524280
> max_used_connections=1
> max_connections=100
> threads_connected=1
> It is possible that mysqld could use up to
> key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections
> = 80383 K
> bytes of memory
> Hope that's ok; if not, decrease some variables in the equation.
>
> 030611 13:59:39  mysqld restarted
> 030611 13:59:39  InnoDB: Database was not shut down normally.
> InnoDB: Starting recovery from log files...
> InnoDB: Starting log scan based on checkpoint at
> InnoDB: log sequence number 0 137838052
> InnoDB: Doing recovery: scanned up to log sequence number 0 137838052
> InnoDB: Last MySQL binlog file position 0 2391, file name ./mungah-bin.043
> 030611 13:59:39  InnoDB: Flushing modified pages from the buffer pool...
> 030611 13:59:39  InnoDB: Started
> /usr/pkg/libexec/mysqld: ready for connections.
> Version: '4.0.12-log'  socket: '/var/mysql/mysql.sock'  port: 3306
>
> *********** mysqlbinlog mungah-bin.043********************
> update software set softwareID="test-1.6" where softwareID="test-1.1";
> # at 2391
> #030611 13:59:39 server id 1  log_pos 2391      Stop
>
>
>
############################################################################
#######################
> When I don't have the column softwareSource  ( BLOB) it works fine!!!
> -----------------------------------------------------------------------
>
> mysql> CREATE TABLE software (
>     ->         softwareID   CHAR(20)  NOT NULL,
>     ->         softwareName   CHAR(100),
>     ->         softwareVers   CHAR(20),
>     ->         installedDate   DATE,
>     ->         PRIMARY KEY (softwareID)
>     -> ) TYPE=INNODB;
> Query OK, 0 rows affected (0.01 sec)
>
> mysql> CREATE TABLE software_machineOSs (
>     ->         softwareID   CHAR(20) NOT NULL,
>     ->         osName   CHAR(20) NOT NULL,
>     ->         osRevision   CHAR(20),
>         INDEX (softwareID),
>         FOREIGN KEY (softwareID) REFERENCES software (softwareID) ON
> DELETE CASCADE ON UPDATE CASCADE,
>         PRIMARY KEY (softwareID, osName)
> ) TYPE=INNODB;
>         osRevision   CHAR(20),
>     ->         INDEX (softwareID),
>     ->         FOREIGN KEY (softwareID) REFERENCES software (softwareID)
> ON DELETE CASCADE ON UPDATE CASCADE,
>     ->         PRIMARY KEY (softwareID, osName)
>     -> ) TYPE=INNODB;
> Query OK, 0 rows affected (0.01 sec)
>
> mysql>
> mysql> insert into software (softwareID,softwareName,softwareVers)
> values ("test-1.1", "test", "1.1");
> Query OK, 1 row affected (0.00 sec)
>
> mysql> insert into software_machineOSs (softwareID,osName,osRevision)
> values ("test-1.1", "win", "2002");
> Query OK, 1 row affected (0.00 sec)
>
> mysql> select * from software;
> +------------+--------------+--------------+---------------+
> | softwareID | softwareName | softwareVers | installedDate |
> +------------+--------------+--------------+---------------+
> | test-1.1   | test         | 1.1          | NULL          |
> +------------+--------------+--------------+---------------+
> 1 row in set (0.01 sec)
>
> mysql> select * from software_machineOSs;
> +------------+--------+------------+
> | softwareID | osName | osRevision |
> +------------+--------+------------+
> | test-1.1   | win    | 2002       |
> +------------+--------+------------+
> 1 row in set (0.00 sec)
>
> mysql> update software set softwareID="test-1.6" where
> softwareID="test-1.1";
> Query OK, 1 row affected (0.00 sec)
> Rows matched: 1  Changed: 1  Warnings: 0
>
> mysql> select * from software;
> +------------+--------------+--------------+---------------+
> | softwareID | softwareName | softwareVers | installedDate |
> +------------+--------------+--------------+---------------+
> | test-1.6   | test         | 1.1          | NULL          |
> +------------+--------------+--------------+---------------+
> 1 row in set (0.00 sec)
>
> mysql> select * from software_machineOSs;
> +------------+--------+------------+
> | softwareID | osName | osRevision |
> +------------+--------+------------+
> | test-1.6   | win    | 2002       |
> +------------+--------+------------+
> 1 row in set (0.00 sec)
>
>
> -- 
>
>
> warm regards
> Vinita Vigine Murugiah
> Email : [EMAIL PROTECTED] Ph : (03) 8344 1273
>
>
>
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:
http://lists.mysql.com/[EMAIL PROTECTED]
>



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

Reply via email to