|
|
|
ต้องการสร้าง FOREIGN KEY แต่มีปัญหาครับ สร้างไม่ได้ |
|
|
|
|
|
|
|
ลองสร้างจากตัวอย่างนี้ครับ https://www.thaicreate.com/tutorial/mysql-relation-cascade-on-delete-on-update.html
-ตั้งค่าให้ฐานข้อมูลใช้งาน InnoDB แล้ว
หลักจากสร้างตารางแล้ว ผมก็เข้าไปที่มุมมองรีเลชั่นชิพ ของ appserv แต่ไม่สามารถสร้างความสัมพันธ์ได้
ลองลบตารางทิ้งแล้ว สร้างด้วยภาษา sql ก็ไม่สามารถสร้างตารางได้ แสดงข้อความ #1005 - Can't create table 'table_name' (errno: 150)
ผู้รู้ช่วยตอบทีครับ
ด้านล่าง โค้ดสร้างตารางครับ
ตารางหลัก
Code (SQL)
-- โครงสร้างตาราง `member`
--
CREATE TABLE `member` (
`IDstd` varchar(6) NOT NULL COMMENT 'รหัสนักเรียน',
`Username` varchar(16) NOT NULL,
`Password` varchar(100) NOT NULL,
`class` int(2) NOT NULL COMMENT 'ชั้นปี',
`room` int(2) NOT NULL COMMENT 'ห้อง',
`year` int(4) NOT NULL COMMENT 'ปีการศึกษา',
`rang` varchar(10) NOT NULL COMMENT 'ระดับ',
`status` enum('0','1','2') NOT NULL COMMENT 'สถานะ',
`date_reg` varchar(10) NOT NULL COMMENT 'วันที่ลงทะเบียน',
PRIMARY KEY (`IDstd`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- dump ตาราง `member`
--
INSERT INTO `member` VALUES ('admin', 'admin', '21232f297a57a5a743894a0e4a801fc3', 6, 1, 0, 'ADMIN', '1', '');
ตารางที่ต้องการสร้าง FOREIGN KEY ด้วย
Code (SQL)
-- โครงสร้างตาราง `profile`
--
CREATE TABLE `profile` (
`IDPF` int(6) NOT NULL auto_increment,
`IDstd` varchar(6) collate utf8_unicode_ci NOT NULL COMMENT 'รหัสนักเรียน+Username',
`class` int(2) NOT NULL COMMENT 'ชั้นปี',
`room` int(2) NOT NULL COMMENT 'ห้อง',
`year` int(4) NOT NULL COMMENT 'ปีการศึกษา',
`Prefix` varchar(10) collate utf8_unicode_ci NOT NULL COMMENT 'คำนำหน้า',
`fname` varchar(50) collate utf8_unicode_ci NOT NULL COMMENT 'ชื่อ',
`lname` varchar(50) collate utf8_unicode_ci NOT NULL COMMENT 'นามสกุล',
`nickname` varchar(10) collate utf8_unicode_ci NOT NULL COMMENT 'ชื่อเล่น',
`dbirth` int(2) NOT NULL COMMENT 'วันเกิด',
`mbirth` varchar(20) collate utf8_unicode_ci NOT NULL COMMENT 'เดือนเกิด',
`ybirth` int(4) NOT NULL COMMENT 'ปีเกิด',
`age` int(2) NOT NULL COMMENT 'อายุ',
`IDnumber` varchar(13) collate utf8_unicode_ci NOT NULL COMMENT 'รหัสประชาชน',
`address` varchar(20) collate utf8_unicode_ci NOT NULL COMMENT 'ที่อยู่',
`tumbol` varchar(50) collate utf8_unicode_ci NOT NULL COMMENT 'ตำบล',
`amphur` varchar(50) collate utf8_unicode_ci NOT NULL COMMENT 'อำเภอ',
`province` varchar(50) collate utf8_unicode_ci NOT NULL COMMENT 'จังหวัด',
`postid` int(5) NOT NULL COMMENT 'รหัสไปรษณีย์',
`telhome` varchar(9) collate utf8_unicode_ci NOT NULL COMMENT 'เบอร์บ้าน',
`telmobile` varchar(10) collate utf8_unicode_ci NOT NULL COMMENT 'เบอร์มือถือ',
`email` varchar(50) collate utf8_unicode_ci NOT NULL,
`pic` varchar(10) collate utf8_unicode_ci NOT NULL COMMENT 'รูปนักเรียน',
`fa_prefix` varchar(20) collate utf8_unicode_ci NOT NULL,
`fa_fname` varchar(30) collate utf8_unicode_ci NOT NULL,
`fa_lname` varchar(30) collate utf8_unicode_ci NOT NULL,
`fa_age` int(2) NOT NULL,
`fa_job` varchar(30) collate utf8_unicode_ci NOT NULL,
`fa_salary` varchar(20) collate utf8_unicode_ci NOT NULL,
`fa_tel` varchar(10) collate utf8_unicode_ci NOT NULL,
`ma_prefix` varchar(20) collate utf8_unicode_ci NOT NULL,
`ma_fname` varchar(20) collate utf8_unicode_ci NOT NULL,
`ma_lname` varchar(20) collate utf8_unicode_ci NOT NULL,
`ma_age` int(2) NOT NULL,
`ma_job` varchar(30) collate utf8_unicode_ci NOT NULL,
`ma_salary` varchar(20) collate utf8_unicode_ci NOT NULL,
`ma_tel` varchar(10) collate utf8_unicode_ci NOT NULL,
`fa_ma` enum('0','1','2','3','4') collate utf8_unicode_ci NOT NULL default '0' COMMENT 'สถานะภาพครอบครัง',
`PFupdate` enum('0','1') collate utf8_unicode_ci NOT NULL default '0',
PRIMARY KEY (`IDPF`),
FOREIGN KEY (IDstd) REFERENCES member (IDstd) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
--
-- dump ตาราง `profile`
--
INSERT INTO `profile` VALUES (1, 'admin', 6, 1, 0, '', 'อัคนี', 'ธนูสูตร', '', 0, '', 0, 0, '', '', '', '', '', 0, '', '', '', '', '', '', '', 0, '', '', '', '', '', '', 0, '', '', '', '0', '0');
Tag : PHP, MySQL
|
|
|
|
|
|
Date :
2014-01-13 15:07:50 |
By :
akkaneetha |
View :
3068 |
Reply :
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หรือ ถ้าจะสร้างความสัมพันธ์ด้วย มุมมองรีเรชั่นชิพ พอเลือกตารางแล้วบันทึก ก็ขึ้นข้อความ ว่า
Error creating foreign key (check data types) : IDstd
ลองดูแล้วก็ไม่รุ็ว่าจะแก้ยังไง
|
|
|
|
|
Date :
2014-01-13 15:12:04 |
By :
akkaneetha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมลองดูแล้ว ถ้าเปลี่ยน TYPE ของฟิลด์ IDstd ทั้ง 2 ตารางเป็น INT จะใช้ได้เลยครับ
MEMBER
`IDstd` varchar(6) NOT NULL COMMENT 'รหัสนักเรียน',
เป็น
`IDstd` int(6) NOT NULL COMMENT 'รหัสนักเรียน',
PROFILE
`IDstd` varchar(6) collate utf8_unicode_ci NOT NULL COMMENT 'รหัสนักเรียน+Username',
เป็น
`IDstd` int(6) NOT NULL COMMENT 'รหัสนักเรียน+Username',
|
|
|
|
|
Date :
2014-01-13 16:47:35 |
By :
{Cyberman} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MEMBER
ENGINE=InnoDB DEFAULT CHARSET=utf8;
PROFILE
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
ตอบไปแล้วก็มานั่งสงสัย ว่าทำไมโค๊ดที่อื่นๆเขาใช้ VARCHAR ได้
ก็เลยพิจารณาดู ตารางทั้งสองไม่เหมือนกันนี่เอง
ตัดส่วนสีแดงออก หรือไม่ก็เพิ่มให้เหมือนกัน ก็น่าจะใช้ได้
เพราะฟิลด์ที่ทำ FOREIGN KEY จะต้องมีข้อมูลที่ตรงกัน
|
|
|
|
|
Date :
2014-01-13 16:57:01 |
By :
{Cyberman} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ จะลองดูครับ
|
|
|
|
|
Date :
2014-01-14 11:13:36 |
By :
akkaneetha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|