搜尋
首頁資料庫mysql教程MySQL優化之—簡單語法的範例程式碼分析

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
图文详解mysql架构原理图文详解mysql架构原理May 17, 2022 pm 05:54 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

See all articles

熱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尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境