mysql 添加索引的實現(xiàn)步驟
一、數(shù)據(jù)庫索引
1、索引(index)的概念
(1)是一個排序的數(shù)據(jù)結(jié)構(gòu),幫助mysql快速查詢、更新數(shù)據(jù)庫表中的數(shù)據(jù)
(2)無須對整個表進行掃描,通過物理地址就可以找到所需數(shù)據(jù)
(3)為了提高表的搜索效率而對某些字段的值建立的數(shù)據(jù)結(jié)構(gòu);并不是所有字段都需要創(chuàng)建索引
2、索引的作用
(1)優(yōu)點
①當(dāng)數(shù)據(jù)量很大或查詢涉及多個表時,使用索引,可以大大地提高數(shù)據(jù)查詢速度,降低數(shù)據(jù)庫的IO成本;
②通過索引對數(shù)據(jù)進行排序,可以降低數(shù)據(jù)庫的排序成本,降低CPU的消耗;
③通過創(chuàng)建唯一性索引保證數(shù)據(jù)表數(shù)據(jù)的唯一性;
④可以加快表與表之間的連接
(2)缺點
①增加了數(shù)據(jù)庫的存儲空間
②降低了表的更新速度,插入和修改數(shù)據(jù)時花費更多的時間
3、索引的分類
(1)從物理存儲的角度來劃分:
①聚簇索引:索引順序按照數(shù)據(jù)的物理位置,檢索多行數(shù)據(jù)速度更快
②非聚簇索引:索引順序不是按照數(shù)據(jù)的物理位置,檢索單行數(shù)據(jù)的速度更快
(2)從邏輯的角度來劃分
普通索引、唯一索引、主鍵索引、組合索引和全文索引
4、索引的添加與使用
(1)添加索引:通過某一個字段或某些字段添加
(2)索引使用:索引創(chuàng)建完成后無需調(diào)用,當(dāng)數(shù)據(jù)庫進行數(shù)據(jù)查詢的時候,會自動使用索引
二、索引的分類
1、普通索引(可以有多個,對應(yīng)MUL)
(1)最基本的索引類型,不要求索引列的值唯一性
(2)創(chuàng)建普通索引的方式
直接創(chuàng)建 create index 索引名稱 on 表名(字段名稱(字段長度)); #字段長度可添加 修改表的方式創(chuàng)建 alter table 表名 add index 索引名稱 (字段名稱(字段長度)); 創(chuàng)建表時創(chuàng)建 create table 表名(字段1,字段2,字段3,primary key(字段名稱),index 索引名稱(字段名稱(字段長度));
示例
[root@localhost ~]# mysql -uroot -p #登錄mysql mysql> create database auth; #創(chuàng)建auth庫 mysql> use auth; #進入auth庫 mysql> create table auth.users(id int(10) not null, 創(chuàng)建users表,建立id字段,數(shù)據(jù)類型int,不為空 -> name char(20) not null, -> age varchar(10) default '', -> primary key(id)); mysql> desc users; #查看表結(jié)構(gòu),存在3個字段 mysql> insert into users values('1','zhangsan','20'); mysql> insert into users values('2','lisi','23'); mysql> insert into users values('3','wangwu','26'); #字段下分別添加內(nèi)容 mysql> select * from users; #查看表中數(shù)據(jù) 直接創(chuàng)建方法 mysql> create index index_age on auth.users(age); #在age上創(chuàng)建索引在users表的age字段,index_age:索引名稱 修改表的方式創(chuàng)建 mysql> alter table users add index index_name(name); #在users表里的name字段創(chuàng)建索引,索引名稱為index_name mysql> desc users; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(10) | NO | PRI | NULL | | #主鍵索引對應(yīng)PRL | name | char(20) | NO | MUL | NULL | | #普通索引對應(yīng)MUL | age | varchar(10) | YES | MUL | | | +-------+-------------+------+-----+---------+-------+ mysql> show index from users; 或者mysql> show keys from users; #查看users表的索引 +-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-表名--+索引值得唯一性+--索引名稱--+-索引列的序列號-+-對應(yīng)的字段 --+-----------+-------------+----------+--------+------+--索引的類型-+---------+---------------+ | users | 唯一 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | | | users |不是唯一 1 | index_age | 1 | age | A | 3 | NULL | NULL | YES | BTREE | | | | users | 1 | index_name | 1 | name | A | 3 | NULL | NULL | | BTREE | | | +-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2、唯一索引(可以有多個,對應(yīng)UNIQUE)
(1)與普通索引的區(qū)別是索引列的所有值必須唯一,但可以有空值;
(2)創(chuàng)建唯一索引的方式
create unique index 索引名稱 on 表名(字段名稱(字段長度)); #unique:默認字段
alter table 表名 add unique 索引名稱 (字段名稱(字段長度));
示例
mysql> create table auth.kc31(id int(10) not null, #創(chuàng)建kc31表,存在3個字段 -> name char(20) not null, -> address varchar(30) default '', -> unique index index_address(address)); #unique:唯一性索引 mysql> use auth; mysql> desc kc31; #查看kc31表結(jié)構(gòu) | address | varchar(30) | YES | UNI | | | #address的UNI:唯一性索引 mysql> show keys from kc31; #查看Non_unique為0:代表唯一索引 mysql> insert into kc31 values('1','aaa','zhoukou'); #插入數(shù)據(jù) mysql> insert into kc31 values('2','bbb','zhoukou'); #驗證address字段的唯一性 ERROR 1062 (23000): Duplicate entry 'zhoukou' for key 'index_address' #address字段zhoukou的關(guān)鍵字具有唯一性,所以不能創(chuàng)建 mysql> insert into kc31 values('2','bbb','luoyang'); #將zhoukou改為luoyang可以創(chuàng)建成功 mysql> insert into kc31 values('3','bbb','luohe'); #name字段不具有唯一性,可以創(chuàng)建 mysql> select * from kc31; +----+------+---------+ | id | name | address | +----+------+---------+ | 1 | aaa | zhoukou | | 2 | bbb | luoyang | | 3 | bbb | luohe | +----+------+---------+ #第二字段可以有重復(fù),第三字段因為有唯一性不能重復(fù)
3、主鍵索引(只能有一個,關(guān)鍵字PRIMARY)
(1)是一種也輸?shù)奈ㄒ凰饕?,指定?ldquo;PRIMARY KEY”
(2)一個表只能有一個主鍵,不允許有空值
(3)創(chuàng)建主鍵索引的方式
修改表的創(chuàng)建
alter table 表名 add primary key(字段名稱(字段長度));
直接指定主鍵
create table 表名(字段1,字段2,primary key(指定字段名稱));
示例
mysql> create table auth.test(id int(10) not null, #創(chuàng)建test表 -> class char(20) not null, -> primary key(id)); #直接指定主鍵為id字段 mysql> desc test; | id | int(10) | NO | PRI | NULL | | #PRI主鍵索引 mysql> show index from test\G; *************************** 1. row *************************** Table: test #表名 Non_unique: 0 #索引唯一值 Key_name: PRIMARY #索引名稱,關(guān)鍵字;PRIMARY Column_name: id #id作為主鍵 mysql> alter table test drop primary key; #清空主鍵索引 mysql> show index from test #主鍵索引為空值 mysql> alter table test add primary key(class); #將test表的class添加為主鍵 mysql> show index from test #再查詢表結(jié)構(gòu),存在class主鍵
4、主鍵索引和唯一索引的區(qū)別
(1)主鍵索引一定是唯一性索引,但唯一性索引不一定是主鍵索引
(2)一張表可以有多個唯一性索引,但只允許有提個主鍵索引
(3)主鍵列不能為空,但唯一索引可以為空
(4)主鍵索引是一種特殊的唯一性索引
mysql> alter table test add primary key(id); #驗證主鍵的唯一性 ERROR 1068 (42000): Multiple primary key defined #多余的主鍵沒有被定義,不能同時存在2個主鍵 mysql> alter table test add unique index_id(id); #創(chuàng)建id字段唯一性索引,可以有多個唯一性索引 mysql> show keys from test\G; #查看test存在2個唯一性索引 *************************** 1. row *************************** Table: test Non_unique: 0 Key_name: PRIMARY #主鍵索引 Column_name: class *************************** 2. row *************************** Table: test Non_unique: 0 Key_name: index_id #唯一索引 Column_name: id
5、組合索引(單列索引與多列索引)
(1)當(dāng)多條件查詢的時候我們可以使用組合索引,查詢效率會更高,因為當(dāng)有多個單列索引時,MySQL只能用到其中那個它認為最有效率的單列索引
(2)支持最左原則,從左往右依次執(zhí)行
(3)創(chuàng)建組合索引的方式
create table 表名(字段1,字段2,字段3,index 索引名稱(字段1名稱 字段2名稱 字段3名稱));
示例
mysql> create table auth.kgc(name char(10) not null, #創(chuàng)建kgc表 -> passwd char(50) not null, -> sex int(10) not null, -> index index_kgc(name,passwd,sex)); #在name,passwd,sex創(chuàng)建組合索引 mysql> show index from kgc\G; #查看存在3個索引
6、全文索引
(1)索引類型為FULLTEXT
(2)可以在char、varchar或者test類型的列上創(chuàng)建
create fulltext index 索引名稱 on 表名(字段名稱(字段長度));
alter table 表名 add fulltext index 索引名稱(字段名稱(字段長度));
create table 表名(字段1,字段2,字段3,fulltext index 索引名稱(字段名稱(字段長度));
示例
mysql> create table auth.content(id int(10) not null, -> title char(255) not null, -> time int(10) null, -> primary key(id), -> fulltext index_id(id)); ERROR 1283 (HY000): Column 'id' cannot be part of FULLTEXT index #id字段不是3種數(shù)據(jù)類型,不能在設(shè)置全文索引 mysql> create table auth.content(id int(10) not null, title char(255) not null, time int(10) null, primary key(id), fulltext index_id(title)); #替換為支持的數(shù)據(jù)類型即可 mysql> show index from content\G; *************************** 2. row *************************** Index_type: FULLTEXT #數(shù)據(jù)類型為全文索引
7、創(chuàng)建索引的依據(jù)
(1)表的主鍵、外鍵都必須有索引
(2)記錄數(shù)超過300行的表應(yīng)該有索引
(3)經(jīng)常與其他表進行連接的表,在連接字段上應(yīng)該建立索引
(4)唯一性太差的字段不適合創(chuàng)建索引
(5)更新太頻繁的字段不適合創(chuàng)建索引
(6)將常出現(xiàn)再where子句中的字段,特別是大表的字段,應(yīng)該建立索引
(7)索引應(yīng)該建立在選擇性高的字段上
(8)索引應(yīng)該建在小字段上,對于大的文本字段甚至超長字段,不要建索引
8、查看索引的方法
show index from 表名; show keys from 表名;
9、刪除索引的方法
drop index 索引名稱 on 表名; #刪除普通索引 alter table 表名 drop index 索引名稱; #刪除普通索引 alter table 表名 drop primary key; #刪除主鍵索引
示例
mysql> drop index index_id on content; #刪除content表下的index_id索引 mysql> alter table content drop primary key; #刪除ontent表下的主鍵索引 mysql> show index from content; Empty set (0.00 sec) #索引已刪除
三、MySQL事務(wù)
1、事務(wù)的概念
(1)是一種機制、一個操作的組合,包含了一組數(shù)據(jù)庫操作命令,并且把所有的命令作為一個整體一起向系統(tǒng)提交或撤銷操作請求,即這一組數(shù)據(jù)庫操作命令要么都執(zhí)行,要么都不執(zhí)行
(2)是一個不可分割的工作邏輯單元,在數(shù)據(jù)庫系統(tǒng)上執(zhí)行并發(fā)操作時,事務(wù)是最小的控制單元
(3)適用于多用戶同時操作數(shù)據(jù)庫系統(tǒng)的場景,如銀行、保險公司及證券交易系統(tǒng)等待
(4)通過事務(wù)的整體性以保證數(shù)據(jù)的一致性
2、事務(wù)的ACID特點
(1)原子性(Atomicity)
①事務(wù)是一個完整的操作,事務(wù)的各元素是不可分割的
②事務(wù)中的所有元素必須作為一個整體提交或回滾
③如果事務(wù)中的任何元素失敗,則整個事務(wù)將失敗
(2)一致性(Consistency)
①當(dāng)事務(wù)完成時,數(shù)據(jù)必須處于一致狀態(tài)
②當(dāng)事務(wù)開始前,數(shù)據(jù)庫中存儲的數(shù)據(jù)處于一致狀態(tài)
③在正在執(zhí)行的事務(wù)中,數(shù)據(jù)可能處于不一致的狀態(tài)
④當(dāng)事務(wù)成功完成時,數(shù)據(jù)必須再次回到已知的一致狀態(tài)
(3)隔離性(Isolation)
①對數(shù)據(jù)進行修改的所有并發(fā)事務(wù)是彼此隔離的,表名事務(wù)必須是獨立的,它不應(yīng)以任何方式依賴于或影響其他事務(wù)
②修改數(shù)據(jù)的事務(wù)可在另一個使用相同數(shù)據(jù)的事務(wù)開始之前訪問這些數(shù)據(jù),或者在另一個使用相同數(shù)據(jù)的事務(wù)結(jié)束之后訪問這些數(shù)據(jù)
(4)持久性(Durability)
①值不管系統(tǒng)是否發(fā)生故障,事務(wù)處理的結(jié)果都是永久的
②一旦事務(wù)被提交,事務(wù)的效果會被永久地保留在數(shù)據(jù)庫中
3、事務(wù)控制語句
(1)MySQL事務(wù)默認是自動提交,當(dāng)SQL語句提交時事務(wù)遍自動提交
(2)事務(wù)控制語句
①begin:開啟一個事務(wù)
②rollback:回滾一個事務(wù),回滾到 begen之前地狀態(tài)
③commit:提交一個事務(wù)
④savepoint identifier:在事務(wù)中創(chuàng)建一個保存點,一個事務(wù)可以有多個savepoint
⑤release savepoint identifier:刪除一個事務(wù)的保存點(與保存的數(shù)據(jù)無影響)
⑥r(nóng)ollback to identifier:回滾到一個事務(wù)的保存點
⑦set transaction:用來設(shè)置事務(wù)的隔離級別
4、手動對事務(wù)進行控制的方法
(1)事務(wù)處理命令控制事務(wù)
①begin:開始一個事務(wù)
②commit:提交一個事務(wù)
③rollback:回滾一個事務(wù)(位于begin和commit之間)
(2)使用set命令進行控制
①set autocommit=0:禁止自動提交(手動提交事務(wù))
②set autocommit=1:開啟自動提交
5、實驗:手動控制事務(wù)
(1)驗證手動控制事務(wù)不提交則不會保存
[root@localhost ~]# mysql -uroot -p #啟動數(shù)據(jù)庫 mysql> create database imployee_salary; #創(chuàng)建imployee_salary數(shù)據(jù)庫 mysql> use imployee_salary; #進入imployee_salary數(shù)據(jù)庫 mysql> create table IT_salary(員工ID char(10), -> 崗位類別 char(20), -> 姓名 char(10), -> 年齡 char(10), -> 學(xué)歷 char(10), -> 薪資 char(10), -> primary key(員工ID)); mysql> desc it_salary; +--------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+----------+------+-----+---------+-------+ | 員工ID | char(10) | NO | PRI | NULL | | | 崗位類別 | char(20) | YES | | NULL | | | 姓名 | char(10) | YES | | NULL | | | 年齡 | char(10) | YES | | NULL | | | 學(xué)歷 | char(10) | YES | | NULL | | | 薪資 | char(10) | YES | | NULL | | +--------------+----------+------+-----+---------+-------+ mysql> begin; #開啟事務(wù) mysql> insert into it_salary values('1','硬件工程師','小王','22','???,'8000'); mysql> insert into it_salary values('2','windows工程師','小張','23','本科','9000'); mysql> insert into it_salary values('4','Linux工程師','小楊','25','本科','12000'); mysql> select * from it_salary; +----------+------------------+--------+--------+--------+--------+ | 員工ID | 崗位類別 | 姓名 | 年齡 | 學(xué)歷 | 薪資 | +----------+------------------+--------+--------+--------+--------+ | 1 | 硬件工程師 | 小王 | 22 | ??? | 8000 | | 2 | windows工程師 | 小張 | 23 | 本科 | 9000 | | 4 | Linux工程師 | 小楊 | 25 | 本科 | 12000 | +----------+------------------+--------+--------+--------+--------+ mysql> exit #退出 [root@localhost ~]# mysql -uroot -p #重新登錄數(shù)據(jù)庫 mysql> show tables from imployee_salary; #能夠查到it_salary數(shù)據(jù)表 mysql> select * from it_salary; #數(shù)據(jù)已經(jīng)不存在 說明:此時數(shù)據(jù)庫中并沒有之前插入的數(shù)據(jù),說明使用begin開啟服務(wù),執(zhí)行數(shù)據(jù)操作語句后,必須使用commit提交事務(wù),否則數(shù)據(jù)是不能自動提交的。 (2)rollback(回滾)的使用 mysql> use imployee_salary; mysql> begin; #開啟事務(wù) mysql> insert into it_salary values('1','硬件工程師','小王','22','專科','8000'); mysql> insert into it_salary values('2','windows工程師','小張','23','本科','9000'); mysql> select * from it_salary; #存在添加的兩行數(shù)據(jù) mysql> rollback; #回滾事務(wù) mysql> select * from it_salary; #數(shù)據(jù)已經(jīng)不存在 說明:使用begin開始事務(wù),然后執(zhí)行了插入語句后可以看到插入的數(shù)據(jù),但是執(zhí)行rollback回滾命令后,之前的數(shù)據(jù)已經(jīng)沒有了 (3)savepoint(定義回滾點)的使用 mysql> begin; #開啟事務(wù) mysql> insert into it_salary values('1','硬件工程師','小王','22','???,'8000'); #插入一個數(shù)據(jù) mysql> savepoint s1; #定義s1回滾點 mysql> insert into it_salary values('2','windows工程師','小張','23','本科','9000'); #插入第二個數(shù)據(jù) mysql> savepoint s2; #定義s2回滾點 mysql> select * from it_salary; #存在插入的2行數(shù)據(jù)
如果后面執(zhí)行rollback命令,這兩條數(shù)據(jù)都將丟失。
mysql> rollback to savepoint s1; #回滾到s1 mysql> select * from it_salary; #只存在一條數(shù)據(jù) +----------+-----------------+--------+--------+--------+--------+ | 員工ID | 崗位類別 | 姓名 | 年齡 | 學(xué)歷 | 薪資 | +----------+-----------------+--------+--------+--------+--------+ | 1 | 硬件工程師 | 小王 | 22 | 專科 | 8000 | +----------+-----------------+--------+--------+--------+--------+ mysql> rollback to savepoint s2; #嘗試回滾到s2 ERROR 1305 (42000): SAVEPOINT s2 does not exist #數(shù)據(jù)無法回滾 說明:回滾到s1,第一條插入的數(shù)據(jù)可以查詢出來,但是無法回退到s2了 (4)使用set命令控制事務(wù) mysql> set autocommit=0; #改為手動提交事務(wù) mysql> insert into it_salary values('2','windows工程師','小張','23','本科','9000'); mysql> commit; #提交事務(wù),數(shù)據(jù)永久保存 說明:若commit提交事務(wù)后,則數(shù)據(jù)無法進行回滾
四、存儲引擎
1、存儲引擎介紹
(1)MySQL中的數(shù)據(jù)用各種不同地技術(shù)存儲在文件中,每一種技術(shù)都使用不同的存儲機制、索引技巧、鎖定水平并最終提供不同的功能和能力,這些不同的技術(shù)以及配套地功能在MySQL中稱為存儲引擎
(2)存儲引擎是MySQL將數(shù)據(jù)存儲在文件系統(tǒng)中的存儲方式或者存儲格式
(3)MySQL常用的存儲方式
①MyISAM;②innoDB
(4)MySQL數(shù)據(jù)庫中的組件,負責(zé)執(zhí)行實際的數(shù)據(jù)I/O操作
(5)MySQL系統(tǒng)中,存儲引擎處于文件系統(tǒng)之上,在數(shù)據(jù)保存到文件系統(tǒng)之前會傳輸?shù)酱鎯σ妫蟀凑崭鱾€存儲引擎的存儲格式進行儲存
2、MyISAM的介紹
(1)MyISAM不支持事務(wù),也不支持外鍵
(2)訪問速度快
(3)對事務(wù)完整性沒有要求
(4)MyISAM在磁盤上存儲成三個文件
①表結(jié)構(gòu)文件(.frm文件)
②數(shù)據(jù)文件的擴展名為.MYD(MYData)
③索引文件的擴展名是.MYI(MYIndex)
(5)表級鎖定形式,數(shù)據(jù)在更新時鎖定整個表
(6)數(shù)據(jù)庫在讀寫過程中相互阻塞
①會在數(shù)據(jù)寫入的過程中阻塞用戶數(shù)據(jù)的讀取
②也會在數(shù)據(jù)讀取的過程中阻塞用戶的數(shù)據(jù)寫入
(7)數(shù)據(jù)單獨寫入或讀取,速度較快且占用資源相對少
(8)MyIAM支持的存儲格式
①靜態(tài)表;②動態(tài)表;③壓縮表
3、MyISAM適用的生產(chǎn)場景
(1)公司業(yè)務(wù)不需要事務(wù)的支持
(2)單方面讀取或?qū)懭霐?shù)據(jù)比較多的業(yè)務(wù)
(3)MyISAM存儲引擎不適合數(shù)據(jù)讀寫都比較頻繁的場景
(4)對數(shù)據(jù)業(yè)務(wù)一致性要求不是非常高的業(yè)務(wù)
(5)服務(wù)器硬件資源相對比較差
4、innoDB特點介紹
(1)支持事務(wù)
(2)行級鎖定,提高數(shù)據(jù)庫并發(fā)訪問性能
(3)非常高效的緩存索引和數(shù)據(jù)
(4)支持外鍵約束,5.5版本后支持全文索引
(5)對硬件資源要求比較高的場合
5、innoDB適用生產(chǎn)場景分析
(1)業(yè)務(wù)需要事務(wù)的支持
(2)行級鎖定對高并發(fā)有很好的適應(yīng)能力,但需確保查詢是通過索引來完成
(3)業(yè)務(wù)數(shù)據(jù)更新較為頻繁的場景,如:論壇,微博等
(4)業(yè)務(wù)數(shù)據(jù)一致性要求較高,如:銀行業(yè)務(wù)
(5)硬件設(shè)備內(nèi)存較大,利用lnnodb較好的緩存能力來提高內(nèi)存利用率,減少磁盤IO的壓力
6、企業(yè)選擇存儲引擎依據(jù)
(1)需要考慮每個存儲引擎提供的核心功能及應(yīng)用場景
(2)支持的字段和數(shù)據(jù)類型
(3)鎖定類型:不同的存儲引擎支持不同級別的鎖定
(4)索引的支持
(5)事務(wù)處理的支持
7、查看存儲引擎
(1)查看MySQL默認的存儲引擎
mysql> show engines; #默認存在9款存儲引擎 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ mysql> show variables like '%storage_engine%'; (2)查看表正在使用的存儲引擎 mysql> show table status where name='表名'; mysql> show create table 表名;
8、修改存儲引擎
(1)alter table 修改 (準對以創(chuàng)建的表)
mysql> alter table user_info engine=引擎;
(2)修改my.cnf文件,指定默認存儲引擎并重新啟動(針對新創(chuàng)建的表,舊表不影響存儲引擎)
[root@localhost ~]# vim /etc/my.cnf default-storage-engine=INNODB [root@localhost ~]# systemctl restart mysqld
(3)create table創(chuàng)建表時指定存儲引擎
mysql> create table 表名(字段1) engine=引擎;
(4)臨時修改存儲引擎
mysql> set default_storage_engine=引擎;
到此這篇關(guān)于mysql 添加索引的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)mysql 添加索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL查詢學(xué)習(xí)之基礎(chǔ)查詢操作
這篇文章主要給大家介紹了關(guān)于MySQL查詢學(xué)習(xí)之基礎(chǔ)查詢操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05mysql5.5與mysq 5.6中禁用innodb引擎的方法
這篇文章主要介紹了mysql5.5中禁用innodb引擎的方法,需要的朋友可以參考下2014-04-04數(shù)據(jù)庫查詢哪個對像里面包含什么字段方法語句
在本篇文章里小編給大家整理的關(guān)于數(shù)據(jù)庫查詢哪個對像里面包含什么字段方法語句有需要的朋友們可以學(xué)習(xí)下。2019-08-08