Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > ถามเรื่อง mySQL constraints MySQL มีการสร้าง Constraints ได้หรือป่าวครับ ถ้าจะทำทำอย่างไรครับ



 

ถามเรื่อง mySQL constraints MySQL มีการสร้าง Constraints ได้หรือป่าวครับ ถ้าจะทำทำอย่างไรครับ

 



Topic : 030256



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook



MySQL มีการสร้าง Constraints ได้หรือป่าวครับ ถ้าจะทำทำอย่างไรครับ



Tag : - - - -







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2009-08-13 12:39:24 By : suneogaz View : 1958 Reply : 5
 

 

No. 1



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ไม่เข้าใจ เอาเป็น ภาษาไทยซิ






Date : 2009-08-13 12:56:27 By : pjgunner
 


 

No. 2



โพสกระทู้ ( 2,794 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


พร้อมอธิบาย ตัวอย่างด้วย ก็ดีนะครับ
Date : 2009-08-13 13:02:48 By : panyapol
 

 

No. 3



โพสกระทู้ ( 1,528 )
บทความ ( 1 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


constraints mean as below Y/N ?

a foreign key is a type of constraint. MySQL has uneven support for constraints:

PRIMARY KEY: yes as table constraint and column constraint.
FOREIGN KEY: yes as table constraint, but only with InnoDB and BDB storage engines; otherwise parsed but ignored.
CHECK: parsed but ignored in all storage engines.
UNIQUE: yes as table constraint and column constraint.
NOT NULL: yes as column constraint.
DEFERRABLE and other constraint attributes: no support.
The CONSTRAINT clause allows you to name the constraint explicitly, either to make metadata more readable or else to use the name when you want to drop the constraint. The SQL standard requires that the CONSTRAINT clause is optional. If you leave it out, the RDBMS creates a name automatically, and the name is up to the implementation.

credit : http://stackoverflow.com
Date : 2009-08-13 13:32:56 By : Sek-Artdrinker
 


 

No. 4



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

อ๋อ พอดีใช้ phpmyadmin ภาษาไทยมานาน ก็คุ้นๆ นะ 5555

คับตามนั้นเลย ใช้ phpmyadmin เซตได้เลยครับ มีให้เลือกอยู่หลายอัน เช่น ไพรมารี่ , ไม่ซ้ำ, ดัชนี
Date : 2009-08-13 14:03:05 By : pjgunner
 


 

No. 5



โพสกระทู้ ( 29 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook

มีครับ
ส่วนใหญ่แล้วการออกแบบฐานข้อมูลจะมีการใช้บางฟิลด์ข้อมูล เพื่อเชื่อมโยงความสัมพันธ์ระหว่าง table ทำให้ต้องมีการคำนึงถึงเวลา เพิ่ม แก้ไข หรือ ลบฟิลด์ที่ใช้เชื่อมนั้น ไม่เช่นนั้นข้อมูลในฐานข้อมูลอาจมีปัญหาได้

MySQL สนับสนุนคุณสมบัติการใช้ FOREIGN KEY Constraints เพื่อแก้ไขปัญหานี้ได้ แต่ต้องใช้ table เป็นแบบ InnoDB ในบทความนี้ขออธิบายปัญหาที่เกิดขึ้น พร้อมยกตัวอย่างวิธีการใช้ FOREIGN KEY Constraints เพื่อป้องกันปัญหาได้


ตัวอย่างเช่น ต้องการสร้างฐานข้อมูลสำหรับเก็บชื่อ users และแต่ละคนเป็นสมาชิกได้ 1 กลุ่มจากตาราง groups เริ่มต้นออกแบบ table ง่ายๆ ได้ดังนี้

mysql> CREATE TABLE groups (
group_id INT UNSIGNED NOT NULL,
group_name VARCHAR(255),
PRIMARY KEY (group_id)
);
mysql> CREATE TABLE users (
user_id INT UNSIGNED NOT NULL,
group_id INT UNSIGNED NOT NULL,
user_name VARCHAR(255),
PRIMARY KEY (user_id)
);
ใส่ข้อมูลทดสอบดังนี้

mysql> INSERT INTO groups (group_id, group_name) VALUES
(101, 'Accounting'),
(102, 'Engineer'),
(103, 'IT'),
(104, 'Manager');
mysql> INSERT INTO users (user_id, group_id, user_name) VALUES
(501, 101, 'Ms.A'),
(502, 102, 'Ms.B'),
(503, 102, 'Mr.C'),
(504, 103, 'Mr.D'),
(505, 104, 'Mr.E');
จากฐานข้อมูลตัวอย่าง เราใช้ฟิลด์ group_id ในการเชื่อมโยงความสัมพันธ์ระหว่าง groups และ users เพื่อระบุว่า แต่ละ users อยู่ใน group ใด

หากมีการแก้ไขข้อมูล เช่นต้องการลบ (DELETE) ข้อมูล group ที่ชื่อ ‘IT’ ออกจากฐานข้อมูล หากไม่มีวิธีการตรวจสอบ ไปลบแค่จากตาราง ‘groups’ จะทำให้ ข้อมูลของ ‘Mr.D’ ในตาราง ‘users’ มีปัญหาทันที เพราะไม่สามารถอ้างอิงกลับมายังชื่อ group ได้

โดยดีฟอลต์ การสร้าง table ใน MySQL หากไม่มีการระบุชนิด ในคำสั่ง ‘CREATE TABLE’ ตารางที่สร้างได้จะเป็นแบบ MyISAM ซึ่งไม่สามารถสร้าง FOREIGN KEY ได้

สามารถใช้คำสั่ง ‘SHOW ENGINES’ ใน mysql เพื่อตรวจสอบชนิดของ table ที่สร้างได้

mysql> SHOW ENGINES;
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| ndbcluster | NO | Clustered, fault-tolerant tables | NULL | NULL | NULL |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
ถ้าจะใช้ FOREIGN KEY ได้นั้น table ที่มีการอ้างอิงกันทั้งหมด ต้องเป็นชนิด InnoDB คือต้องระบุออปชั่น ENGINE=InnoDB เวลาสร้าง table

เมื่อสร้างเป็น InnoDB แล้ว ระบุฟิลด์ที่ต้องการตรวจสอบ constraints ใน table ที่ใช้อ้างอิงไปยัง table อื่น

เช่นในที่นี้เราต้องการให้ table ‘users’ ใช้ฟิลด์ชื่อ group_id เพื่ออ้างอิงไปยัง table ‘groups’ เราต้องระบุ FOREIGN KEY ใน table ‘users’

วิธีการระบุการอ้างอิง FOREIGN KEY ฟิลด์ ‘group_id’ จาก table ‘groups’

FOREIGN KEY (group_id) REFERENCES groups(group_id)
วิธีการเปลี่ยน table จาก MyISAM ให้เป็น InnoDB และเพิ่ม FOREIGN KEY ทำได้ 2 วิธี

1. ใช้คำสั่ง ‘ALTER TABLE’ เพื่อแก้ไข
2. ใช้คำสั่ง ‘DROP TABLE’ ทิ้งไปแล้วสร้างใหม่ แต่ข้อมูลที่มีอยู่จะหายหมด

ใช้คำสั่ง ALTER TABLE เพื่อเปลี่ยนชนิดเป็น InnoDB

เราสามารถใช้คำสั่ง ‘ALTER TABLE’ เพื่อเปลี่ยนชนิดของ table หรือแก้ไขฟิลด์ต่างๆ ได้

การใช้คำสั่ง ALTER TABLE เพื่อเปลี่ยนชนิด table เป็นแบบ InnoDB

mysql> ALTER TABLE groups ENGINE=InnoDB;
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE users ENGINE=InnoDB;
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
เพิ่ม FOREIGN KEY ใน table ‘users’

mysql> ALTER TABLE `users` ADD FOREIGN KEY (group_id) REFERENCES groups(group_id);
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
หมายเหตุ ต้องดูผลลัพธ์การใช้คำสั่ง ALTER TABLE ด้วย ว่าการเปลี่ยนแปลง table สำเร็จหรือไม่

ลบแล้วสร้าง TABLE ใหม่แบบ InnoDB และใช้ FOREIGN KEY

ใช้คำสั่ง DROP TABLE เพื่อลบ table ‘users’

mysql> DROP TABLE users;
mysql> DROP TABLE groups;
ใช้คำสั่ง CREATE TABLE เพื่อสร้าง table ใหม่ แล้ว ใส่ข้อมูลลงไปเหมือนเดิม

mysql> CREATE TABLE groups (
group_id INT UNSIGNED NOT NULL,
group_name VARCHAR(255),
PRIMARY KEY (group_id)
) ENGINE=InnoDB;
mysql> INSERT INTO groups (group_id, group_name) VALUES
(101, 'Accounting'),
(102, 'Engineer'),
(103, 'IT'),
(104, 'Manager');
mysql> CREATE TABLE users (
user_id INT UNSIGNED NOT NULL,
group_id INT UNSIGNED NOT NULL,
user_name VARCHAR(255),
PRIMARY KEY (user_id),
FOREIGN KEY (group_id) REFERENCES groups(group_id)
) ENGINE=InnoDB;
mysql> INSERT INTO users (user_id, group_id, user_name) VALUES
(501, 101, 'Ms.A'),
(502, 102, 'Ms.B'),
(503, 102, 'Mr.C'),
(504, 103, 'Mr.D'),
(505, 104, 'Mr.E');
สังเกตสิ่งที่เพิ่มขึ้น
ที่มา http://spalinux.com/2010/01/creating_mysql_foreign_key_constraints
Date : 2013-07-22 11:53:37 By : kongoon
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ถามเรื่อง mySQL constraints MySQL มีการสร้าง Constraints ได้หรือป่าวครับ ถ้าจะทำทำอย่างไรครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่