日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

删库跑路?不可回滚?MySQL创建和管理表,修改清空表,MySQL8新特性DDL原子化,完整详细可收藏

發布時間:2023/12/2 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 删库跑路?不可回滚?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 數據庫名;

創建數據庫并指定字符集

CREATE DATABASE 數據庫名 CHARACTER SET 字符集;

判斷數據庫是否已經存在,不存在則創建數據庫( 推薦 )

CREATE DATABASE IF NOT EXISTS 數據庫名;

注意:DATABASE 不能改名。一些可視化工具可以改名,它是建新庫,把所有表復制到新庫,再刪舊庫完成的。

2.2 使用數據庫
查看當前所有的數據庫

SHOW DATABASES; #有一個S,代表多個數據庫

查看當前正在使用的數據庫

SELECT DATABASE(); #使用的是一個 mysql 中的全局函數

查看指定庫下所有的表

SHOW TABLES FROM 數據庫名;

查看數據庫的創建信息

SHOW CREATE DATABASE 數據庫名;

使用/切換數據庫

USE 數據庫名;

注意:要操作表格和數據之前必須先說明是對哪個數據庫進行操作,否則就要對所有對象加上“數據庫名.”。

2.3 修改數據庫
更改數據庫字符集

ALTER DATABASE 數據庫名 CHARACTER SET 字符集; #比如:gbk、utf8等

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 選項,將創建表和插入數據結合起來

指定的列和子查詢中的列要一一對應
通過列名和默認值定義列

CREATE TABLE emp1 AS SELECT * FROM employees; CREATE TABLE emp2 AS SELECT * FROM employees WHERE 1=2; -- 創建的emp2是空表 CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80;

3.3 查看數據表結構
在MySQL中創建好數據表之后,可以查看數據表的結構。MySQL支持使用 DESCRIBE/DESC 語句查看數據表結構,也支持使用 SHOW CREATE TABLE 語句查看數據表結構。
語法格式如下:

SHOW CREATE TABLE 表名;

4、修改表

修改表指的是修改數據庫中已經存在的數據表的結構。使用 ALTER TABLE 語句可以實現:
①向已有的表中添加列
②修改現有表中的列
③刪除現有表中的列
④重命名現有表中的列

4.1 追加一個列
語法格式如下:

ALTER TABLE 表名 ADD [COLUMN] 字段名 字段類型 [FIRST|AFTER 字段名];

舉例:

ALTER TABLE dept80 ADD job_id varchar(15);


4.2 修改一個列
可以修改列的數據類型,長度、默認值和位置。
修改字段數據類型、長度、默認值、位置的語法格式如下:

ALTER TABLE 表名 MODIFY [COLUMN] 字段名1 字段類型 [DEFAULT 默認值][FIRST|AFTER 字段名2];

舉例:

ALTER TABLE dept80 MODIFY last_name VARCHAR(30);ALTER TABLE dept80 MODIFY salary double(9,2) default 1000;

4.3 重命名一個列
語法格式如下:

ALTER TABLE 表名 CHANGE [column] 列名 新列名 新數據類型;

舉例:

ALTER TABLE dept80 CHANGE department_name dept_name varchar(15);

4.4 刪除一個列
刪除表中某個字段的語法格式如下:

ALTER TABLE 表名 DROP [COLUMN]字段名;

舉例:

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 TABLE detail_dept;

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原子化,完整详细可收藏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。