目錄
1、預設限制
2、設定自增列
3、檢視表定義
4、修改表名
5、修改欄位的資料型別
6、修改欄位名稱
7、新增字段
8、刪除字段
9、刪除外鍵約束
10、刪除表格
補充:
首頁 資料庫 mysql教程 MySQL優化之—簡單語法的範例程式碼分析

MySQL優化之—簡單語法的範例程式碼分析

Mar 09, 2017 pm 01:28 PM

MySQL最佳化之—簡單語法的範例程式碼分析

1、預設限制

    --mysql
    CREATE TABLE emp
    (
    id INT DEFAULT 12
    )
登入後複製

2、設定自增列

MYSQL的自增列一定要是有索引的列,設定種子值要在表的後面設定

  --mysql
    -- 设置自增ID从N开始
    CREATE TABLE emp (
    ID INT  PRIMARY KEY AUTO_INCREMENT
    ) AUTO_INCREMENT = 100 ; --(设置自增ID从100开始)
登入後複製

設定自增列的步長,可以分為全域等級和會話等級,如果是會話級別,那麼當使用者新建一個會話的時候,那麼步長又回到了全域級別mysql不能設定為表格級別的步長! !
mysql伺服器維護著2種mysql的系統參數(系統變數):全域變數(global variables)和會話變數(session variables)。
它們的意義與差異如其各佔的名稱所示,session variables是在session層級的,對其的變更只會影響到本session;global variables是系統層級的,
對其的變更會影響所有新session(變更時已經存在session不受影響)至下次mysql server重啟動。
注意它的變更影響不能跨重啟,而要想再mysql server重啟時也使用新的值,那麼就只有透過在命令列指定變數選項或更改選項檔來指定,
而透過SET變更是達不到跨重啟的。
每一個系統變數都有一個預設值,這個預設值是在編譯mysql系統的時候決定的。
對系統變數的指定,一般可以在server啟動的時候在命令列指定選項或透過選項檔來指定
當然,大部分的系統變量,可以在系統的運行時,透過set指令指定其值。
查看系統目前預設的自增列種子值和步長值

SHOW GLOBAL VARIABLES LIKE 'auto_incre%'; -- 全局变量
登入後複製

問:如果有一張表,裡面有個欄位為id的自增主鍵,當已經向表裡面插入了10條數據之後,刪除了id為8,9,10的數據,再把mysql重啟,
之後再插入一條數據,那麼這條數據的id值應該是多少,是8,還是11?
答:如果表的類型為MyISAM,那麼是11。如果表的類型為InnoDB,則id為8。
這是因為兩種類型的儲存引擎所儲存的最大ID記錄的方式不同,MyISAM表將最大的ID記錄到了資料檔案裡,重啟mysql自增主鍵的最大ID值也不會遺失;
而InnoDB則是把最大的ID值記錄到了記憶體中,所以重啟mysql或是對錶進行了OPTIMIZE操作後,最大ID值將會遺失。
順便說一下MYSQL獲取當前表的自增值的四種方法

(1) SELECT MAX(id) FROM person   针对特定表
(2) SELECT LAST_INSERT_ID()  函数   针对任何表
(3) SELECT @@identity    针对任何表
登入後複製

@@identity 是表示的是最近一次向具有identity屬性(即自增列)的表插入數據時對應的自增列的值,是系統定義的全域變數。
一般系統定義的全域變數都是以@@開頭,使用者自訂變數以@開頭。
使用@@identity的前提是在進行insert操作後,執行select @@identity的時候連線沒有關閉,否則得到的將是NULL值。

(4)  SHOW TABLE STATUS LIKE 'person'
登入後複製

如果針對特定表,建議使用這一種方法
得出的結果裡邊對應表名記錄中有​​個Auto_increment字段,裡邊有下一個自增ID的數值就是當前此表的最大自增ID.

3、檢視表定義

 DESC emp
登入後複製

4、修改表名

ALTER TABLE emp RENAME emp2
登入後複製

5、修改欄位的資料型別

    將id欄位的int型別改為bigint

ALTER TABLE emp2 MODIFY id BIGINT
登入後複製

6、修改欄位名稱

    MYSQL裡修改欄位名稱的時候需要加上欄位的資料型別否則會報錯,而CHANGE也可以只修改資料類型,實作和MODIFY同樣的效果,方法是將SQL語句中的「新欄位名稱」和「舊欄位名稱」設定為相同的名稱,只改變「資料類型」,改變資料類型,例如剛才那個例子,將id列改為bigint資料類型

<p style="margin-bottom: 7px;">ALTER TABLE emp2 CHANGE id id BIGINT<br/></p>
登入後複製

7、新增字段

ALTER TABLE emp2 ADD NAME NVARCHAR(200)  NULL
登入後複製

8、刪除字段

    MYSQL刪除字段不需要加入COLUMN關鍵字的

 ALTER TABLE emp2 DROP NAME
登入後複製

9、刪除外鍵約束

#如果是外鍵約束,則需要使用DROP FOREIGN KEY,如果是主鍵約束需要使用DROP PRIMARY KEY
    --刪除外鍵約束

 ALTER TABLE emp2 DROP FOREIGN KEY fk_emp_dept
登入後複製

    --刪除主鍵約束

 ALTER TABLE emp2 DROP PRIMARY KEY pk_emp_dept
登入後複製

10、刪除表格

DROP TABLE emp2
登入後複製

但是如果要同時刪除多個表格或刪除之前要先判斷一下

DROP TABLE IF EXISTS emp1 ,emp2
登入後複製

補充:

USE test;
-- myisam引擎
CREATE TABLE TEST(
ID int unsigned not null auto_increment,
name varchar(10) not null,
  key(name,id))engine=MYISAM auto_increment=100
;

-- innodb引擎
CREATE TABLE TESTIdentity(
ID int unsigned   not null auto_increment,
NID INT UNSIGNED ,
name varchar(10) not null,
  key(id))engine=INNODB auto_increment=100
;

--或者主键
CREATE TABLE TESTIdentity(
ID int unsigned   not null auto_increment,
NID INT UNSIGNED ,
name varchar(10) not null,
  key(id))engine=INNODB auto_increment=100
;

[Database4]
ErrorCode: -2147467259, Number: 1075
ErrorMessage: Incorrect table definition; there can be only one auto column and it must be defined as a key
alter table TESTIdentity modify column nid int auto_increment;
登入後複製

無論innodb引擎或MYISAM引擎的表中,只能有一個自增列,並且自增列一定是索引列,無論是二級索引或主鍵索引

#

以上是MySQL優化之—簡單語法的範例程式碼分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP 的大數據結構處理技巧 PHP 的大數據結構處理技巧 May 08, 2024 am 10:24 AM

PHP 的大數據結構處理技巧

如何優化 PHP 中的 MySQL 查詢效能? 如何優化 PHP 中的 MySQL 查詢效能? Jun 03, 2024 pm 08:11 PM

如何優化 PHP 中的 MySQL 查詢效能?

如何在 PHP 中使用 MySQL 備份和還原? 如何在 PHP 中使用 MySQL 備份和還原? Jun 03, 2024 pm 12:19 PM

如何在 PHP 中使用 MySQL 備份和還原?

如何使用 PHP 插入資料到 MySQL 表? 如何使用 PHP 插入資料到 MySQL 表? Jun 02, 2024 pm 02:26 PM

如何使用 PHP 插入資料到 MySQL 表?

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 Dec 09, 2024 am 11:42 AM

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤

如何在 PHP 中使用 MySQL 預存程序? 如何在 PHP 中使用 MySQL 預存程序? Jun 02, 2024 pm 02:13 PM

如何在 PHP 中使用 MySQL 預存程序?

如何使用 PHP 建立 MySQL 表? 如何使用 PHP 建立 MySQL 表? Jun 04, 2024 pm 01:57 PM

如何使用 PHP 建立 MySQL 表?

C++ 程式最佳化:時間複雜度降低技巧 C++ 程式最佳化:時間複雜度降低技巧 Jun 01, 2024 am 11:19 AM

C++ 程式最佳化:時間複雜度降低技巧

See all articles