删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏
文章目錄
- 1、基礎知識
- 2、創建和管理數據庫
- 3、創建表
- 4、修改表
- 5、重命名表
- 6、 刪除表
- 7、清空表
- 8、MySQL8新特性—DDL的原子化
1、基礎知識
1.1 一條數據存儲的過程
存儲數據是處理數據的第一步 。只有正確地把數據存儲起來,我們才能進行有效的處理和分析。否則,只能是一團亂麻,無從下手。那么,怎樣才能把用戶各種經營相關的、紛繁復雜的數據,有序、高效地存儲起來呢? 在 MySQL 中,一個完整的數據存儲過程總共有 4 步,分別是創建數據庫、確認字段、創建數據表、插入數據。
我們要先創建一個數據庫,而不是直接創建數據表呢?
因為從系統架構的層次上看,MySQL 數據庫系統從大到小依次是 數據庫服務器 、 數據庫 、 數據表 、數據表的 行與列 。
1.2 標識符命名規則
①數據庫名、表名不得超過30個字符,變量名限制為29個。
②必須只能包含 A–Z, a–z, 0–9, _共63個字符。
③數據庫名、表名、字段名等對象名中間不要包含空格。
④同一個MySQL軟件中,數據庫不能同名;同一個庫中,表不能重名;同一個表中,字段不能重名。
⑤必須保證你的字段沒有和保留字、數據庫系統或常用方法沖突。如果堅持使用,請在SQL語句中使用`(著重號)引起來。
1.3 MySQL中的數據類型
其中,常用的幾類類型介紹如下:
2、創建和管理數據庫
2.1 創建數據庫
創建數據庫
創建數據庫并指定字符集
CREATE DATABASE 數據庫名 CHARACTER SET 字符集;判斷數據庫是否已經存在,不存在則創建數據庫( 推薦 )
CREATE DATABASE IF NOT EXISTS 數據庫名;注意:DATABASE 不能改名。一些可視化工具可以改名,它是建新庫,把所有表復制到新庫,再刪舊庫完成的。
2.2 使用數據庫
查看當前所有的數據庫
查看當前正在使用的數據庫
SELECT DATABASE(); #使用的是一個 mysql 中的全局函數查看指定庫下所有的表
SHOW TABLES FROM 數據庫名;查看數據庫的創建信息
SHOW CREATE DATABASE 數據庫名;使用/切換數據庫
USE 數據庫名;注意:要操作表格和數據之前必須先說明是對哪個數據庫進行操作,否則就要對所有對象加上“數據庫名.”。
2.3 修改數據庫
更改數據庫字符集
2.4 刪除數據庫
DROP DATABASE IF EXISTS 數據庫名;3、創建表
3.1 創建方式1
CREATE TABLE [IF NOT EXISTS] 表名( 字段1, 數據類型 [約束條件] [默認值], 字段2, 數據類型 [約束條件] [默認值], 字段3, 數據類型 [約束條件] [默認值], …… [表約束條件] ); -- 創建表 CREATE TABLE IF NOT EXISTS emp ( -- int類型 emp_id INT, -- 最多保存20個中英文字符 emp_name VARCHAR(20), -- 總位數不超過15位 salary DOUBLE, -- 日期類型 birthday DATE ); DESC emp;
3.2 創建方式2
使用 AS subquery 選項,將創建表和插入數據結合起來
指定的列和子查詢中的列要一一對應
通過列名和默認值定義列
3.3 查看數據表結構
在MySQL中創建好數據表之后,可以查看數據表的結構。MySQL支持使用 DESCRIBE/DESC 語句查看數據表結構,也支持使用 SHOW CREATE TABLE 語句查看數據表結構。
語法格式如下:
4、修改表
修改表指的是修改數據庫中已經存在的數據表的結構。使用 ALTER TABLE 語句可以實現:
①向已有的表中添加列
②修改現有表中的列
③刪除現有表中的列
④重命名現有表中的列
4.1 追加一個列
語法格式如下:
舉例:
ALTER TABLE dept80 ADD job_id varchar(15);
4.2 修改一個列
可以修改列的數據類型,長度、默認值和位置。
修改字段數據類型、長度、默認值、位置的語法格式如下:
舉例:
ALTER TABLE dept80 MODIFY last_name VARCHAR(30);ALTER TABLE dept80 MODIFY salary double(9,2) default 1000;4.3 重命名一個列
語法格式如下:
舉例:
ALTER TABLE dept80 CHANGE department_name dept_name varchar(15);4.4 刪除一個列
刪除表中某個字段的語法格式如下:
舉例:
ALTER TABLE dept80 DROP COLUMN job_id;5、重命名表
方式一:使用RENAME
RENAME TABLE emp TO myemp;方式二:
ALTER table dept RENAME [TO] detail_dept; -- [TO]可以省略6、 刪除表
在MySQL中,當一張數據表 沒有與其他任何數據表形成關聯關系 時,可以將當前數據表直接刪除。數據和結構都被刪除,所有正在運行的相關事務被提交,所有相關索引被刪除。語法格式:
DROP TABLE [IF EXISTS] 數據表1 [, 數據表2, …, 數據表n];舉例:
DROP TABLE dept80;DROP TABLE 語句不能回滾。
7、清空表
TRUNCATE TABLE語句:刪除表中所有的數據,釋放表的存儲空間。
舉例:
TRUNCATE語句不能回滾,而使用 DELETE 語句刪除數據,可以回滾。
SET autocommit = FALSE; DELETE FROM emp2; #TRUNCATE TABLE emp2; SELECT * FROM emp2; ROLLBACK; SELECT * FROM emp2;【參考】TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日志資源少,但 TRUNCATE 無事務且不觸發 TRIGGER,有可能造成事故,故不建議在開發代碼中使用此語句。說明:TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同。
8、MySQL8新特性—DDL的原子化
在MySQL 8.0版本中,InnoDB表的DDL支持事務完整性,即 DDL操作要么成功要么回滾 。DDL操作回滾日志寫入到data dictionary數據字典表mysql.innodb_ddl_log(該表是隱藏的表,通過show tables無法看到)中,用于回滾操作。通過設置參數,可將DDL操作日志打印輸出到MySQL錯誤日志中。
分別在MySQL 5.7版本和MySQL 8.0版本中創建數據庫和數據表,結果如下:
CREATE DATABASE mytest; USE mytest; CREATE TABLE book1( book_id INT , book_name VARCHAR(255) ); SHOW TABLES;(1)在MySQL 5.7版本中,測試步驟如下: 刪除數據表book1和數據表book2,結果如下:
mysql> DROP TABLE book1,book2; ERROR 1051 (42S02): Unknown table 'mytest.book2'再次查詢數據庫中的數據表名稱,結果如下:
mysql> SHOW TABLES; Empty set (0.00 sec)從結果可以看出,雖然刪除操作時報錯了,但是仍然刪除了數據表book1。
(2)在MySQL 8.0版本中,測試步驟如下: 刪除數據表book1和數據表book2,結果如下:
mysql> DROP TABLE book1,book2; ERROR 1051 (42S02): Unknown table 'mytest.book2'再次查詢數據庫中的數據表名稱,結果如下:
mysql> show tables; +------------------+ | Tables_in_mytest | +------------------+ | book1 | +------------------+ 1 row in set (0.00 sec)從結果可以看出,數據表book1并沒有被刪除。
總結
以上是生活随笔為你收集整理的删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 感谢领导栽培的话简短精辟句子259个
- 下一篇: 霸气网名大全108个