วางหลายตารางในนัดเดียวใน mysql


103

วิธีการวางหลายตารางจากฐานข้อมูลเดียวในคำสั่งเดียว สิ่งที่ต้องการ,

> use test; 
> drop table a,b,c;

โดยที่ a, b, c คือตารางจากการทดสอบฐานข้อมูล


17
คุณตอบตัวเองแล้ว
ajreal

ตามคำตอบด้านล่างใน HeidiSQL คุณสามารถกรองตารางตามชื่อ (กล่องข้อความด้านบน) เขียนDROP TABLE ลงในแบบสอบถามและดับเบิลคลิกที่แต่ละตารางที่ต้องการเพื่อต่อท้ายชื่อในแบบสอบถาม (ใส่เครื่องหมายจุลภาคระหว่างพวกเขา) จากนั้นกด F9 เพื่อดำเนินการ นอกประเด็นเล็กน้อย แต่ฉันมาที่นี่เพื่อสิ่งนั้น
Ivan Ferrer Villa

สำหรับคนที่ต้องการวางหลาย ๆ ตารางที่มีคำนำหน้าเหมือนกันเนื่องจากใช้DROP TABLE table_prefix_*ไม่ได้กับตัวละครดาว: stackoverflow.com/questions/6758652/…
baptx

คำตอบ:


136

ตัวอย่าง:

สมมติว่าตาราง A มีลูกสองคน B และ C จากนั้นเราสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อวางตารางทั้งหมด

DROP TABLE IF EXISTS B,C,A;

สามารถวางไว้ที่จุดเริ่มต้นของสคริปต์แทนที่จะวางทีละตาราง


29
บางทีมันอาจคุ้มค่าที่จะชี้ให้เห็นว่าตารางไม่จำเป็นต้องมีความสัมพันธ์ใด ๆ เลย พวกเขาสามารถเป็นอิสระอย่างสมบูรณ์และไวยากรณ์นี้จะยังคงใช้งานได้
crmpicco

77
SET foreign_key_checks = 0;
DROP TABLE IF EXISTS a,b,c;
SET foreign_key_checks = 1;

จากนั้นคุณไม่ต้องกังวลว่าจะวางตามลำดับที่ถูกต้องหรือไม่ว่าจะมีอยู่จริงหรือไม่

NB นี้มีไว้สำหรับ MySQL เท่านั้น (ตามคำถาม) ฐานข้อมูลอื่นอาจมีวิธีการที่แตกต่างกันในการดำเนินการนี้


3
คุณช่วยฉันจากความยุ่งยากมากมายด้วยการเปลี่ยนการตรวจสอบ fkey (y)
HungryCoder

0

วิธีที่ขี้เกียจในการทำเช่นนี้หากมีตารางจำนวนมากที่ต้องลบ

  1. รับตารางโดยใช้ด้านล่าง

    • สำหรับเซิร์ฟเวอร์ sql - เลือก CONCAT (ชื่อ, ',') Table_Name จาก SYS.tables;
    • สำหรับ oralce - เลือก CONCAT (TABLE_NAME, ',') จาก SYS.ALL_TABLES;
  2. คัดลอกและวางชื่อตารางจากชุดผลลัพธ์และวางหลังจากคำสั่ง DROP


-3
declare @sql1 nvarchar(max) 
SELECT @sql1 =
  STUFF(
         (
           select ' drop table dbo.[' + name + ']'

           FROM sys.sysobjects AS sobjects
           WHERE (xtype = 'U') AND (name LIKE 'GROUP_BASE_NEW_WORK_%')
           for xml path('')
        ),
     1, 1, '')

  execute sp_executesql @sql1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.