On Tue, Mar 11, 2008 at 1:51 AM, smriti Sebastian
<[EMAIL PROTECTED]> wrote:
> I created two tables like this:
> create table customer(SID int,name varchar(20),primary key(SID));
> create table orders(OID int,O_Date date,customer_SID int,primary
> key(OID),Foreign key(customer_SID) references customer(SID) on delete
> cascade on update cascade);
>
> And inserted values into it.but when i deleted a row from customer which has
> reference in orders it didn't showed any error..it deleted the value in
> customer table while it's reference in orders remain unchanged.Plz help me
> in solving this.
>
mysql> DROP TABLE IF EXISTS `orders`,`customer`;
Query OK, 0 rows affected, 1 warning (0.17 sec)
mysql> CREATE TABLE customer(
-> SID int,
-> name varchar( 20 ) ,
-> PRIMARY KEY ( SID )
-> );
Query OK, 0 rows affected (0.27 sec)
mysql> CREATE TABLE orders(
-> OID int,
-> O_Date date,
-> customer_SID int,
-> PRIMARY KEY ( OID ) ,
-> FOREIGN KEY ( customer_SID ) REFERENCES customer( SID ) ON DELETE CASCADE
ON UPDATE CASCADE
-> );
Query OK, 0 rows affected (0.36 sec)
mysql> INSERT INTO `customer` (`SID` ,`name`)
-> VALUES ('1', 'Rob');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO `orders` (`OID` ,`O_Date` ,`customer_SID`)
-> VALUES ('0', '2008-03-11', '1');
Query OK, 1 row affected (0.19 sec)
mysql> SELECT * FROM `customer`
-> INNER JOIN `orders` ON `customer_SID` =SID;
+-----+------+-----+------------+--------------+
| SID | name | OID | O_Date | customer_SID |
+-----+------+-----+------------+--------------+
| 1 | Rob | 0 | 2008-03-11 | 1 |
+-----+------+-----+------------+--------------+
1 row in set (0.33 sec)
mysql> DELETE FROM `customer`
-> WHERE SID = 1;
Query OK, 1 row affected (0.16 sec)
mysql> SELECT * FROM `orders`;
Empty set (0.00 sec)
mysql> SELECT `ENGINE` FROM `information_schema`.`TABLES`
-> WHERE `TABLE_NAME` IN('orders','customer');
+--------+
| ENGINE |
+--------+
| InnoDB |
| InnoDB |
+--------+
2 rows in set (0.45 sec)
mysql> SHOW CREATE TABLE `customer`\G
*************************** 1. row ***************************
Table: customer
Create Table: CREATE TABLE `customer` (
`SID` int(11) NOT NULL default '0',
`name` varchar(20) default NULL,
PRIMARY KEY (`SID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> SHOW CREATE TABLE `orders`\G
*************************** 1. row ***************************
Table: orders
Create Table: CREATE TABLE `orders` (
`OID` int(11) NOT NULL default '0',
`O_Date` date default NULL,
`customer_SID` int(11) default NULL,
PRIMARY KEY (`OID`),
KEY `customer_SID` (`customer_SID`),
CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`customer_SID`) REFERENCES `customer`
(`SID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
If you do not specify ENGINE and your default engine (probably MyISAM
) engine does not support FK constraints then MySQL will silently
ignore your constraint.
Also:
do you want any of these columns to be able to be NULL? I would think
you probably want the NOT NULL option for everything involved.
I like to use 'USING' in my queries
mysql> SELECT * FROM `customer`
-> INNER JOIN `orders` USING(`SID`);
but can not because you have different names for the columns. I would
suggest having single naming convention.
--
Rob Wultsch
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]