我试图在另一个表中插入自动生成的外来值。
我发现可以使用更新级联我正在寻找插入许多行的外键示例表A
得到的产品ID表B
也获得了产品ID但B
也是主键哪个自动递增。如何使用查询或C#
答案 0 :(得分:0)
从这里的数据库来看,你想使用fk
在新表中添加图像。所以触发器在这里不起作用。您需要做的是在inser_id
插入后抓住product
,然后使用id
插入table b
,如下所示:
/*DATABASE TABLES*/
CREATE TABLE `product` (
`productID` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) DEFAULT NULL,
`type` varchar(24) DEFAULT NULL,
`price` float DEFAULT NULL,
`location` varchar(256) DEFAULT NULL,
PRIMARY KEY (`productID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `product_image` (
`imageID` int(11) NOT NULL AUTO_INCREMENT,
`productID` int(11) NOT NULL,
`location` varchar(64) DEFAULT NULL,
`image` varchar(64) DEFAULT NULL,
PRIMARY KEY (`imageID`),
KEY `product_images_ref_product` (`productID`),
CONSTRAINT `product_images_ref_product` FOREIGN KEY (`productID`) REFERENCES `product` (`productID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
//Using C#
MySqlCommand comm = connect.CreateCommand();
comm.CommandText = string.Format("INSERT INTO product( `name`, `type`, `price`, `location` ) VALUES( '{0}', '{1}', {2}, '{3}' ); select last_insert_id();", 'Product 1', 'Product Type', 2.50, 'Here where I live' );
/* Grab the new product id */
int new_id = Convert.ToInt32(comm.ExecuteScalar());
/*
adding images to the table
here you can use a for loop to add more than one images.
*/
MySqlCommand comm = connect.CreateCommand();
comm.CommandText = string.Format( "INSERT INTO product_image ( `productID`, `location`, `image` ) VALUES( {0}, '{1}', {2} );", new_id, 'image_location', 'image_name' );
comm.ExecuteScalar();