it-swarm-vi.tech

Làm cách nào để nhanh chóng đổi tên cơ sở dữ liệu MySQL (thay đổi tên lược đồ)?

Hướng dẫn sử dụng MySQL tại MySQL bao gồm điều này.

Thông thường tôi chỉ đổ cơ sở dữ liệu và nhập lại nó với một tên mới. Đây không phải là một lựa chọn cho cơ sở dữ liệu rất lớn. Rõ ràng RENAME {DATABASE | SCHEMA} db_name TO new_db_name;thực hiện những điều xấu, chỉ tồn tại trong một số ít phiên bản và là một ý tưởng tồi về tổng thể .

Điều này cần phải làm việc với InnoDB , nơi lưu trữ mọi thứ rất khác so với MyISAM .

866
deadprogrammer

Đối với InnoDB, dường như hoạt động sau đây: tạo cơ sở dữ liệu trống mới, sau đó đổi tên từng bảng thành cơ sở dữ liệu mới:

RENAME TABLE old_db.table TO new_db.table;

Bạn sẽ cần phải điều chỉnh các quyền sau đó.

Để tạo tập lệnh trong Shell, bạn có thể sử dụng một trong các cách sau:

mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \ 
    do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done

Hoặc là

for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;

Ghi chú:

  • Không có khoảng cách giữa tùy chọn -p và mật khẩu. Nếu cơ sở dữ liệu của bạn không có mật khẩu, hãy xóa phần -u username -ppassword.
  • Nếu một số bảng có kích hoạt, nó không thể được chuyển sang cơ sở dữ liệu khác bằng phương pháp trên (sẽ dẫn đến lỗi Trigger in wrong schema). Nếu đó là trường hợp, sử dụng một cách truyền thống để sao chép cơ sở dữ liệu và sau đó loại bỏ cơ sở dữ liệu cũ:

    mysqldump old_db | mysql new_db

  • Nếu bạn đã lưu trữ các thủ tục, bạn có thể sao chép chúng sau đó:

    mysqldump -R old_db | mysql new_db

756
Thorsten

Sử dụng một vài lệnh đơn giản sau:

mysqldump -u username -p -v olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql

Hoặc để giảm I/O, hãy sử dụng các mục sau theo đề xuất của @Pablo Marin-Garcia:

mysqladmin -u username -p create newdatabase
mysqldump -u username -v olddatabase -p | mysql -u username -p -D newdatabase
416
hendrasaputra

Tôi nghĩ rằng giải pháp đơn giản hơn và được đề xuất bởi một số nhà phát triển. phpMyAdmin có một hoạt động cho việc này.

Từ phpMyAdmin, chọn cơ sở dữ liệu bạn muốn chọn. Trong các tab có một hoạt động được gọi là Hoạt động, đi đến phần đổi tên. Đó là tất cả.

Nó, như nhiều người đề xuất, tạo ra một cơ sở dữ liệu mới với tên mới, kết xuất tất cả các bảng của cơ sở dữ liệu cũ vào cơ sở dữ liệu mới và bỏ cơ sở dữ liệu cũ.

Enter image description here

195
raphie

Bạn có thể sử dụng SQL để tạo tập lệnh SQL để chuyển từng bảng trong cơ sở dữ liệu nguồn của bạn sang cơ sở dữ liệu đích.

Bạn phải tạo cơ sở dữ liệu đích trước khi chạy tập lệnh được tạo từ lệnh.

Bạn có thể sử dụng một trong hai tập lệnh này (ban đầu tôi đã đề xuất câu hỏi trước và ai đó đã "cải thiện" câu trả lời của tôi để sử dụng GROUP_CONCAT. Hãy chọn, nhưng tôi thích bản gốc hơn):

SELECT CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name, '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

hoặc là

SELECT GROUP_CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name SEPARATOR '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

($ 1 và $ 2 tương ứng là nguồn và đích)

Điều này sẽ tạo ra một lệnh SQL mà sau đó bạn sẽ phải chạy.

Lưu ý rằng GROUP_CONCAT có giới hạn độ dài mặc định có thể vượt quá đối với cơ sở dữ liệu có số lượng bảng lớn. Bạn có thể thay đổi giới hạn đó bằng cách chạy SET SESSION group_concat_max_len = 100000000; (hoặc một số số lớn khác).

97
ErichBSchulz

Mô phỏng lệnh RENAME DATABASE bị thiếu trong MySQL:

  1. Tạo một cơ sở dữ liệu mới
  2. Tạo các truy vấn đổi tên bằng:

    SELECT CONCAT('RENAME TABLE ',table_schema,'.',table_name,
        ' TO ','new_schema.',table_name,';')
    FROM information_schema.TABLES
    WHERE table_schema LIKE 'old_schema';
    
  3. Chạy đầu ra đó

  4. Xóa cơ sở dữ liệu cũ

Nó được lấy từThi đua Lệnh RENAME DATABASE bị thiếu trong MySQL.

33
Marciano

Ba lựa chọn:

  1. Tạo cơ sở dữ liệu mới, đưa máy chủ xuống, di chuyển các tệp từ thư mục cơ sở dữ liệu này sang thư mục khác và khởi động lại máy chủ. Lưu ý rằng điều này sẽ chỉ hoạt động nếu TẤT CẢ các bảng của bạn là MyISAM.

  2. Tạo cơ sở dữ liệu mới, sử dụng các câu lệnh CREATE TABLE ... THÍCH, sau đó sử dụng các câu lệnh INSERT ... CHỌN * TỪ.

  3. Sử dụng mysqldump và tải lại với tập tin đó.

24
longneck

Cách đơn giản

Thay đổi thư mục cơ sở dữ liệu:

cd /var/lib/mysql/

Tắt MySQL ... Điều này rất quan trọng!

/etc/init.d/mysql stop

Được rồi, cách này không hoạt động đối với Cơ sở dữ liệu InnoDB hoặc BDB.

Đổi tên cơ sở dữ liệu:

mv old-name new-name

... hoặc cái bàn ...

cd database/

mv old-name.frm new-name.frm

mv old-name.MYD new-name.MYD

mv old-name.MYI new-name.MYI

Khởi động lại MySQL

/etc/init.d/mysql start

Làm xong...

OK, cách này không hoạt động với cơ sở dữ liệu InnoDB hoặc BDB. Trong trường hợp này, bạn phải kết xuất cơ sở dữ liệu và nhập lại nó.

23
DeeCee

Gần đây tôi mới bắt gặp một cách rất hay để làm điều đó, hoạt động với MyISAM và InnoDB và rất nhanh:

RENAME TABLE old_db.table TO new_db.table;

Tôi không nhớ tôi đã đọc nó ở đâu nhưng tín dụng dành cho người khác chứ không phải tôi.

19
Amr Mostafa

Bạn có thể sử dụng tập lệnh Shell này:

Tham khảo: Làm cách nào để đổi tên cơ sở dữ liệu MySQL?

#!/bin/bash
set -e # terminate execution on command failure

mysqlconn="mysql -u root -proot"
olddb=$1
newdb=$2
$mysqlconn -e "CREATE DATABASE $newdb"
params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES \
                           WHERE table_schema='$olddb'")
for name in $params; do
      $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name";
done;
$mysqlconn -e "DROP DATABASE $olddb"

Nó đang hoạt động:

$ sh rename_database.sh oldname newname
18
Grijesh Chauhan

Đây là những gì tôi sử dụng:

$ mysqldump -u root -p olddb >~/olddb.sql
$ mysql -u root -p
mysql> create database newdb;
mysql> use newdb
mysql> source ~/olddb.sql
mysql> drop database olddb;
16
eaykin

Cách đơn giản nhất để chống đạn và thực hiện một hoàn thành đổi tên (bao gồm cả việc hủy cơ sở dữ liệu cũ ở cuối để đổi tên thay vì sao chép) :

mysqladmin -uroot -pmypassword create newdbname
mysqldump -uroot -pmypassword --routines olddbname | mysql -uroot -pmypassword newdbname
mysqladmin -uroot -pmypassword drop olddbname

Các bước:

  1. Sao chép các dòng vào Notepad.
  2. Thay thế tất cả các tham chiếu thành "olddbname", "newdbname", "mypassword" (+ tùy chọn "root") bằng các tương đương của bạn.
  3. Thực hiện từng cái một trên dòng lệnh (nhập "y" khi được nhắc).
15
Steve Chambers

Hiện tại, MySQL không hỗ trợ đổi tên cơ sở dữ liệu thông qua giao diện lệnh của nó, nhưng bạn có thể đổi tên cơ sở dữ liệu nếu bạn có quyền truy cập vào thư mục lưu trữ cơ sở dữ liệu của MySQL. Đối với cài đặt MySQL mặc định, điều này thường nằm trong thư mục Dữ liệu trong thư mục cài đặt MySQL. Xác định tên của cơ sở dữ liệu bạn muốn đổi tên trong thư mục Dữ liệu và đổi tên nó. Đổi tên thư mục có thể gây ra một số vấn đề quyền mặc dù. Hãy nhận biết.

Lưu ý: Bạn phải dừng MySQL trước khi đổi tên cơ sở dữ liệu

Tôi khuyên bạn nên tạo một cơ sở dữ liệu mới (sử dụng tên bạn muốn) và xuất/nhập dữ liệu bạn cần từ cũ sang mới. Khá đơn giản.

14
bryanpearson

Khi bạn đổi tên cơ sở dữ liệu trong PHPMyAdmin, nó sẽ tạo một kết xuất, sau đó loại bỏ và tạo lại cơ sở dữ liệu với tên mới.

13
UnkwnTech

Vâng, có 2 phương pháp:

Phương pháp 1: Một phương pháp nổi tiếng để đổi tên lược đồ cơ sở dữ liệu là bằng cách loại bỏ lược đồ bằng Mysqldump và khôi phục nó trong một lược đồ khác, sau đó bỏ lược đồ cũ (nếu cần).

Từ Shell

 mysqldump emp > emp.out
 mysql -e "CREATE DATABASE employees;"
 mysql employees < emp.out 
 mysql -e "DROP DATABASE emp;"

Mặc dù phương pháp trên là dễ dàng, nó là tốn thời gian và không gian. Điều gì xảy ra nếu lược đồ lớn hơn 100GB? Có các phương pháp trong đó bạn có thể nối các lệnh trên với nhau để tiết kiệm không gian, tuy nhiên nó sẽ không tiết kiệm thời gian.

Để khắc phục các tình huống như vậy, có một phương pháp nhanh chóng khác để đổi tên các lược đồ, tuy nhiên, một số lưu ý phải được thực hiện trong khi thực hiện.

Phương pháp 2: MySQL có một tính năng rất tốt để đổi tên các bảng thậm chí hoạt động trên các lược đồ khác nhau. Hoạt động đổi tên này là nguyên tử và không ai khác có thể truy cập vào bảng trong khi nó được đổi tên. Việc này mất một thời gian ngắn để hoàn thành vì việc thay đổi tên bảng Tên hoặc lược đồ của nó chỉ là thay đổi siêu dữ liệu. Đây là cách tiếp cận thủ tục khi thực hiện đổi tên:

Tạo lược đồ cơ sở dữ liệu mới với tên mong muốn. Đổi tên các bảng từ lược đồ cũ sang lược đồ mới, sử dụng lệnh RENAME TABLE Hồi của MySQL. Bỏ lược đồ cơ sở dữ liệu cũ. If there are views, triggers, functions, stored procedures in the schema, those will need to be recreated too. MySQL Lõi TENAME TABLE không thành công nếu có các kích hoạt tồn tại trên các bảng. Để khắc phục điều này, chúng ta có thể làm những điều sau đây:

1) Dump the triggers, events and stored routines in a separate file. Điều này được thực hiện bằng cách sử dụng các cờ -E, -R (ngoài -t -d để loại bỏ các kích hoạt) cho lệnh mysqldump. Khi các kích hoạt được kết xuất, chúng ta sẽ cần loại bỏ chúng khỏi lược đồ, để lệnh RENAME TABLE hoạt động.

 $ mysqldump <old_schema_name> -d -t -R -E > stored_routines_triggers_events.out

2) Tạo danh sách các bảng duy nhất của BASE. Chúng có thể được tìm thấy bằng cách sử dụng truy vấn trên bảng information_schema.TABLES.

 mysql> select TABLE_NAME from information_schema.tables where 
    table_schema='<old_schema_name>' and TABLE_TYPE='BASE TABLE';

3) Kết xuất các khung nhìn trong một tệp ra. Có thể tìm thấy các lượt xem bằng cách sử dụng truy vấn trên cùng một bảng information_schema.TABLES.

mysql> select TABLE_NAME from information_schema.tables where 
   table_schema='<old_schema_name>' and TABLE_TYPE='VIEW';
 $ mysqldump <database> <view1> <view2> … > views.out

4) Thả các kích hoạt trên các bảng hiện tại trong old_schema.

mysql> DROP TRIGGER <trigger_name>;
...

5) Khôi phục các tệp kết xuất ở trên một khi tất cả các bảng cơ sở cơ sở được tìm thấy trong bước # 2 được đổi tên.

mysql> RENAME TABLE <old_schema>.table_name TO <new_schema>.table_name;
...
$ mysql <new_schema> < views.out
$ mysql <new_schema> < stored_routines_triggers_events.out

Những rắc rối với các phương thức trên: Chúng tôi có thể cần cập nhật GRANTS cho người dùng sao cho khớp với tên_bảng chính xác. Chúng có thể được sửa với một CẬP NHẬT đơn giản trên các bảng mysql.columns_priv, mysql.procs_priv, mysql.tables_priv, mysql.db cập nhật tên old_schema thành new_schema và gọi đặc quyền của Flush; Mặc dù phương thức 2 “có vẻ phức tạp hơn một chút so với phương thức 1“, nhưng điều này hoàn toàn có thể viết được. Một tập lệnh bash đơn giản để thực hiện các bước trên theo trình tự phù hợp, có thể giúp bạn tiết kiệm không gian và thời gian trong khi đổi tên các lược đồ cơ sở dữ liệu vào lần tới.

Nhóm DBA từ xa Percona đã viết một tập lệnh có tên là renameame_db 'hoạt động theo cách sau:

[[email protected]~]# /tmp/rename_db
rename_db <server> <database> <new_database>

Để thể hiện việc sử dụng tập lệnh này, đã sử dụng một lược đồ mẫu, emp emp, đã tạo các trình kích hoạt thử nghiệm, các thói quen được lưu trữ trên lược đồ đó. Sẽ cố gắng đổi tên lược đồ cơ sở dữ liệu bằng cách sử dụng tập lệnh, mất vài giây để hoàn thành trái ngược với phương pháp kết xuất/khôi phục tốn thời gian.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| emp                |
| mysql              |
| performance_schema |
| test               |
+--------------------+


[[email protected] ~]# time /tmp/rename_db localhost emp emp_test
create database emp_test DEFAULT CHARACTER SET latin1
drop trigger salary_trigger
rename table emp.__emp_new to emp_test.__emp_new
rename table emp._emp_new to emp_test._emp_new
rename table emp.departments to emp_test.departments
rename table emp.dept to emp_test.dept
rename table emp.dept_emp to emp_test.dept_emp
rename table emp.dept_manager to emp_test.dept_manager
rename table emp.emp to emp_test.emp
rename table emp.employees to emp_test.employees
rename table emp.salaries_temp to emp_test.salaries_temp
rename table emp.titles to emp_test.titles
loading views
loading triggers, routines and events
Dropping database emp

real    0m0.643s
user    0m0.053s
sys     0m0.131s


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| emp_test           |
| mysql              |
| performance_schema |
| test               |
+--------------------+

Như bạn có thể thấy trong kết quả đầu ra ở trên, lược đồ cơ sở dữ liệu, có thể đổi tên thành tên emp empestest trong chưa đầy một giây. Cuối cùng, Đây là tập lệnh từ Percona được sử dụng ở trên cho phương thức 2 “.

#!/bin/bash
# Copyright 2013 Percona LLC and/or its affiliates
set -e
if [ -z "$3" ]; then
    echo "rename_db <server> <database> <new_database>"
    exit 1
fi
db_exists=`mysql -h $1 -e "show databases like '$3'" -sss`
if [ -n "$db_exists" ]; then
    echo "ERROR: New database already exists $3"
    exit 1
fi
TIMESTAMP=`date +%s`
character_set=`mysql -h $1 -e "show create database $2\G" -sss | grep ^Create | awk -F'CHARACTER SET ' '{print $2}' | awk '{print $1}'`
TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`
STATUS=$?
if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then
    echo "Error retrieving tables from $2"
    exit 1
fi
echo "create database $3 DEFAULT CHARACTER SET $character_set"
mysql -h $1 -e "create database $3 DEFAULT CHARACTER SET $character_set"
TRIGGERS=`mysql -h $1 $2 -e "show triggers\G" | grep Trigger: | awk '{print $2}'`
VIEWS=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='VIEW'" -sss`
if [ -n "$VIEWS" ]; then
    mysqldump -h $1 $2 $VIEWS > /tmp/${2}_views${TIMESTAMP}.dump
fi
mysqldump -h $1 $2 -d -t -R -E > /tmp/${2}_triggers${TIMESTAMP}.dump
for TRIGGER in $TRIGGERS; do
    echo "drop trigger $TRIGGER"
    mysql -h $1 $2 -e "drop trigger $TRIGGER"
done
for TABLE in $TABLES; do
    echo "rename table $2.$TABLE to $3.$TABLE"
    mysql -h $1 $2 -e "SET FOREIGN_KEY_CHECKS=0; rename table $2.$TABLE to $3.$TABLE"
done
if [ -n "$VIEWS" ]; then
    echo "loading views"
    mysql -h $1 $3 < /tmp/${2}_views${TIMESTAMP}.dump
fi
echo "loading triggers, routines and events"
mysql -h $1 $3 < /tmp/${2}_triggers${TIMESTAMP}.dump
TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`
if [ -z "$TABLES" ]; then
    echo "Dropping database $2"
    mysql -h $1 $2 -e "drop database $2"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.columns_priv where db='$2'" -sss` -gt 0 ]; then
    COLUMNS_PRIV="    UPDATE mysql.columns_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.procs_priv where db='$2'" -sss` -gt 0 ]; then
    PROCS_PRIV="    UPDATE mysql.procs_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.tables_priv where db='$2'" -sss` -gt 0 ]; then
    TABLES_PRIV="    UPDATE mysql.tables_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.db where db='$2'" -sss` -gt 0 ]; then
    DB_PRIV="    UPDATE mysql.db set db='$3' WHERE db='$2';"
fi
if [ -n "$COLUMNS_PRIV" ] || [ -n "$PROCS_PRIV" ] || [ -n "$TABLES_PRIV" ] || [ -n "$DB_PRIV" ]; then
    echo "IF YOU WANT TO RENAME the GRANTS YOU NEED TO RUN ALL OUTPUT BELOW:"
    if [ -n "$COLUMNS_PRIV" ]; then echo "$COLUMNS_PRIV"; fi
    if [ -n "$PROCS_PRIV" ]; then echo "$PROCS_PRIV"; fi
    if [ -n "$TABLES_PRIV" ]; then echo "$TABLES_PRIV"; fi
    if [ -n "$DB_PRIV" ]; then echo "$DB_PRIV"; fi
    echo "    flush privileges;"
fi
12
Sathish D

Đối với những người dùng Mac, Sequel Pro có tùy chọn Đổi tên cơ sở dữ liệu trong menu Cơ sở dữ liệu. http://www.fterelpro.com/

12
Duke

Có thể đổi tên tất cả các bảng trong cơ sở dữ liệu thành cơ sở dữ liệu khác mà không phải thực hiện kết xuất và khôi phục đầy đủ.

[.__.] THỦ TỤC DROP NẾU EXISTS mysql.rename_db; [.__.] DELIMITER || [.__.] TẠO QUY TRÌNH mysql.rename_db (IN old_db VARCHAR (100), IN new_db VARCHAR (100) ] BEGIN [.__.] CHỌN CONCAT ('TẠO cơ sở dữ liệu', new_db, ';') `# tạo cơ sở dữ liệu mới`; [.__.] CHỌN CONCAT ('RENAME TABLE`', old_db, '`.`', tên_bảng, '`TO`', new_db, '` .`', tên_bảng, '`;')` # thay đổi bảng` TỪ information_schema.tables WHERE table_schema = old_db; [.__.] CHỌN CONCAT ('DROP DATABASE `' , old_db, '`;')` # thả cơ sở dữ liệu cũ`; [.__.] END || [.__.] DELIMITER; [.__.] [.__.] $ time mysql -uroot -e "gọi mysql .rename_db ('db1', 'db2'); " | mys -uroot [.__.]

Tuy nhiên, bất kỳ kích hoạt nào trong db mục tiêu sẽ không được hạnh phúc. Bạn sẽ cần bỏ chúng trước sau đó tạo lại chúng sau khi đổi tên.

[.__.] mysql -uroot -e "gọi mysql.rename_db ('kiểm tra', 'blah2');" | mysql -uroot [.__.] LRI 1435 (HY000) ở dòng 4: Kích hoạt trong lược đồ sai [.__.]
9
TodoInTX

Hầu hết các câu trả lời ở đây đều sai vì một trong hai lý do:

  1. Bạn không thể chỉ sử dụng RENAME TABLE, vì có thể có lượt xem và trình kích hoạt. Nếu có kích hoạt, RENAME TABLE không thành công
  2. Bạn không thể sử dụng mysqldump nếu bạn muốn "nhanh chóng" (như được yêu cầu trong câu hỏi) đổi tên một cơ sở dữ liệu lớn

Percona có một bài đăng trên blog về cách làm tốt điều này: https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/

và kịch bản được đăng (thực hiện?) bởi Simon R Jones, đó là những gì được đề xuất trong bài viết đó. Tôi đã sửa một lỗi tôi tìm thấy trong kịch bản. Bạn có thể thấy nó ở đây:

https://Gist.github.com/ryantm/76944318b0473ff25993ef2a7186213d

Đây là một bản sao của nó:

#!/bin/bash
# Copyright 2013 Percona LLC and/or its affiliates
# @see https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/
set -e
if [ -z "$3" ]; then
    echo "rename_db <server> <database> <new_database>"
    exit 1
fi
db_exists=`mysql -h $1 -e "show databases like '$3'" -sss`
if [ -n "$db_exists" ]; then
    echo "ERROR: New database already exists $3"
    exit 1
fi
TIMESTAMP=`date +%s`
character_set=`mysql -h $1 -e "SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = '$2'" -sss`
TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`
STATUS=$?
if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then
    echo "Error retrieving tables from $2"
    exit 1
fi
echo "create database $3 DEFAULT CHARACTER SET $character_set"
mysql -h $1 -e "create database $3 DEFAULT CHARACTER SET $character_set"
TRIGGERS=`mysql -h $1 $2 -e "show triggers\G" | grep Trigger: | awk '{print $2}'`
VIEWS=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='VIEW'" -sss`
if [ -n "$VIEWS" ]; then
    mysqldump -h $1 $2 $VIEWS > /tmp/${2}_views${TIMESTAMP}.dump
fi
mysqldump -h $1 $2 -d -t -R -E > /tmp/${2}_triggers${TIMESTAMP}.dump
for TRIGGER in $TRIGGERS; do
    echo "drop trigger $TRIGGER"
    mysql -h $1 $2 -e "drop trigger $TRIGGER"
done
for TABLE in $TABLES; do
    echo "rename table $2.$TABLE to $3.$TABLE"
    mysql -h $1 $2 -e "SET FOREIGN_KEY_CHECKS=0; rename table $2.$TABLE to $3.$TABLE"
done
if [ -n "$VIEWS" ]; then
    echo "loading views"
    mysql -h $1 $3 < /tmp/${2}_views${TIMESTAMP}.dump
fi
echo "loading triggers, routines and events"
mysql -h $1 $3 < /tmp/${2}_triggers${TIMESTAMP}.dump
TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss`
if [ -z "$TABLES" ]; then
    echo "Dropping database $2"
    mysql -h $1 $2 -e "drop database $2"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.columns_priv where db='$2'" -sss` -gt 0 ]; then
    COLUMNS_PRIV="    UPDATE mysql.columns_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.procs_priv where db='$2'" -sss` -gt 0 ]; then
    PROCS_PRIV="    UPDATE mysql.procs_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.tables_priv where db='$2'" -sss` -gt 0 ]; then
    TABLES_PRIV="    UPDATE mysql.tables_priv set db='$3' WHERE db='$2';"
fi
if [ `mysql -h $1 -e "select count(*) from mysql.db where db='$2'" -sss` -gt 0 ]; then
    DB_PRIV="    UPDATE mysql.db set db='$3' WHERE db='$2';"
fi
if [ -n "$COLUMNS_PRIV" ] || [ -n "$PROCS_PRIV" ] || [ -n "$TABLES_PRIV" ] || [ -n "$DB_PRIV" ]; then
    echo "IF YOU WANT TO RENAME the GRANTS YOU NEED TO RUN ALL OUTPUT BELOW:"
    if [ -n "$COLUMNS_PRIV" ]; then echo "$COLUMNS_PRIV"; fi
    if [ -n "$PROCS_PRIV" ]; then echo "$PROCS_PRIV"; fi
    if [ -n "$TABLES_PRIV" ]; then echo "$TABLES_PRIV"; fi
    if [ -n "$DB_PRIV" ]; then echo "$DB_PRIV"; fi
    echo "    flush privileges;"
fi

Lưu nó vào một tệp có tên rename_db và làm cho tập lệnh có thể thực thi được với chmod +x rename_db sau đó sử dụng nó như ./rename_db localhost old_db new_db

8
ryantm

Đây là một tệp bó tôi đã viết để tự động hóa nó từ dòng lệnh, nhưng nó dành cho Windows/MS-DOS.

Cú pháp là cơ sở dữ liệu rename_mysqldb newdatabase -u [user] -p [password]

:: ***************************************************************************
:: FILE: RENAME_MYSQLDB.BAT
:: ***************************************************************************
:: DESCRIPTION
:: This is a Windows /MS-DOS batch file that automates renaming a MySQL database 
:: by using MySQLDump, MySQLAdmin, and MySQL to perform the required tasks.
:: The MySQL\bin folder needs to be in your environment path or the working directory.
::
:: WARNING: The script will delete the original database, but only if it successfully
:: created the new copy. However, read the disclaimer below before using.
::
:: DISCLAIMER
:: This script is provided without any express or implied warranties whatsoever.
:: The user must assume the risk of using the script.
::
:: You are free to use, modify, and distribute this script without exception.
:: ***************************************************************************

:INITIALIZE
@ECHO OFF
IF [%2]==[] GOTO HELP
IF [%3]==[] (SET RDB_ARGS=--user=root) ELSE (SET RDB_ARGS=%3 %4 %5 %6 %7 %8 %9)
SET RDB_OLDDB=%1
SET RDB_NEWDB=%2
SET RDB_DUMPFILE=%RDB_OLDDB%_dump.sql
GOTO START

:START
SET RDB_STEP=1
ECHO Dumping "%RDB_OLDDB%"...
mysqldump %RDB_ARGS% %RDB_OLDDB% > %RDB_DUMPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=2
ECHO Creating database "%RDB_NEWDB%"...
mysqladmin %RDB_ARGS% create %RDB_NEWDB%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=3
ECHO Loading dump into "%RDB_NEWDB%"...
mysql %RDB_ARGS% %RDB_NEWDB% < %RDB_DUMPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=4
ECHO Dropping database "%RDB_OLDDB%"...
mysqladmin %RDB_ARGS% drop %RDB_OLDDB% --force
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
SET RDB_STEP=5
ECHO Deleting dump...
DEL %RDB_DUMPFILE%
IF %ERRORLEVEL% NEQ 0 GOTO ERROR_ABORT
ECHO Renamed database "%RDB_OLDDB%" to "%RDB_NEWDB%".
GOTO END

:ERROR_ABORT
IF %RDB_STEP% GEQ 3 mysqladmin %RDB_ARGS% drop %NEWDB% --force
IF %RDB_STEP% GEQ 1 IF EXIST %RDB_DUMPFILE% DEL %RDB_DUMPFILE%
ECHO Unable to rename database "%RDB_OLDDB%" to "%RDB_NEWDB%".
GOTO END

:HELP
ECHO Renames a MySQL database.
ECHO Usage: %0 database new_database [OPTIONS]
ECHO Options: Any valid options shared by MySQL, MySQLAdmin and MySQLDump.
ECHO          --user=root is used if no options are specified.
GOTO END    

:END
SET RDB_OLDDB=
SET RDB_NEWDB=
SET RDB_ARGS=
SET RDB_DUMP=
SET RDB_STEP=
7
Johnny

Thủ tục lưu trữ của TodoInTX không hiệu quả đối với tôi. Đây là cú đâm của tôi vào nó:

[.__.] - thủ tục được lưu trữ rename_db: Đổi tên cơ sở dữ liệu phương tiện sao chép bảng của tôi. [.__.] - Hãy cẩn thận: [.__.] - Sẽ ghi đè bất kỳ cơ sở dữ liệu hiện có nào có cùng tên là 'mới' tên cơ sở dữ liệu. [.___.] - CHỈ sao chép bảng; các thủ tục được lưu trữ và các đối tượng cơ sở dữ liệu khác không được sao chép. [.__.] - Tomer Altman ([email protected]) [.__.] [.__.] delimiter //[.__.THERDROP PROCEDURE IF EXISTS rename_db; [.__.] TẠO QUY TRÌNH rename_db (IN old_db VARCHAR (100), IN new_db VARCHAR (100)) [.__.] BEGIN [.__.] KHAI THÁC hiện tại VARCHAR (100); [.___ INT DEFAULT 0; [.___.] KHAI THÁC old_tables HIỆN TẠI ĐỂ chọn tên_bảng từ information_schema.tables trong đó table_schema = old_db; [.___ SET @output = CONCAT ('DROP SCHema NẾU EXISTS', new_db, ';'); [.__.] CHUẨN BỊ stmt TỪ @output; [.__.] EXECUTE stmt; [.__.] [.__.] SET @output = CONCAT ('TẠO SCHema NẾU KHÔNG EXISTS', new_db, ';'); [.__.] CHUẨN BỊ stmt TỪ @output; [.__.] EXECUTE stmt; [.__.] [.__.] MỞ old_tables; [.__.] REPEAT [.__.] FETCH old_tables INTO current_table; ____.] NẾU KHÔNG thực hiện THEN [.__.] SET @output = CONCAT ('bảng thay đổi', old_db, '.', Current_table, 'đổi tên', new_db, '.', Current_table, ';'); 
 CHUẨN BỊ stmt TỪ @output; [.__.] EXECUTE stmt; [.__.] [.__.] END IF; [.__.] UNTIL đã thực hiện END REPEAT; [.__.] [.__.] ĐÓNG old_tables; [.__.] [.__.] HẾT //[.__.] Dấu phân cách; [.__.]
7
user757945

Để thuận tiện cho bạn, bên dưới là một shellscript nhỏ phải được thực thi với hai tham số: tên db và tên db mới.

Bạn có thể cần thêm các tham số đăng nhập vào dòng mysql nếu bạn không sử dụng tệp .my.cnf trong thư mục chính của mình. Vui lòng tạo một bản sao lưu trước khi thực hiện kịch bản này.


#!/usr/bin/env bash

mysql -e "CREATE DATABASE $2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
for i in $(mysql -Ns $1 -e "show tables");do
    echo "$1.$i -> $2.$i"
    mysql -e "rename TABLE $1.$i to $2.$i"
done
mysql -e "DROP DATABASE $1"
6
gerrit damen

Tôi đã đặt ra một câu hỏi trên Server Fault đang cố gắng khắc phục thời gian chết khi khôi phục cơ sở dữ liệu rất lớn bằng cách sử dụng MySQL Proxy. Tôi đã không có bất kỳ thành công nào, nhưng cuối cùng tôi nhận ra điều tôi muốn là chức năng RENAME DATABASE vì kết xuất/nhập không phải là một tùy chọn do kích thước của cơ sở dữ liệu của chúng tôi.

Có một chức năng RENAME TABLE được tích hợp trong MySQL nên cuối cùng tôi đã viết một tập lệnh Python đơn giản để thực hiện công việc cho tôi. Tôi đã đăng nó trên GitHub trong trường hợp nó có thể được sử dụng cho người khác.

6
cclark

Các bước:

  1. Lượt truy cập http: // localhost/phpmyadmin/
  2. Chọn DB của bạn
  3. Nhấp vào tab hoạt động
  4. Sẽ có một tab là "Đổi tên cơ sở dữ liệu thành". Thêm tên mới và kiểm tra Điều chỉnh đặc quyền.
  5. Bấm vào Đi.

 enter image description here

6
Shubham Jain

Phương pháp đơn giản nhất là sử dụng phần mềm HeidiQuery. Nó là nguồn mở và miễn phí. Nó chạy trên Windows và trên mọi Linux với Wine (chạy các ứng dụng Windows trên Linux, BSD, Solaris và Mac OS X).

Để tải xuống HeidiSQL, goto http://www.heidisql.com/doad.php .

Để tải xuống Rượu, goto http://www.winehq.org/ .

Để đổi tên cơ sở dữ liệu trong HeidiSQL, chỉ cần nhấp chuột phải vào tên cơ sở dữ liệu và chọn 'Chỉnh sửa'. Sau đó nhập tên mới và bấm 'OK'.

Nó thật đơn giản.

5
Fathah Rehman P

Đây là một cách nhanh chóng để tạo đổi tên tập lệnh sql, nếu bạn có nhiều bảng để di chuyển.

SELECT DISTINCT CONCAT('RENAME TABLE ', t.table_schema,'.', t.table_name, ' TO ',     
t.table_schema, "_archive", '.', t.table_name, ';' ) as Rename_SQL 
FROM information_schema.tables t
WHERE table_schema='your_db_name' ;
4
yantaq

Có vẻ như không ai đề cập đến điều này nhưng đây là một cách khác:

create database NewDatabaseName like OldDatabaseName;

sau đó cho mỗi bảng làm:

create NewDatabaseName.tablename like OldDatabaseName.tablename;
insert into NewDataBaseName.tablename select * from OldDatabaseName.tablename;

sau đó, nếu bạn muốn,

drop database OldDatabaseName;

Cách tiếp cận này sẽ có lợi thế là thực hiện toàn bộ chuyển trên máy chủ với lưu lượng mạng gần bằng 0, vì vậy nó sẽ nhanh hơn rất nhiều so với kết xuất/khôi phục.

Nếu bạn có các thủ tục lưu trữ/lượt xem/vv, bạn cũng có thể muốn chuyển chúng.

4
Tuncay Göncüoğlu

Đối với người dùng mac, bạn có thể sử dụng Sequel Pro (miễn phí), chỉ cung cấp tùy chọn để đổi tên Cơ sở dữ liệu. Mặc dù nó không xóa DB cũ.

sau khi mở DB có liên quan, chỉ cần nhấp: Database -> Rename database...

4
Roee Gavirel

Trong Quản trị viên MySQL, hãy làm như sau:

  1. Trong Danh mục, tạo một lược đồ cơ sở dữ liệu mới.
  2. Đi đến Sao lưu và tạo một bản sao lưu của lược đồ cũ.
  3. Thực hiện sao lưu.
  4. Chuyển đến Khôi phục và mở tệp được tạo ở bước 3.
  5. Chọn 'Lược đồ khác' trong Lược đồ đích và chọn lược đồ cơ sở dữ liệu mới.
  6. Bắt đầu khôi phục.
  7. Xác minh lược đồ mới và nếu nó trông tốt, hãy xóa lược đồ cũ.
3
Tom

trong phpmyadmin bạn có thể dễ dàng đổi tên cơ sở dữ liệu

select database 

  goto operations tab

  in that rename Database to :

  type your new database name and click go

yêu cầu bỏ bảng cũ và tải lại dữ liệu bảng bấm OK trong cả hai

Cơ sở dữ liệu của bạn được đổi tên

3
murtaza.webdev

Nếu bạn đang sử dụng phpMyAdmin bạn có thể chuyển đến tab "hoạt động" sau khi bạn đã chọn cơ sở dữ liệu bạn muốn đổi tên. Sau đó đi đến phần cuối cùng "sao chép cơ sở dữ liệu vào" (hoặc một cái gì đó tương tự), đặt tên và chọn các tùy chọn bên dưới. Trong trường hợp này, tôi đoán bạn phải chọn hộp kiểm "cấu trúc và dữ liệu" và "tạo cơ sở dữ liệu trước khi sao chép" và cuối cùng, nhấn nút "đi" trong phần đó.

Nhân tiện, tôi đang sử dụng phpMyAdmin bằng tiếng Tây Ban Nha nên tôi không chắc tên của các phần trong tiếng Anh là gì.

3
ecruz

Đây là đoạn mã Bash một dòng để di chuyển tất cả các bảng từ lược đồ này sang lược đồ khác:

history -d $((HISTCMD-1)) && mysql -udb_user -p'db_password' -Dold_schema -ABNnqre'SHOW TABLES;' | sed -e's/.*/RENAME TABLE old_schema.`&` TO new_schema.`&`;/' | mysql -udb_user -p'db_password' -Dnew_schema

Lệnh history khi bắt đầu chỉ cần đảm bảo rằng các lệnh MySQL chứa mật khẩu không được lưu vào lịch sử Shell.

Đảm bảo rằng db_user có quyền đọc/ghi/thả trên lược đồ cũ và đọc/ghi/tạo quyền trên lược đồ mới.

3
coffeefiend

Tôi đã làm theo cách này: Sao lưu cơ sở dữ liệu hiện có của bạn. Nó sẽ cung cấp cho bạn một db.Zip.tmp và sau đó trong lệnh Nhắc viết sau

"C:\Chương trình tệp (x86)\MySQL\MySQL Server 5.6\bin\mysql.exe" -h localhost -u root -p [password] [tên db mới] <"C:\Sao lưu\db.Zip.tmp "

3
Samra

Bạn có thể làm điều đó theo hai cách.

  1. RENAME BẢNG old_db.table_name ĐẾN new_db.table_name;
  2. Thao tác Goto-> ở đó bạn có thể thấy tab Tùy chọn bảng. bạn có thể chỉnh sửa tên bảng ở đó.
2
jeeva

Đây là tập lệnh bó tôi đã viết để đổi tên cơ sở dữ liệu trên Windows:

@echo off
set olddb=olddbname
set newdb=newdbname
SET count=1
SET act=mysql -uroot -e "select table_name from information_schema.tables where table_schema='%olddb%'"
mysql -uroot -e "create database %newdb%"
echo %act%
 FOR /f "tokens=*" %%G IN ('%act%') DO (
  REM echo %count%:%%G
  echo mysql -uroot -e "RENAME TABLE %olddb%.%%G to %newdb%.%%G"
  mysql -uroot -e "RENAME TABLE %olddb%.%%G to %newdb%.%%G"
  set /a count+=1
 )
mysql -uroot -e "drop database %olddb%"
2
Nadav Benedek

ALTER DATABASE là cách được đề xuất xung quanh vấn đề này bởi MySQL và RENAME DATABASE bị loại bỏ.

Từ13.1.32 Cú pháp cơ sở dữ liệu RENAME:

RENAME {DATABASE | SCHEMA} db_name TO new_db_name;

Tuyên bố này đã được thêm vào trong MySQL 5.1.7, nhưng nó được phát hiện là nguy hiểm và đã bị xóa trong MySQL 5.1.23.

2
xelber

Điều này hoạt động cho tất cả các cơ sở dữ liệu và hoạt động bằng cách đổi tên từng bảng bằng bộ công cụ mysql maatkit

Sử dụng mk-find để in và đổi tên mỗi bảng. Trang man có nhiều tùy chọn và ví dụ khác

mk-find --dblike OLD_DATABASE --print --exec "RENAME TABLE %D.%N TO NEW_DATABASE.%N"

Nếu bạn đã cài đặt maatkit ( rất dễ dàng ), thì đây là cách đơn giản nhất để làm điều đó.

2
Morgan Christiansson

Trong trường hợp bạn bắt đầu từ một tệp kết xuất với một số cơ sở dữ liệu, bạn có thể thực hiện một sed trên kết xuất:

sed -i -- "s|old_name_database1|new_name_database1|g" my_dump.sql
sed -i -- "s|old_name_database2|new_name_database2|g" my_dump.sql
...

Sau đó nhập bãi rác của bạn. Chỉ cần đảm bảo rằng sẽ không có xung đột tên.

1
RotS

Cả giải pháp thích ứng của TodoInTx lẫn giải pháp của người dùng757945 đều không phù hợp với tôi trên MySQL 5.5.16, vì vậy đây là phiên bản phù hợp của tôi:

DELIMITER //
DROP PROCEDURE IF EXISTS `rename_database`;
CREATE PROCEDURE `rename_database` (IN `old_name` VARCHAR(20), IN `new_name` VARCHAR(20))
BEGIN
  DECLARE `current_table_name` VARCHAR(20);
  DECLARE `done` INT DEFAULT 0;
  DECLARE `table_name_cursor` CURSOR FOR SELECT `table_name` FROM `information_schema`.`tables` WHERE (`table_schema` = `old_name`);
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET `done` = 1;

  SET @sql_string = CONCAT('CREATE DATABASE IF NOT EXISTS `', `new_name` , '`;');
  PREPARE `statement` FROM @sql_string;
  EXECUTE `statement`;
  DEALLOCATE PREPARE `statement`;

  OPEN `table_name_cursor`;
  REPEAT
    FETCH `table_name_cursor` INTO `current_table_name`;
    IF NOT `done` THEN

      SET @sql_string = CONCAT('RENAME TABLE `', `old_name`, '`.`', `current_table_name`, '` TO `', `new_name`, '`.`', `current_table_name`, '`;');
      PREPARE `statement` FROM @sql_string;
      EXECUTE `statement`;
      DEALLOCATE PREPARE `statement`;

    END IF;
  UNTIL `done` END REPEAT;
  CLOSE `table_name_cursor`;

  SET @sql_string =  CONCAT('DROP DATABASE `', `old_name`, '`;');
  PREPARE `statement` FROM @sql_string;
  EXECUTE `statement`;
  DEALLOCATE PREPARE `statement`;
END//
DELIMITER ;

Hy vọng nó sẽ giúp được ai đó trong hoàn cảnh của tôi! Lưu ý: @sql_string sẽ nán lại trong phiên sau đó. Tôi đã không thể viết chức năng này mà không sử dụng nó.

1
Milosz

Tôi đã sử dụng phương pháp sau để đổi tên cơ sở dữ liệu

  1. sao lưu tệp bằng mysqldump hoặc bất kỳ công cụ DB nào, ví dụ: heidiSQL, quản trị viên mysql, v.v.

  2. Mở tệp sao lưu (ví dụ: backupfile.sql) trong một số trình soạn thảo văn bản.

  3. Tìm kiếm và thay thế tên cơ sở dữ liệu và lưu tập tin.

4. Xem lại tệp sql đã chỉnh sửa

1
Adarsha

Nếu bạn sử dụng chế độ xem phân cấp (chế độ xem kéo dữ liệu từ chế độ xem khác), nhập dữ liệu thô từ mysqldump có thể không hoạt động do mysqldump không quan tâm đến thứ tự chính xác của chế độ xem. Bởi vì điều này, tôi đã viết kịch bản sắp xếp lại các khung nhìn để điều chỉnh thứ tự một cách nhanh chóng.

Nó loooks như thế này:

#!/usr/bin/env Perl

use List::MoreUtils 'first_index'; #apt package liblist-moreutils-Perl
use strict;
use warnings;


my $views_sql;

while (<>) {
    $views_sql .= $_ if $views_sql or index($_, 'Final view structure') != -1;
    print $_ if !$views_sql;
}

my @views_regex_result = ($views_sql =~ /(\-\- Final view structure.+?\n\-\-\n\n.+?\n\n)/msg);
my @views = (join("", @views_regex_result) =~ /\-\- Final view structure for view `(.+?)`/g);
my $new_views_section = "";
while (@views) {
    foreach my $view (@views_regex_result) {
        my $view_body = ($view =~ /\/\*.+?VIEW .+ AS (select .+)\*\/;/g )[0];
        my $found = 0;
        foreach my $view (@views) {
            if ($view_body =~ /(from|join)[ \(]+`$view`/) {
                $found = $view;
                last;
            }
        }
        if (!$found) {
            print $view;
            my $name_of_view_which_was_not_found = ($view =~ /\-\- Final view structure for view `(.+?)`/g)[0];
            my $index = first_index { $_ eq $name_of_view_which_was_not_found } @views;
            if ($index != -1) {
                splice(@views, $index, 1);
                splice(@views_regex_result, $index, 1);
            }
        }
    }
}

Sử dụng:
[.__.] mysqldump -u username -v olddatabase -p | ./mysqldump_view_reorder.pl | mysql -u username -p -D newdatabase

1
gadelat

Các bạn sẽ bắn tôi vì điều này, và rất có thể điều này sẽ không hoạt động mọi lúc, và chắc chắn, nó chống lại tất cả logic blah blah ... Nhưng điều tôi vừa thử là ... DỪNG công cụ MySQL, đăng nhập là root và chỉ cần đổi tên DB ở cấp hệ thống tệp ....

Tôi đang dùng OSX và chỉ thay đổi trường hợp, từ bedbf sang BEDBF. Thật ngạc nhiên khi nó hoạt động ...

Tôi sẽ không đề xuất nó trên một DB sản xuất. Tôi chỉ thử điều này như một thử nghiệm ...

Chúc may mắn bằng một trong hai cách :-)

0
Lawrence

Tôi đã đăng cái này Làm cách nào để thay đổi tên cơ sở dữ liệu bằng MySQL? hôm nay sau nhiều ngày gãi đầu và giật tóc. Giải pháp khá đơn giản là xuất một lược đồ sang tệp .sql và mở tệp và thay đổi tên cơ sở dữ liệu/lược đồ trong phần sql CREAT TABLE ở trên cùng. Có ba trường hợp trở lên và có thể không ở đầu trang nếu các lược đồ đa năng được lưu vào tệp. Có thể chỉnh sửa toàn bộ cơ sở dữ liệu theo cách này nhưng tôi hy vọng rằng trong các cơ sở dữ liệu lớn, có thể khá khó khăn sau tất cả các trường hợp của thuộc tính hoặc chỉ mục bảng.

0
E.R.Rider

I). Không có cách nào trực tiếp mà bạn có thể thay đổi tên của một DB hiện tại Nhưng bạn có thể đạt được mục tiêu của bạn bằng cách làm theo các bước dưới đây: - 1). Tạo newdb. 2). Sử dụng newdb. 3). tạo bảng tên_bảng (chọn * từ olddb.table_name);

Bằng cách thực hiện ở trên, bạn sẽ sao chép dữ liệu từ bảng olddb và chèn dữ liệu vào bảng newdb. Đặt tên của bảng giống nhau.

II). RENAME BẢNG old_db.table_name ĐẾN new_db.table_name;

0
rajesh