จะวางตาราง MySQL ทั้งหมดจากบรรทัดคำสั่งได้อย่างไร


29

โดยปกติฉันจะเปิด Terminal.app และเชื่อมต่อกับฐานข้อมูล MySQL ระยะไกล

จากนั้นฉันใช้คำสั่งนี้เพื่อวางตาราง:

mysql> drop table [table name];

แต่สิ่งที่ฉันต้องการคือบรรทัดคำสั่งเพื่อวางตารางทั้งหมดในฐานข้อมูล

ถ้าฉันใช้:

mysql> drop database [database name];

ฉันจะทำลายฐานข้อมูลอย่างสมบูรณ์และฉันจะไม่สามารถสร้างตารางอีกครั้ง ฉันถูกไหม?


คำตอบ:


27

คุณสามารถวางฐานข้อมูลแล้วสร้างใหม่ได้ทันที:

mysql> drop database [database name];
mysql> create database [database name];

หรือคุณสามารถใช้สคริปต์เพื่อวางแต่ละตารางในฐานข้อมูล


ok เพียงเพื่อให้แน่ใจว่า: ฉันเชื่อมต่อกับฐานข้อมูลระยะไกลในเทอร์มิกับบรรทัดนี้: การประยุกต์ใช้งาน / / MAMP / Library / bin / MySQL -h 80.54.554.10 -u adm_user -p my_db หลังจากปล่อยและสร้างฐานข้อมูลตามที่คุณบอกว่าฉันจะต้องเปลี่ยนค่าการเชื่อมต่อนี้หรือไม่หรือพวกเขายังคงเหมือนเดิม?
chefnelone

1
@chef - การดร็อปตารางทั้งหมดและการดร็อปฐานข้อมูลทั้งหมดไม่มีผลเหมือนกัน หากคุณปล่อยเฉพาะตารางใด ๆ ที่สิทธิ์การใช้ฐานข้อมูลกว้างจะยังคงอยู่ไม่เช่นนั้นหากคุณปล่อย / สร้างฐานข้อมูลใหม่
Nifle

10
@chefnelone: ​​ระวัง !!! การปล่อยฐานข้อมูลจะลดขั้นตอนการจัดเก็บและมุมมองที่ผู้ใช้กำหนดเช่นกัน
RolandoMySQLDBA

ค่อนข้างชัดเจนสำหรับฉัน ฉันจะไปกับสคริปต์เพื่อลบแต่ละตาราง
chefnelone

1
มันไม่ปลอดภัยโดยสิ้นเชิงดูความคิดเห็นที่http://stackoverflow.com/a/12403742/1713660
vladkras

10

คุณสามารถลองคำสั่งต่อไปนี้:

mysqldump --no-data --add-drop-table DB_NAME | grep ^DROP | mysql -v DB_NAME

หรือ:

mysql --silent --skip-column-names -e "SHOW TABLES" DB_NAME | xargs -L1 -I% echo 'DROP TABLE `%`;' | mysql -v DB_NAME

DB_NAMEชื่อฐานข้อมูลของคุณอยู่ที่ไหน ข้อมูลรับรองฐานข้อมูลที่คุณสามารถระบุใน~/.my.cnfหรือเพิ่มลงในคำสั่ง (เช่น-uroot -proot)

วิธีนี้มีข้อดีมากกว่าการปล่อยและสร้างฐานข้อมูลในกรณีที่ผู้ใช้ฐานข้อมูลของคุณไม่มีสิทธิ์ในการวาง


1
ยืนยันตัวอย่างที่สองน่ากลัว เพิ่มข้อมูลประจำตัวของฐานข้อมูลเป็นธงเพิ่มเติมก่อน--silentและ-v/ --verboseตามลำดับเช่น:--user=username --password=password --host=host.name
ที่นี่

ความคิดที่ดี. แต่มีปัญหาบางอย่างเมื่อมีคีย์ต่างประเทศ ฉันเพิ่มลง| sort -rในบรรทัดย้อนกลับ แต่ก็ยังไม่สามารถใช้งานได้กับบางฐานข้อมูล
Fancyoung

2

mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e "SHOW TABLES" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE%;' | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE


2
ยินดีต้อนรับสู่ Super User! แม้ว่าสิ่งนี้อาจตอบคำถามได้ แต่มันจะเป็นคำตอบที่ดีกว่าถ้าคุณสามารถอธิบายได้ว่าทำไมมันถึงทำเช่นนั้น เรากำลังมองหาคำตอบที่ครอบคลุมและมีคุณภาพสูงที่ให้คำอธิบายและบริบท อย่าเพียงแค่ให้คำตอบเดียว อธิบายว่าเหตุใดคำตอบของคุณจึงถูกต้อง คำตอบที่ไม่รวมคำอธิบายอาจถูกลบออก นอกจากนี้ตรวจสอบการจัดรูปแบบของคุณ
G-Man กล่าวว่า 'Reinstate Monica'

อย่าลืมตั้งค่า foreign_key_checks = 1 หลังตารางหล่น: ดูstackoverflow.com/a/2873991/4306855 mysql -u USERHERE -pPASSWORDHERE - เงียบ - ข้าม - ชื่อคอลัมน์ - e "แสดงตาราง" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP Table%; SET FOREIGN_KEY_CHECKS = 1; ' | mysql -u USERHERE -PPASSWORDHERE -v DATABASENAMEHERE
toto21
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.