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

 

posted @ 2018-12-01 23:00  Forever77  阅读(173)  评论(0编辑  收藏  举报