1. 程式人生 > >mysql庫、表、索引

mysql庫、表、索引

建立和刪除資料庫,同一個資料庫下的不同表可以採用不同的引擎

mysql> create database oldboy default character set utf8 collate utf8_generial_ci;

mysql> drop database oldboy;

 

建立表,5.5之後預設引擎為InnoDB

mysql> create table student t (id int,name varchar(20),hobby varchar(20) )engine=MyISAM charset=utf8;

mysql> drop table student;

 

索引類似書本的目錄,可以加快查詢速度

索引需要佔用系統空間,更新資料庫時也需要維護索引,因此是把雙刃劍,數十到幾百行的小表無需建立索引,讀取較少更新頻繁的表要少建立索引。

 

向表中插入資料,mysql中可以一個insert插入多條記錄,多個記錄之間用逗號分隔

mysql> insert into student values (1,'Alice','flower'),(2,'Bob','tennis'),(3,'Jack','book'),(4,''Jane,'dance');

 

查詢資料

mysql> select name,hobby from student where id>2 [limit [3,]8];

limit m,n表示在符合條件的結果中,再從第m+1條開始,篩選n條記錄;limit只跟一個引數表示從第一條開始篩選出n條記錄。

 

在查詢語句select前加explain可檢視執行計劃

mysql> explain select * from test where id>3 limit 3,2 \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test
         type: range  #(掃描範圍,all或range)
possible_keys: 
PRIMARY #(可能走的索引) key: PRIMARY key_len: 4 ref: NULL rows: 6#(掃描行數) Extra: Using where 1 row in set (0.00 sec)

 

索引類似書本的目錄,可以加快查詢速度,同時需要佔用系統空間,更新資料庫時也需要維護索引,因此索引是把雙刃劍。

數十到幾百行的小表無需建立索引,讀取較少更新頻繁的表要少建立索引。

索引可分為主鍵索引和普通索引(auto_increment自動增長的列必須設定索引),可以在單列上建立索引,也可以在多列上建立索引。

 

表建立後增加和刪除主鍵索引

mysql> alter table student add primary key(id);

mysql> alter table student drop primary key;

表建立後增加和刪除唯一索引

mysql>alter table student add unique index unique_id(id);

(也可以使用create語句建立唯一索引 mysql> create unique index unique_id on student(id); )

mysql> alter table student drop index unique_id;

(也可以使用drop語句刪除唯一索引 mysql> drop index unique_id on student; )

表建立後增加和刪除普通索引

mysql> alter table student add index index_dept(dept);

(也可以使用create語句建立普通索引 mysql> create index index_dept on student(dept); )

mysql> alter table student drop index index_dept;

(也可以使用drop語句刪除普通索引 mysql> drop index index_dept on student; )

表建立後增加和刪除複合索引 (複合索引具有字首生效特性,例如index(a,b,c),只有查詢條件a、ab、abc三種情況才會走索引)

mysql>create index index_name_dept on student(name(8),dept(10));(對name的前8和dept的前10個字元建立複合索引)

 

建立表時建立索引

create table student2 (

  id int(4) NOT NULL  auto_increment,name char(10)  NOT NULL,age tinyint(2) NOT NULL DEFAULT 0,dept varchar(16) DEFAULT NULL,

  primary key(id),unique index index_id(id),index index_dept(dept)

);或者

create table student2 (

  id int(4) NOT NULL  auto_increment,name char(10)  NOT NULL,age tinyint(2) NOT NULL DEFAULT 0,dept varchar(16) DEFAULT NULL,

  primary key(id),unique (id),key index_dept(dept)

);

 

修改表名

rename table 原表名 to 新表名   或者   alter table 原表名 rename to 新表名

mysql>rename table stu to student;

mysql>alter table student rename to stu;

 

增加欄位

alter table 表名 add 欄位名 型別 [約束] [ first|after 欄位] [,add 欄位名 型別]

mysql>alter table student add sex tinyint(2) default male after name;

增加欄位時如有約束可以同時新增,增加的欄位預設為最後一個欄位,first表示新增的為第一個欄位,after 欄位表示在該欄位的後增加;逗號加add可同時新增多個列

 

刪除欄位

alter table 表名 drop 欄位

mysql>alter table student drop sex;

 

修改欄位的資料型別

alter table 表名 modify 欄位 新型別

mysql>alter table student modify name varchar(20);

 

修改欄位名(可同時修改資料型別)

alter table 表名 change 原欄位名 新欄位名 型別

mysql>alter table student change id number int(4);

 

更新資料update和刪除資料delete,記得要用where過濾條件,否則修改的就是整個表的資料

mysql> update student set hobby='swimming' where id=4;

mysql> delete from student where id<3;

 

alias mysql=’mysql -U’(永久生效需要寫入/etc/profile)

在同一個介面退出重新以mysql登入時,如果執行不帶where條件的update和delete時,資料庫會報錯

參考視訊 http://blog.51cto.com/oldboy/1321061

 

delete邏輯刪除,按行刪,truncate直接清除物理檔案,truncate刪除更快