MySQL重命名表
目录
MySQL重命名表
在本教程中,您将学习如何使用MySQL RENAME TABLE
语句和ALTER TABLE
语句重命名表。
MySQL RENAME TABLE语句简介
由于业务需求变化,我们需要将当前表重新命名为新表,以更好地反映或表示新情况。 MySQL提供了一个非常有用的语句来更改一个或多个表的名称。
要更改一个或多个表,我们使用RENAME TABLE
语句如下:
RENAME TABLE old_table_name TO new_table_name;
旧表(old_table_name
)必须存在,新表(new_table_name
)必须不存在。 如果新表new_table_name
存在,则该语句将失败。
除了表之外,我们还可以使用RENAME TABLE
语句来重命名视图。
在执行RENAME TABLE
语句之前,必须确保没有活动事务或锁定表。
请注意,不能使用
RENAME TABLE
语句来重命名临时表,但可以使用ALTER TABLE语句重命名临时表。
在安全性方面,我们授予旧表的任何权限必须手动迁移到新表。
在重命名表之前,应该彻底地评估影响。 例如,应该调查哪些应用程序正在使用该表。 如果表的名称更改,那么引用表名的应用程序代码也需要更改。 此外,您必须手动调整引用该表的其他数据库对象,如视图,存储过程,触发器,外键约束等。 我们将在下面的例子中更详细地讨论。
MySQL RENAME TABLE示例
首先,我们创建一个名为hrdb
的新数据库,它由两个表组成:employees
和 departments
。
创建数据库 –
CREATE DATABASE IF NOT EXISTS hrdb;
创建表 –
USE hrdb;
CREATE TABLE departments (
department_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
id int AUTO_INCREMENT primary key,
first_name varchar(50) not null,
last_name varchar(50) not null,
department_id int not null,
FOREIGN KEY (department_id)
REFERENCES departments (department_id)
);
其次,将样本数据插入到 employees
和 departments
表中:
-- 插入数据到 departments 表中
INSERT INTO departments(dept_name)
VALUES('Sales'),('Markting'),('Finance'),('Accounting'),('Warehouses'),('Production');
-- 插入数据到 employees 表中
INSERT INTO employees(first_name,last_name,department_id)
VALUES('John','Doe',1),
('Bush','Lily',2),
('David','Dave',3),
('Mary','Jane',4),
('Jonatha','Josh',5),
('Mateo','More',1);
第三,查询在 employees
和 departments
表中的数据:
mysql> SELECT
department_id, dept_name
FROM
departments;
+---------------+------------+
| department_id | dept_name |
+---------------+------------+
| 1 | Sales |
| 2 | Markting |
| 3 | Finance |
| 4 | Accounting |
| 5 | Warehouses |
| 6 | Production |
+---------------+------------+
6 rows in set
mysql> SELECT
id, first_name, last_name, department_id
FROM
employees;
+----+------------+-----------+---------------+
| id | first_name | last_name | department_id |
+----+------------+-----------+---------------+
| 1 | John | Doe | 1 |
| 2 | Bush | Lily | 2 |
| 3 | David | Dave | 3 |
| 4 | Mary | Jane | 4 |
| 5 | Jonatha | Josh | 5 |
| 6 | Mateo | More | 1 |
+----+------------+-----------+---------------+
6 rows in set
重命名视图引用的表
如果重命名一个被视图引用的表,在重命名表后,视图就无效了,并且必须手动调整视图。
例如,我们基于employees
和departments
表创建一个名为v_employee_info
的视图,如下所示:
CREATE VIEW v_employee_info as
SELECT
id, first_name, last_name, dept_name
from
employees
inner join
departments USING (department_id);
视图使用内连接子句来连接employees
和departments
表。
以下SELECT语句返回v_employee_info
视图中的所有数据。
mysql> SELECT
*
FROM
v_employee_info;
+----+------------+-----------+------------+
| id | first_name | last_name | dept_name |
+----+------------+-----------+------------+
| 1 | John | Doe | Sales |
| 2 | Bush | Lily | Markting |
| 3 | David | Dave | Finance |
| 4 | Mary | Jane | Accounting |
| 5 | Jonatha | Josh | Warehouses |
| 6 | Mateo | More | Sales |
+----+------------+-----------+------------+
6 rows in set
现在,将v_employee_info
视图中的employees
表重命名为people
,并查询视图的数据。
RENAME TABLE employees TO people;
-- 查询数据
SELECT
*
FROM
v_employee_info;
MySQL返回以下错误消息:
1356 - View 'hrdb.v_employee_info' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
我们可以使用CHECK TABLE
语句来检查v_employee_info
视图的状态如下:
CHECK TABLE v_employee_info;
mysql> CHECK TABLE v_employee_info;
+----------------------+-------+----------+----------------------------------------------------------------------------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+----------------------+-------+----------+----------------------------------------------------------------------------------------------------------------------------------------+
| hrdb.v_employee_info | check | Error | Table 'hrdb.employees' doesn't exist |
| hrdb.v_employee_info | check | Error | View 'hrdb.v_employee_info' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them |
| hrdb.v_employee_info | check | error | Corrupt |
+----------------------+-------+----------+----------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set
需要手动更改v_employee_info
视图,以便它引用people
表而不是employees
表。
重命名由存储过程引用的表
如果要重命名由存储过程引用的表,则必须像对视图一样进行手动调整。
首先,将people
表重命名为employees
表。
RENAME TABLE people TO employees;
然后,创建一个名为get_employee
的新存储过程,该过程引用employees
表。
DELIMITER $$
CREATE PROCEDURE get_employee(IN p_id INT)
BEGIN
SELECT first_name
,last_name
,dept_name
FROM employees
INNER JOIN departments using (department_id)
WHERE id = p_id;
END $$
DELIMITER;
接下来,执行get_employee
存储过程从employees
表来获取id
为1
的员工的数据,如下所示:
CALL get_employee(1);
执行上面查询语句,得到以下结果 –
mysql> CALL get_employee(1);
+------------+-----------+-----------+
| first_name | last_name | dept_name |
+------------+-----------+-----------+
| John | Doe | Sales |
+------------+-----------+-----------+
1 row in set
Query OK, 0 rows affected
之后,我们再次将employees
表重新命名为people
表。
RENAME TABLE employees TO people;
最后,调用get_employee
存储过程来获取id
为2
的员工信息:
CALL get_employee(2);
MySQL返回以下错误消息:
1146 - Table 'hrdb.employees' doesn't exist
要解决这个问题,我们必须手动将存储过程中的employees
表更改为people
表。
重命名引用外键的表
departments
表使用department_id
列链接到employees
表。 employees
表中的department_id
列是引用departments
表的department_id
列作为外键。
如果重命名departments
表,那么指向departments
表的所有外键都不会被自动更新。 在这种情况下,我们必须手动删除并重新创建外键。
RENAME TABLE departments TO depts;
我们删除ID
为1
的部门,由于外键约束,people
表中的所有行也应删除。 但是,我们将department
表重命名为depts
表,而不会手动更新外键,MySQL会返回错误,如下所示:
DELETE FROM depts
WHERE
department_id = 1;
执行上面语句,得到以下以下错误提示 –
1451 - Cannot delete or update a parent row: a foreign key constraint fails (`hrdb`.`people`, CONSTRAINT `people_ibfk_1` FOREIGN KEY (`department_id`) REFERENCES `depts` (`department_id`))
重命名多个表
也可以使用RENAME TABLE
语句来一次重命名多个表。 见下列声明:
RENAME TABLE old_table_name_1 TO new_table_name_2,
old_table_name_2 TO new_table_name_2,...
以下语句将 people
和 depts
重命名为 employees
和 departments
表:
RENAME TABLE depts TO departments,
people TO employees;
注意
RENAME TABLE
语句不是原子的。所以如果在任何时候发生错误,MySQL会将所有重新命名的表都回滚到旧名称。
使用ALTER TABLE语句重命名表
我们可以使用ALTER TABLE
语句重命名一个表,如下所示:
ALTER TABLE old_table_name
RENAME TO new_table_name;
RENAME TABLE
语句不能用于重命名临时表,这时就可以使用ALTER TABLE
语句来重命名一个临时表。
重命名临时表示例
首先,我们创建一个临时表,其中包含来自employees
表的last_name
列的所有唯一的姓氏:
CREATE TEMPORARY TABLE lastnames
SELECT DISTINCT last_name from employees;
第二步,使用RENAME TABLE
重命名姓氏表:
RENAME TABLE lastnames TO unique_lastnames;
MySQL返回以下错误消息:
Error Code: 1017. Can't find file: '.\hrdb\lastnames.frm' (errno: 2 - No such file or directory)
第三,使用ALTER TABLE
语句来重命名姓氏表。
ALTER TABLE lastnames
RENAME TO unique_lastnames;
第四,从unique_lastnames
临时表查询数据:
SELECT
last_name
FROM
unique_lastnames;
+-----------+
| last_name |
+-----------+
| Doe |
| Lily |
| Dave |
| Jane |
| Josh |
| More |
+-----------+
6 rows in set
在本教程中,我们向您展示了如何使用MySQL RENAME TABLE
和ALTER TABLE
语句重命名表。
移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:”教程” 选择相关教程阅读
order lexapro 20mg without prescription escitalopram 10mg us revia 50mg cheap
lasix 40mg oral buy ventolin 4mg for sale order ventolin inhalator online cheap
order strattera 10mg without prescription quetiapine 50mg pill oral zoloft 100mg
ursodiol 150mg price zyrtec 10mg drug cost zyrtec 10mg
generic zithromax 500mg buy gabapentin 600mg sale buy neurontin 100mg
best medicine for acid reflux natural supplements for indigestion drugs that cause flatulence
purchase prednisone generic how to buy prednisone brand amoxicillin 1000mg
online birth control prescription canada birth control instant death canada buy premature ejaculation pills
promethazine 25mg price buy stromectol no prescription buy stromectol 3mg
best over the counter ulcer medication how are antiarrhythmic drugs classified gram negative treatment antibiotic list
generic duloxetine 40mg generic glipizide buy generic provigil
fungal infection tablets antifungal tablets terbinafine hypertension medication comparison chart
cyproheptadine 4mg pills cost luvox 100mg oral ketoconazole 200 mg
best supplements for herpes outbreak genital herpes over the counter diabetic pills for humans
Быстро возводимые здания: бизнес-польза в каждом кирпиче!
В современном обществе, где моменты – финансы, экспресс-конструкции стали решением, спасающим для предпринимательства. Эти современные объекты обладают твердость, экономичное использование ресурсов и быстроту установки, что придает им способность отличным выбором для разных коммерческих начинаний.
Быстровозводимые здания
1. Высокая скорость возвода: Секунды – самое ценное в экономике, и скоростроительные конструкции обеспечивают существенное уменьшение сроков стройки. Это высоко оценивается в вариантах, когда актуально быстро начать вести дело и начать зарабатывать.
2. Финансовая экономия: За счет оптимизации процессов производства элементов и сборки на месте, стоимость быстровозводимых зданий часто оказывается ниже, по сравнению с традиционными строительными проектами. Это позволяет получить большую финансовую выгоду и достичь большей доходности инвестиций.
Подробнее на scholding.ru
В заключение, экспресс-конструкции – это идеальное решение для коммерческих задач. Они включают в себя молниеносную установку, бюджетность и надежные характеристики, что позволяет им превосходным выбором для компаний, готовых начать прибыльное дело и получать деньги. Не упустите возможность сэкономить время и средства, выбрав быстровозводимые здания для ваших будущих инициатив!
buy provera 5mg buy microzide 25mg without prescription purchase microzide without prescription
most effective smoking cessation drugs uk list of standaredc painkillers how to buy painkillers online
Скорозагружаемые здания: финансовая польза в каждой детали!
В современной реальности, где время имеет значение, объекты быстрого возвода стали решением по сути для компаний. Эти современные объекты комбинируют в себе твердость, финансовую выгоду и быстрое строительство, что дает им возможность превосходным выбором для различных бизнес-проектов.
Быстровозводимые здания работы
1. Высокая скорость возвода: Минуты – основной фактор в экономике, и сооружения моментального монтажа обеспечивают значительное снижение времени строительства. Это особенно выгодно в постановках, когда срочно нужно начать бизнес и начать зарабатывать.
2. Экономия средств: За счет совершенствования производственных операций по изготовлению элементов и монтажу на площадке, бюджет на сооружения быстрого монтажа часто снижается, по сравнению с традиционными строительными проектами. Это позволяет сократить затраты и получить лучшую инвестиционную отдачу.
Подробнее на https://www.scholding.ru/
В заключение, скоро возводимые строения – это идеальное решение для бизнес-проектов. Они объединяют в себе ускоренную установку, финансовую эффективность и надежность, что дает им возможность первоклассным вариантом для деловых лиц, готовых к мгновенному началу бизнеса и гарантировать прибыль. Не упустите шанс на сокращение времени и издержек, превосходные экспресс-конструкции для вашего предстоящего предприятия!
oral femara 2.5 mg generic albenza buy generic aripiprazole for sale
strong sleep pills can steroids cause hair thinning illegal diet pills from mexico
order uroxatral 10mg sale best over the counter medication for gerd best med for stomach gas
minocin 100mg generic buy hytrin purchase ropinirole
acne pills that actually work dermatologist recommended acne medication buy trileptal medication
buy clonidine 0.1 mg online tiotropium bromide 9 mcg generic buy generic spiriva
buy calcitriol generic buy generic trandate 100 mg buy fenofibrate 200mg generic
cost amoxicillin biaxin 500mg uk purchase macrobid pills
affordable dissertation writing gambling online win real money roulette free
buy essay online uk research dissertations buy cefixime pills
aspirin generic play slots online best online blackjack real money
purchase lamisil for sale best winning slots online play poker online real money
order desyrel 50mg suhagra for sale online clindamycin usa
order axetil online buy axetil generic robaxin cheap
buy tadalafil 10mg online indocin medication order indomethacin generic
buy generic tamoxifen for sale brand tamoxifen 20mg buy rhinocort without a prescription
retin online tretinoin uk buy avanafil 100mg online cheap
buy cleocin 150mg without prescription order erythromycin generic pills erectile dysfunction
lamotrigine 50mg pills brand mebendazole brand vermox 100mg
order flagyl generic metronidazole 400mg cost brand cephalexin
buy aurogra 100mg aurogra for sale order estradiol generic
fluconazole 200mg tablet order fluconazole 200mg generic how to buy cipro
college essay writing help dissertation writers online write my term paper
purchase aldactone pills valacyclovir 500mg us purchase propecia pill
tamsulosin online order zofran 4mg over the counter simvastatin order online
order buspirone 5mg pill buy zetia 10mg for sale brand cordarone 100mg
zantac 150mg pill order generic ranitidine buy celebrex 100mg generic
buy sumatriptan avodart brand dutasteride order online
buy allopurinol 100mg generic order allopurinol 100mg pills buy rosuvastatin 20mg pill
buy esomeprazole 40mg generic cost topiramate 100mg topiramate 100mg canada
order azelastine 10ml generic acyclovir sale avalide price
generic pepcid pepcid order order tacrolimus 5mg pills
cost xenical order xenical for sale buy diltiazem 180mg sale
coumadin pills order paroxetine 10mg generic reglan pills
trusted canadian pharmacies
buy nortriptyline 25mg generic buy nortriptyline 25mg online cheap acetaminophen 500 mg brand
order amaryl 4mg generic oral cytotec arcoxia us
inderal 20mg oral nurofen cost buy plavix 150mg sale
buy alendronate paypal fosamax price buy generic macrodantin 100mg
best canadian mail order pharmacies
buy ozobax paypal buy endep 50mg generic toradol oral
claritin for sale online order altace 5mg for sale order priligy 90mg
order ozobax online cheap buy toradol 10mg pills toradol 10mg tablet
cost dilantin 100 mg how to get flexeril without a prescription oxybutynin 2.5mg drug
aceon generic buy coversyl pills for sale order fexofenadine online cheap
canadian drugs
order levitra generic buy vardenafil 20mg online tizanidine 2mg tablet
medrol online nifedipine 10mg pill aristocort 4mg sale
serophene pill order azathioprine without prescription imuran 50mg for sale
canadian meds without prescription
poker online for fun free poker online synthroid 150mcg sale
canadian pharmacies that ship to us
canadian pharmacy cheap
buy amantadine tablets atenolol sale order dapsone 100 mg
online gambling games oral stromectol 12mg ivermectin 12mg tablets
slots meaning where can i buy ventolin buy ventolin inhalator online
pantoprazole 40mg us pantoprazole 20mg cheap buy pyridium 200mg online
roulette online real money slots free online furosemide online
atorvastatin 40mg uk order atorvastatin 80mg generic cheap amlodipine
azithromycin generic neurontin brand cost gabapentin 800mg
accutane 10mg sale azithromycin over the counter zithromax 500mg price
order cefdinir 300mg sale buy prevacid online order prevacid generic
buy modafinil 200mg online cheap purchase phenergan pills prednisone 40mg over the counter
buy generic cenforce over the counter naproxen order online buy aralen generic
tadalafil 40mg oral cialis 20mg brand buy sildenafil 100mg pills
brand micardis 20mg buy hydroxychloroquine 400mg generic cost molnupiravir 200mg
buy prilosec paypal buy generic prilosec over the counter buy lopressor pill
buy premarin 0.625mg generic purchase sildenafil without prescription sildenafil 100mg pills
betahistine 16 mg price cheap latanoprost generic benemid 500 mg
canadian pharmacy prices
how to get zovirax without a prescription xeloda ca buy exelon 6mg generic
buy generic vasotec 5mg enalapril 5mg pills duphalac ca
ferrous sulfate 100mg generic order betapace order generic betapace 40mg
prasugrel over the counter cost prasugrel 10 mg how to get detrol without a prescription
order monograph 600mg online cheap buy cilostazol 100 mg sale buy generic cilostazol for sale
fludrocortisone 100mcg over the counter order fludrocortisone 100mcg without prescription brand loperamide 2 mg
buy dydrogesterone 10mg buy dydrogesterone cheap buy empagliflozin paypal
order melatonin 3mg pills buy aygestin 5mg danocrine 100mg cost
dipyridamole 25mg oral order dipyridamole 25mg for sale buy generic pravastatin for sale
order aspirin 75mg pills aspirin 75 mg ca buy generic imiquad over the counter
brand acarbose 25mg acarbose 50mg tablet order fulvicin 250mg generic
buy mintop solution pills for erection buy ed medications online
how to get zaditor without a prescription cheap zaditor cheap imipramine 25mg
tadalafil online order order viagra online viagra 50mg generic
order fenofibrate online tricor 200mg generic tricor 200mg cheap