mysql索引和事務控制
阿新 • • 發佈:2021-10-14
介紹
-
加快查詢速度
-
減低資料庫的io成本
-
加快表與表的連線
-
減少分組的排列時間
-
原理依據:
- 表的主鍵,外來鍵必須有索引
- 數量超過300行的表應該有索引
- 經常與其他表連線
- 唯一性太差的不適合當索引
- 經常出現在where上的欄位,應該建立索引
-
影響:在表中有大量資料的前提下,建立索引速度會很慢
在索引建立完畢後,對錶的查詢效能會發幅度提升,但是寫效能會降低
分類
vim /etc/my.cnf default-cahracter-set=utf8 systemctl restat mariadb mysql create database imployee_salary default charset utf8; use imployee_salary; create table IT_salary (崗位類別 char(20) not null, 姓名 char(20) not null, 年齡 int, 員工ID int not null, 學歷 char(6), 年限 int, 薪資 int, primary key(員工ID)); insert into IT_salary(崗位類別,姓名,年齡,員工ID,學歷,年限,薪資) values('Windows工程師','藍凌',19,012,'中專',2,3500); insert into IT_salary(崗位類別,姓名,年齡,員工ID,學歷,年限,薪資) values('Linux工程師','姜紋',32,013,'本科',8,15000); insert into IT_salary(崗位類別,姓名,年齡,員工ID,學歷,年限,薪資) values('Java軟體工程師','關園',38,014,'大專',10,16000); insert into IT_salary(崗位類別,姓名,年齡,員工ID,學歷,年限,薪資) values('硬體驅動工程師','羅中昆',29,015,'大專',9,16500);
-
普通索引:沒有唯一性的限制
格式:create index <索引名字> on 表名<欄位>create index salary_index on IT_salary(薪資); MariaDB [imployee_salary]> show index from IT_salary\G; *************************** 2. row *************************** Table: IT_salary Non_unique: 1 Key_name: salary_index Seq_in_index: 1 Column_name: 薪資 Collation: A Cardinality: 4 Sub_part: NULL Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment:
-
唯一性索引:所有列的所有值只能出現一次
格式:create unique index <索引名字> on 表名(欄位);create unique index salary_unique_index on IT_salary(姓名); show index from IT_salary\G; *************************** 3. row *************************** Table: IT_salary Non_unique: 1 Key_name: salary_index Seq_in_index: 1 Column_name: 薪資 Collation: A Cardinality: 4 Sub_part: NULL Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment:
-
主鍵:特殊的唯一性索引,必須指定為“PRIMARY KEY”,具有唯一性的同時不能為空
格式:create yable 表名(...), primary key(欄位);
alter table 表名 add primary key(欄位);create table IT_salary (崗位類別 char(20) not null, 姓名 char(20) not null, 年齡 int, 員工ID int not null, 學歷 char(6), 年限 int, 薪資 int, primary key(員工ID)); alter table IT_salary add primary key(員工ID); *************************** 1. row *************************** Table: IT_salary Non_unique: 0 Key_name: PRIMARY Seq_in_index: 1 Column_name: 員工ID Collation: A Cardinality: 4 Sub_part: NULL Packed: NULL Null: Index_type: BTREE Comment: Index_comment:
-
全文索引:型別為FULLTEXT,可以在VARCHARvarchar ((N)中的N指的是該欄位最多能儲存多少個字元,任何都可以稱之為字元)或者TEXT(用於儲存可以從1位元組到4GB長度的文字字串)型別上建立,小型網站上
-
刪除索引
格式:drop index <索引名稱> on 表名;
alter table 表名 drop index<索引名稱>;
alter table 表名 drop primary key;drop index salary_index on IT_salary; alter table IT_salary drop index salary_unipue_index; show kets from IT_salary;
-
單列索引與多列索引:字面意思
資料庫事務
- 事務是一種機制,一個操作序列,一個不可分割的工作邏輯單元,最小的控制單元
- 原子性(atomictry):是一個完整的操作,不可分割。
- 一致性(consistency):事務開始前結束後,資料處於一致狀態,過程中可不處於一致狀態
- 隔離性(lsolation):對資料修改的所有事務都是彼此隔離的
- 永續性(duracility):一旦事務提交,就會永久保留在資料庫中
事務的操作
預設情況下mysql的事務是自動提交的。
- 事務處理命令控制
begin(開始一個事務),commit(提交一個事務),rollback(回滾一個事務(撤銷))
mysql事務操作必須基於innodb儲存引擎create databases auth; use auth; create table users(name char(20),age int,primary key(name)) engine=innodb begin insert into users values('lisi'.'123123'); commit
- 使用set命令控制
set autocommit=0 禁止自動提交
set autocommit=1 開啟自動提交