MySQL 表維護相關低頻操作總結

2021-09-26 23:24:21 字數 2844 閱讀 2141

一些對錶結構的修改操作是日常資料庫操作中非常低頻的,這就好像蓋完了一棟樓之後,很少會去動地基,不過這種情況在實際開發當中並非完全沒有可能,因此,此篇部落格主要總結表結構修改相關的語句。

如果要執行一些修改表結構的操作,建議可以先對表整體進行備份:

create table old_table_bak select * from old_table;
注意 ,備份生成的表不會有主鍵和自增等資訊,需要重新新增。

兩種語句:

alter table old_table_name rename new_table_name;
rename table old_table_name to new_table_name;
推薦的字符集是 utf8編碼,但在某些情況下可能還會要求使用gbk或者 gb2312等。

alter table table_name charset gbk;

# 或alter table table_name charset gb2312;

高危操作,謹慎執行!

delete from table_name;
delete from 操作會一條一條進行刪除,還有一種更快速的刪除: truncate

truncate table_name;
關閉自動提交,開啟事務,執行 delete 語句。

set autocommit = 0;
delete from emp_bak;
再執行 rollback 語句:

rollback;
可以成功回滾。

再次開啟事務,執行 truncate 語句:

truncate emp_bak;
執行回滾,rollback,但是資料仍然沒有恢復。可見,truncate 一旦執行,則不可逆,因此在實際工作中,一定要慎用該sql。 

高危操作,謹慎執行!

drop table if exists table_name;
將表中的某個欄位的型別修改,並且設定為非空:

alter table table_name modify column_name varchar(50) not null;
將表中的某個欄位名稱修改,並且設定為非空:

alter table table_name change old_column_name new_column_name char(30) not null;
實際上,modify 和 change 的區別並不十分明顯。

modify 主要用來修改字段屬性和約束,無法重新命名字段。

change 主要用來修改欄位的名稱,可以同時修改屬性和約束,但前提是必須要進行重新命名操作,如果不希望修改名稱又想用change 關鍵字,那麼可以重新命名為舊名稱,即:

alter table table_name change old_column_name old_column_name char(30) not null;
另外注意,not null 非空約束在不寫的情況下是會變為允許為null  的。因此,如果你想修改某個欄位的型別或者名稱,但不想修改 非空約束,那麼就必須在修改語句中加 not null ,否則該字段將被置為允許為 null

在表最後追加乙個字段,預設為null:

alter table table_name add new_column smallint default null;
在表中指定位置新增乙個字段:

alter table table_name add new_column varchar(50) default null after id;
在表頭加入乙個新字段:

alter table table_name add new_column varchar(50) default null first;
alter table table_name drop column_name;
刪除主鍵之前要確保該主鍵是非自增的,否則無法刪除主鍵,我們使用auto_increment 來約束自增,和 not null一樣,如果不寫,那麼就會變為非自增

alter table table_name modify id int not null;
然後刪除主鍵約束:

alter table table_name drop primary key;
除了在建表的時候指定主鍵和自增,我們還可以通過下面的方式指定主鍵和自增:

alter table table_name add primary key (id);
alter talbe table_name modify id int not null auto_increment;
我們也可以將主鍵和自增一起指定:

alter table table_name modify id int not null auto_increment, add primary key (id);

mysql表維護語句 Mysql維護語句

mysql的optimizer 優化元件 在優化sql語句時,首先需要收集一些相關資訊,其中就包括表的cardinality 可以翻譯為 雜湊程度 它表示某個索引對應的列包含多少個不同的值 如果cardinality大大少於資料的實際雜湊程度,那麼索引就基本失效了。我們可以使用show index語...

mysql表維護語句 MySQL

13.5.2.3.check table語法 check table tbl name tbl name option option 檢查乙個或多個表是否有錯誤。check table對myisam和innodb表有作用。對於myisam表,關鍵字統計資料被更新。check table也可以檢查檢視...

mysql表的維護

一 修改表的列結構 1 複製表 如複製乙個與customer一模一樣的表visitor mysql create table visitor select from customer 2 修改列的資料型別 如將visitor的nam型別改為varchar 30 mysql alter table v...