2010-03-17 50 views

Trả lời

26

giải pháp zerkms không hoạt động đối với tôi. Tôi phải chỉ định cơ sở dữ liệu information_schema để có thể truy vấn bảng Tables.

SELECT 
    CONCAT('RENAME TABLE ', GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`')) AS q 
FROM 
    `information_schema`.`Tables` WHERE TABLE_SCHEMA='test'; 

Edit:

Tối ưu hóa truy vấn để chỉ cuộc gọi RENAME TABLE lần. Một cái gì đó tôi bước vào là một thực tế rằng sản lượng nối được cắt ngắn tại 341 ký tự. Điều này có thể được giải quyết (nếu được cho phép bởi máy chủ của bạn) bằng cách thiết lập các biến MySQL group_concat_max_len đến một giá trị cao hơn:

SET group_concat_max_len = 3072; -- UTF8 assumes each character will take 3 bytes, so 3072/3 = 1024 characters. 
+0

True, điều này làm việc cho tôi kể từ khi tôi đã làm việc trên localhost XAMPP bằng cách sử dụng Joomla và tôi muốn thay đổi để tự động Joomla tiền tố. Tôi làm theo các bước của bạn-tôi đã phải xác định 'information_schema'.'Tables' như bạn đã làm và thiết lập SET group_concat_max_len = 10240; trong trường hợp của tôi vì có nhiều bảng. +1 – MJoraid

+1

Một điểm nữa, bạn có thể sử dụng lệnh tương tự để di chuyển bảng trên cơ sở dữ liệu (ví dụ: backup_db) như: 'SELECT CONCAT ('TÊN BÊN TÊN', TABLE_NAME, 'TO backup_db.', TABLE_NAME, ';') FROM INFORMATION_SCHEMA. BẢNG KHI Đ tableN table_schema = 'testbot'; ' – sactiw

+0

điểm tuyệt vời chỉnh sửa về biến' group_concat_max_len'! Tôi đã không nhận được câu đầy đủ không, làm việc tuyệt vời! – AlexGH

21

viết tập lệnh sẽ chạy RENAME TABLE cho mỗi bảng.

SELECT 
    GROUP_CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`;' SEPARATOR ' ') 
FROM 
    `TABLES` WHERE `TABLE_SCHEMA` = "test"; 

nơi "thử nghiệm" dự kiến ​​tên cơ sở dữ liệu

sau này bạn có thể truy vấn dài mà sẽ thêm tiền tố nếu bạn thực hiện nó ;-)

3

Bạn chỉ có thể đổ cơ sở dữ liệu, mở bãi với trình soạn thảo văn bản, thay thế tất cả các lần xuất hiện của "TẠO TẠO" bằng "TẠO BẢNG dp_" và khôi phục cơ sở dữ liệu. Phải mất một vài phút để làm.

+2

cho đến khi cơ sở dữ liệu ít hơn vài gigabyte ;-) – zerkms

+0

Tôi là trò chơi. :) Đối với cơ sở dữ liệu lớn hơn GB, hãy sử dụng công cụ truy vấn (ví dụ SQL Workbench), chọn tất cả các bảng trong danh sách bảng, sao chép nội dung vào cột A của bảng tính (trong trường hợp của tôi là Calc) và đặt như sau công thức trong cột B: = "đổi tên bảng" & A1 & "thành dp_" & A1 & "; "Dán công thức từ ô B1 vào mọi ô cột B khác và tập lệnh đổi tên xuất hiện trong cột B! –

+0

như tôi đã nói trong câu trả lời của tôi - một cách thích hợp để đổi tên là sử dụng RENAME TABLE (+ information_shema để lấy tên bảng) – zerkms

10

phpMyAdmin cho phép bạn làm điều này ngay bây giờ. Ở cấp "Cơ sở dữ liệu", hãy chọn tab Cấu trúc để xem tất cả các bảng. Nhấp vào 'kiểm tra tất cả' (bên dưới danh sách bảng). Trên danh sách thả xuống 'Với lựa chọn', hãy chọn: 'Thay thế tiền tố bảng'.

Các vấn đề liên quan