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);
增加和修改注释
comment
更新数据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删除更快