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刪除更快