การทำรีเลชั่น ใน Mysql ผมมีปัญหาเกี่ยวกับการ เพิ่มลบข้อมูลในตาราง แม่ แต่ฟิลตารางลูกไม่ยอมแก้ไขตามไปด้วย ทีแรกนึกว่า ความสัมพันธ์ของ ตาราง ฐานข้อมูล Mysql
ช่วยตอบกระทู้หน่อยครับ
Date :
3 ธ.ค. 2548 01:15:13
By :
korndee
เท่าที่ทราบนะคับ อย่างแรก type ของตารางต้องเป็น InnoDB คับ
แล้วพอกดดูที่โครงสร้าง (หลังจากกดเลือกตารางใดตารางหนึ่งแล้ว)
ด้านล่างข้างใต้โครงสร้าง มันจะมีเมนู 'มุมมองรีเลชัน' อยู่ (Relation view)
ก็กดเข้าไปเลยครับ ทีนี้ถ้าภายใน DB ของเรามีการกำหนด PK ไว้มากกว่า 1 ตาราง
มันก็จะขึ้นมาให้เราเลือกความสัมพันธ์ได้เลยครับ เราไม่ต้องเขียน code เอง
หรือ เขียน code ประมาณนี้ก็ได้คับ
CREATE TABLE child(id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
ที่มานะคับ http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html
Date :
7 ธ.ค. 2548 22:28:22
By :
nut_t02
ขอบคุณ คุณ Nut_t02 มากครับ ที่ช่วยให้คำชี้แนะ
Date :
8 ธ.ค. 2548 00:38:13
By :
korndee
พอมีรูปให้ดูรึป่าวค่ะ
Date :
2010-11-20 12:31:43
By :
conan
ถ้าท่านไม่เข้าใจ Database Relationship ผมมี function execute transaction sql string ให้ครับ โดยที่ท่านข้อมูล sql เก็บเข้าตัวแปร array ครับ เสร็จแล้วส่งเข้า function ถ้ามันทำเสร็จทุก sql ถึงจะ commit ให้ครับ
Code (PHP)
<?
//ส่วนการเชื่อมต่อฐานข้อมูลผมไม่เขียนนะครับ
function execute_transactions($arr_sql){
//***** จะใช้ Transactions ได้ Table ต้องใช้ ENGINE แบบ InnoDB ด้วยนะครับนั้น *****
if(gettype($arr_sql)!="array"){//ต้องส่ง SQL มาเป็นอาเรย์เท่านั้น
echo "<font color=\"red\">Not Array SQL command!</font><br>";
return false;
} else {
global $conn;
$affect = 0;
mysql_query("BEGIN");
for ($i=0;$i<count($arr_sql);$i++){
mysql_query($arr_sql[$i]);
if(mysql_error()){
mysql_query("ROLLBACK"); //ถ้่าำไม่สามารถกระทำได้ต้องคืนค่าเดิมทั้งหมด
return false; //ออกจากฟังก์ชั่นเมื่อคืนค่าเดิมแล้ว
}else{
$affect += mysql_affected_rows($conn);
}
}//for ($i=0;$i<count($arr_sql);$i++){
mysql_query("COMMIT");
return $affect;//คืนค่าเป็นจำนวนเร็คคอร์ดที่ถูกกระทำ
}
}
//เวลาเรียกใช้เก็บค่า sql stirng ไว้ใน array ครับ รวมเป็นชุดเมื่อครบ transaction แล้วค่อยเรียกใช้ function ครับ
//ตัวอย่างการเรียกใช้ผมครับ
$arr_sql=array();
$arr_sql[]=" DELETE from paid_tmp where job_id =$job_id and cus_id=$cus_id; ";
$arr_sql[]=" UPDATE bill_advance set status=1,approve_by='".$_SESSION["login_name"]."' where job_id =$job_id and cus_id=$cus_id; ";
$arr_sql[]=" UPDATE paid_records set status=2,approve_by='".$_SESSION["login_name"]."' where paid_records.cus_id=$cus_id and status=1; ";
execute_transactions($arr_sql); //funcion ยังคืนค่าเป็น rows affected ทั้งหมดด้วยนะครับประกาศตัวแปรรับค่าได้ ลองเอาไปใช้ดูนะครับ วิธีนี้ท่านต้องเขียน sql ควบคุมการ cascase ให้ครบนะครับ แต่ถ้าทำ casecade design เป็นก็ดีครับสะดวกด้วย
?>
ประวัติการแก้ไข 2010-11-29 13:10:52
Date :
2010-11-29 13:09:22
By :
wad
Load balance : Server 03