คัดลอกตารางโดยไม่คัดลอกข้อมูล


153
CREATE TABLE foo SELECT * FROM bar

สำเนาตารางและซ้ำกันมันเป็นตารางใหม่ที่เรียกว่าfoobar

ฉันจะคัดลอกสคีมาของfooไปยังตารางใหม่ที่เรียกว่าbar โดยไม่คัดลอกข้อมูลได้อย่างไร


1
ทำอย่างไรเหมือนกันใน sqlserver 2005
Thunder

บาร์แปลว่าอะไร?
Smit Saraiya


@Thunder ดูเหมือนว่าคุณสามารถทำสำเนา "Colums only" ใน MS SQL ดูสิ่งนี้สำหรับการอ้างอิง: stackoverflow.com/questions/2505728/…
Kevin Worthington

คำตอบ:


140

ลอง:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

หรือ:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0

4
@Thunder: ลองselect * into foo from bar where 1=0
Andomar

29
สิ่งนี้ดูเหมือนจะไม่คัดลอกข้อ จำกัด หรือกุญแจ
Timo Huovinen

15
@TimoHuovinen: อาจcreate table NewTable like OldTableเป็นตัวเลือกสำหรับคุณ ลิงก์คัดลอกมาจากคำตอบที่ถูกลบ
Andomar

1
โปรดใช้ความระมัดระวังอย่างมากเกี่ยวกับการใช้งานภายใต้ภาระงาน ฉันเพิ่งถูกเผาโดยใช้สิ่งนี้ในระดับที่เราสร้างประมาณ 50 ตารางที่แตกต่างกันตามตารางแหล่งที่มาเดียวกันในเวลาเดียวกันกับการแทรกลงในตารางแหล่งที่มาจากกระบวนการอื่น ๆ โดยทั่วไปจะเกิดการล่มสลายของล็อคขนาดใหญ่และต้องรีสตาร์ท MySQL
Mark B

6
อืมม OP สับสนไหม? นี่เป็นคำตอบที่ผิดอย่างโจ่งแจ้งถ้าเราให้ความสนใจกับชื่อและการเน้นในคำถาม "... โดยไม่คัดลอกข้อมูล ... " คำตอบของ RCNell นั้นได้รับการโหวตอย่างถูกต้องที่สุด ไม่แน่ใจว่าทำไมคนนี้ถึงยอมรับ เพียงแค่พูดว่า
xyphenor

421

ลอง

CREATE TABLE foo LIKE bar;

ดังนั้นคีย์และดัชนีจะถูกคัดลอกด้วยเช่นกัน

เอกสาร


40
นี่เป็นคำตอบที่ดีกว่าเนื่องจากสำเนาดัชนีนี้เช่นกัน!
Chaitan

2
มันดีกว่ามาก แต่ก็ยังไม่คัดลอกกุญแจต่างประเทศ
Josef Sábl

@RCNeil CREATE TABLE new_tbl LIKE orig_tbl;คัดลอกสิทธิพิเศษเช่นกันหรือไม่ หรือจะต้องคัดลอกด้วยตนเอง
Pacerier

2
อาจเป็นเพราะคำตอบนี้มาช้ากว่าคำตอบที่ถูกต้อง 4 ปี
pythonian29033

1
@ Pierre-OlivierVares ข้อความเอกสารไม่เกี่ยวข้องโดยตรงกับคำตอบจริง ข้อความคำตอบมีความรัดกุมในการแสดงวิธีการทำสิ่งที่คำถามที่ถามในขณะที่ลิงค์เอกสารให้บริบทเพิ่มเติมเท่านั้น ดังนั้นการ bloating คำตอบด้วยข้อความจากเอกสารประกอบจึงไม่เป็นประโยชน์
Abion47

27
SHOW CREATE TABLE bar;

คุณจะได้คำสั่งสร้างสำหรับตารางนั้นแก้ไขชื่อตารางหรือสิ่งอื่นที่คุณชอบจากนั้นเรียกใช้งาน

นี้จะช่วยให้คุณสามารถคัดลอกดัชนีและปรับแต่งการสร้างตารางด้วยตนเอง

นอกจากนี้คุณยังสามารถเรียกใช้แบบสอบถามภายในโปรแกรม


คุณจะแปลงshow create table barเป็นคำสั่งที่รันได้แบบไดนามิกได้อย่างไร?
Pacerier

ผลที่ได้รับจากการshow create table barดำเนินการแล้วถ้าสคริปต์มีสิทธิ์ในการสร้างตารางคุณสามารถแยกมันแล้วดำเนินการแก้ไขงบตารางเกินไป
Timo Huovinen

create table...จะไม่คัดลอกดัชนี คำตอบนี้เป็นตัวเลือกที่ดีกว่า
bluepinto

2

ต้องการโคลนโครงสร้างของตารางเท่านั้น:

CREATE TABLE foo SELECT * FROM bar WHERE 1 = 2;

ต้องการคัดลอกข้อมูลด้วย:

CREATE TABLE foo as SELECT * FROM bar;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.