被取消的命令MySQL 之前提供了一個(gè) rename database db_old to db_new 的命令來直接對(duì)數(shù)據(jù)庫(kù)改名,可能由于實(shí)現(xiàn)的功能不完備(比如,這條命令可能是一個(gè)超大的事務(wù),或者是由于之前的表很多還是 MyISAM 等),后來的版本直接取消了這條命令。更改數(shù)據(jù)庫(kù)名大致上有以下幾種方案:
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括右江網(wǎng)站建設(shè)、右江網(wǎng)站制作、右江網(wǎng)頁制作以及右江網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,右江網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到右江省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
一、mysqldump 導(dǎo)入導(dǎo)出要說最簡(jiǎn)單的方法,就是直接用 mysqldump 工具,在舊庫(kù)導(dǎo)出再往新庫(kù)導(dǎo)入(最原始、最慢、最容易想到)的方法:舊庫(kù) yttdb_old 導(dǎo)出(包含的對(duì)象:表、視圖、觸發(fā)器、事件、存儲(chǔ)過程、存儲(chǔ)函數(shù))
二、改整庫(kù)的表名利用 MySQL 更改表名的方法來批量把舊庫(kù)的所有表依次遍歷,改名為新庫(kù)的表。這種方法比第一種要快很多倍,但是沒有第一步操作起來那么順滑,不能一步到位。比如,要把數(shù)據(jù)庫(kù) yttdb_old 改名為 yttdb_new,如果數(shù)據(jù)庫(kù) yttdb_old 里只有磁盤表,那很簡(jiǎn)單,直接改名即可。或者寫個(gè)腳本來批量改,非常簡(jiǎn)單。但是一般舊庫(kù)里不只有磁盤表,還包含其他各種對(duì)象。這時(shí)候可以先考慮把舊庫(kù)的各種對(duì)象導(dǎo)出來,完了在逐一改完表名后導(dǎo)進(jìn)去。
三、歷史方案其實(shí)在 MySQL 早期還有一種方法。假設(shè) MySQL 部署好了后,所有的 binlog 都有備份,并且二進(jìn)制日志格式還是 statement 的話,那就可以簡(jiǎn)單搭建一臺(tái)從機(jī),讓它慢慢追主機(jī)到新的庫(kù)名,等確切要更改舊庫(kù)的時(shí)候,再直接晉升從機(jī)為主機(jī)即可。這里只需要從機(jī)配置一個(gè)參數(shù)來把舊庫(kù)指向?yàn)樾聨?kù):replicate-rewrite-db=yttdb_old-yttdb_new不過這種局限性很大,不具備標(biāo)準(zhǔn)化,不推薦。
總結(jié)其實(shí)針對(duì) MySQL 本身改庫(kù)名,大致就這么幾種方法:
如果數(shù)據(jù)量小,推薦第一種;
數(shù)據(jù)量大,則推薦第二種;
數(shù)據(jù)量巨大,那就非 MySQL 本身能解決的了。
可通過部署第三方 ETL 工具,通過解析 MySQL 二進(jìn)制日志或其他的方式來把舊庫(kù)數(shù)據(jù)直接讀取到新庫(kù)達(dá)到改名的目的等等。
SQL中在做查詢時(shí)怎樣給某一個(gè)字段重命名
MySQL中,如何使用SQL語句來對(duì)表中某一個(gè)字段進(jìn)行重命名呢?我們將使用alter table 這一SQL語句。
重命名字段的語法為:alter table 表名 change 字段名 字段新名稱 字段的類型。
現(xiàn)在我們來嘗試把test表中的.t_name字段重命名為t_name_new字段。
1、首先查看一下當(dāng)前test表的結(jié)構(gòu)
mysql describe test;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| t_id | int(11) | YES | | NULL | |
| t_name | var20) | YES | | NULL | |
| t_password | 32) | YES | | NULL | |
| t_birth | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
2、使用alter table語句來修改字段名稱
mysql alter table test change t_name t_name_new var20);
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
3、查看修改過后的結(jié)果
mysql describe test;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| t_id | int(11) | YES | | NULL | |
| t_name_new | var20) | YES | | NULL | |
| t_password | 32) | YES | | NULL | |
| t_birth | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
至此,我們可以順利的修改表中字段名稱了。
關(guān)于MySQL中使用SQL語句對(duì)字段進(jìn)行重命名,本文就介紹這么多,希望對(duì)大家有所幫助,謝謝! ;
1、方法一:重命名所有的表,代碼如下:
CREATE
DATABASE
new_db_name;
RENAME
TABLE
db_name.table1
TO
new_db_name.table1,
db_name.table2
TO
new_db_name.table2;
DROP
DATABASE
db_name;
2、方法二:mysqldump導(dǎo)出數(shù)據(jù)再導(dǎo)入,代碼如下:
mysqldump
-uxxxx
-pxxxx
-h
xxxx
db_name
db_name_dump.SQL
mysql
-uxxxx
-pxxxx
-h
xxxx
-e
“CREATE
DATABASE
new_db_name”
mysql
-uxxxx
-pxxxx
-h
xxxx
new_db_name
db_name_dump.SQL
mysql
-uxxxx
-pxxxx
-h
xxxx
-e
“DROP
DATABASE
db_name”
3、方法三:使用shell腳本重命名所有的表,代碼如下:
#!/bin/bash
mysqlconn=”mysql
-u
xxxx
-pxxxx
-S
/var/lib/mysql/mysql.sock
-h
localhost”
olddb=”db_name”
newdb=”new_db_name”
#$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”
五個(gè)改mysql數(shù)據(jù)庫(kù)名的方法:
1.
RENAME
DATABASE
db_name
TO
new_db_name
這個(gè)。。這個(gè)語法在mysql
5.1.7中被添加進(jìn)來,到了5.1.23又去掉了。據(jù)說有可能丟失數(shù)據(jù)。還是不要用的好。詳見:
2.如果所有表都是MyISAM類型的話,可以改文件夾的名字
關(guān)閉mysqld
把data目錄中的db_name目錄重命名為new_db_name
開啟mysqld
3.重命名所有的表
CREATE
DATABASE
new_db_name;
RENAME
TABLE
db_name.table1
TO
new_db_name.table1,
db_name.table2
TO
new_db_name.table2;
DROP
DATABASE
db_name;
4.
mysqldump導(dǎo)出數(shù)據(jù)再導(dǎo)入
mysqldump
-uxxxx
-pxxxx
-h
xxxx
db_name
db_name_dump.SQL
mysql
-uxxxx
-pxxxx
-h
xxxx
-e
“CREATE
DATABASE
new_db_name”
mysql
-uxxxx
-pxxxx
-h
xxxx
new_db_name
db_name_dump.SQL
mysql
-uxxxx
-pxxxx
-h
xxxx
-e
“DROP
DATABASE
db_name”
5.使用Shell腳本重命名所有的表
#!/bin/bash
mysqlconn=”mysql
-u
xxxx
-pxxxx
-S
/var/lib/mysql/mysql.sock
-h
localhost”
olddb=”db_name”
newdb=”new_db_name”
#$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”
就是方法3的優(yōu)化版。
修改MySQL數(shù)據(jù)庫(kù)名稱的方法如下:
1.語句修改法:
RENAME DATABASE db_name TO new_db_name
這個(gè)語法在mysql 5.1.7中被添加進(jìn)來,到了5.1.23又去掉了。
2.如果所有表都是MyISAM類型的話,可以改文件夾的名字
把data目錄中的db_name目錄重命名為new_db_name
3.重命名所有的表
代碼如下:
4. mysqldump導(dǎo)出數(shù)據(jù)再導(dǎo)入
代碼如下:
5.使用shell腳本重命名所有的表
代碼如下:
建立視圖的語句本身就可以寫成create or replace,也就是建立或者重建。所以個(gè)人想到的辦法就是:刪除--再命名重建,或者也可以先建立新的視圖-再刪除舊的,新舊視圖并不沖突。
至于重命名,我能想到的只有rename命令,不過這個(gè)能操作視圖嗎,我表示懷疑,你可以試試(按照操作表的方式試試),不過估計(jì)不行。