MySQL จะสร้าง FK โดยอ้างอิง 2 คอลัมน์ยังไงคะ ?

เกี่ยวกับ ปัญหาการใช้งาน การติดตั้ง ฐานข้อมูล MySql Oracle MSSQL ect...
การเขียน คำสั่ง SQL เพื่อดึกข้อมูล บอร์ดนี้ควรระบุโครงสร้างตารางของท่านในคำถามด้วยนะ

Moderator: mindphp

DimmerP

MySQL จะสร้าง FK โดยอ้างอิง 2 คอลัมน์ยังไงคะ ?

Post by DimmerP » 23/01/2012 9:31 am

Code: Select all


CREATE TABLE invoice_inventory
(vendor_no char(4) not null,
invoice_no char(4) not null,
item_no char(4) not null references inventory_item(item_no),
quantity_added int not null,
item_paid decimal not null,
primary key (vendor_no,invoice_no,item_no))

FOREIGN KEY (vendor_no,invoice_no) REFERENCES invoice(vendor_no,invoice_no)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = INNODB CHARSET = tis620


ใช้คำสั่งแบบนี้แล้ว สร้างไม่ได้ค่ะ

พอไปเพิ่มใน มุมมองรีเลชั่นใน phpmyadmin แล้วเป็นแบบนี้ค่ะ

Error creating foreign key (check data types) : invoice_no

ไปอ่านใน

http://dev.mysql.com/doc/refman/5.0/en/ ... aints.html

แล้วก็ งง ค่ะ คือมีเวลาไม่มาก ฝากผู้รู้ช่วยตอบด้วยนะคะ


ขอบคุณค่ะ _/|\_
Last edited by mindphp on 23/01/2012 11:19 pm, edited 1 time in total.
Reason: ย้ายกระทู้โพสผิดหมวด

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 23800
Joined: 22/09/2008 6:18 pm
Contact:

Re: MySQL จะสร้าง FK โดยอ้างอิง 2 คอลัมน์ยังไงคะ ?

Post by mindphp » 23/01/2012 11:12 pm

ลองเช็ค data type ของ Field ในตาราง invoice ที่มันแจ้ง Error ออกมาครับ
ว่าตาราง invoice กำหนด ไว้เหมือนกันตารางที่ท่านต้องการสร้างหรือเปล่า
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

touleg
PHP Super Member
PHP Super Member
Posts: 480
Joined: 25/01/2010 11:57 pm
Contact:

Re: MySQL จะสร้าง FK โดยอ้างอิง 2 คอลัมน์ยังไงคะ ?

Post by touleg » 24/01/2012 1:43 am

Code: Select all

CREATE TABLE invoice_inventory(
vendor_no char(4) not null,
invoice_no char(4) not null,
item_no char(4) not null,
quantity_added int not null,
item_paid decimal not null,
primary key (vendor_no,invoice_no,item_no),
FOREIGN KEY (vendor_no) REFERENCES vender(vendor_no) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (invoice_no) REFERENCES invoice(invoice_no) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (item_no) REFERENCES inventory_item(item_no) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB CHARSET=tis620
หมายเหตุ:
- ถ้าเซต on update เป็น cascade ระวังจะลบข้อมูลไม่ได้นะครับ แนะนำให้ปล่อยเป็น default ไป
- ตารางแม่ที่ตารางลูกเชื่อม FK ไปจะต้องเป็น Engine innodb ด้วยไม่งั้น FK กันไม่ได้
- ชนิดของข้อมูลของ Field ที่ references จะต้องตรงกัน

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “SQL - Database”

Who is online

Users browsing this forum: No registered users and 52 guests