一、索引:
就是用来提高搜索性能的 只有我们数据量非常大的时候,索引可以展现出它的优势来!
注意:索引,我们在添加了以后,不用刻意的去使用它,它会自动生效
1. 常规索引(index):没有任何限制,就是普通的索引
1> 在建表时创建普通索引
create table t1(
id int unsigned not null,
name varchar(32),
index id(id)// index 索引名(字段名)
);
2> 在建表之后给表字段添加普通索引
create index id on t2(id);
create 索引类型 索引名 on 表名(字段名);
3> 删除表中的普通索引
drop index id on t2;
drop 索引类型 索引名 on 表名;
2. 唯一索引(unique)
定义了唯一索引的数据列,它里面的内容,必须保证没有重复的,如果出现重复的内容,则会报错!
1> 在创建表的时候定义唯一索引
create table t1(
id int unsigned not null,
name varchar(32),
unique index name(name)//索引类型 索引名(字段名)
);
2> 在创建表的时候定义唯一索引2
create table t1(
id int unsigned not null,
name varchar(32) unique//直接在建表时将索引名写在指定字段后
);
3> 表创建以后添加唯一索引
create unique index name on t1(name);
create 索引类型 索引名 on 表名(字段名)
4> 删除唯一索引
drop index name on t1;
drop index 索引名 on 表名;
3. 主键索引(primary key)
主键索引类似于唯一索引,它的数据列也必须保证是唯一的,它跟唯一索引的区别在于,它只能在一个表中定义一次
1> 创建表是添加主键索引
create table t1(
id int unsigned not null auto_increment primary key,
name varchar(32)
);
2> 在建表之后加主键索引
因为主键索引比较特殊,它只能在一个表中出现一次,所以在建表后添加主键索引使用下面的方法
alter table t7 change id id int unsigned not null auto_increment primary key;
alter table 表名 change 原字段 新字段 类型(长度) 约束条件;
3> 删除主键索引
① 首先,看一下你的表中是否有 auto_increment 这个约束条件
② 如果有,先将其删除
alter table 表名 change id id int unsigned not null;
② 最后,可以删除主键索引
alter table 表名 drop primary key;
4. 全文索引
用户能够在不使用模式匹配操作的前提下去搜索单词或短语。全文索引在MySQL中是一个FULLTEXT类型的索引,但只能用在MyIASM表,并且只能在CHAR、VARCHAR或TEXT类型的列上创建,也允许创建在一个或多个数据列上。这是一种特殊的索引。
1> 创建表时添加全文索引
create table books(
bookid int(10) not null auto_increment,
bookname varchar(50) not null,
detail text not null,
fulltext (detail),
primary key (bookid)
);
2>查询detail字段中出现的‘hello’的记录,以相关性从高到低的顺序排列。
select match(detail) against('hello') from books;
二、存储引擎
1.需要先分析我们的项目属于那种类型的,然后再去选择使用哪种存储引擎
1> MyISAM//因为它不支持事务的处理,不占用磁盘的空间,所以访问速度快当我们执行查询的频率比较高时,使用MyISAM这种存储引擎
2> InnoDB//可以支持事务处理的,占用磁盘的空间,会降低访问速度,因为它安全,因此我们在执行一些具有风险的操作时,建议使用InnoDB存储引擎,修改、删除
2.查看当前我们所使用的存储引擎
show variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| default_storage_engine | MyISAM |
+------------------------+--------+
1 row in set, 1 warning (0.00 sec)
3. 在建表时指定存储引擎
mysql> create table t8(
-> id int unsigned not null auto_increment primary key,
-> name varchar(32) not null unique
-> )engine=InnoDB[MyISAM];//这里是指定存储引擎的地方
4. 查看表存储引擎的方法
show create table 表名;查看建表语句即可
三、字符编码
查看当前服务器或数据库的编码,使用 \s 即可
1> 服务器级
2> 数据库级
3> 数据表级
4> 数据字段级
如果说你想要让数据库中的数据不出现乱码,就必须保证上面四个级别编码统一都是 utf8
我们可以设置的编码,到底有多少种
show character set;
注意:因为我们MySQL中,编码设置具有遗传性、继承性,所以,我们只设置服务器级别的编码设置为 utf8 ,那么无论他下面的数据库、数据表、数据字段都会继承 utf8 的编码
1. 服务器级别的编码如何来进行设置
set character_set_server = '编码';
2. 数据库级别的编码进行设置
创建时给定编码:create database 数据库名 default charset = 'utf8';
修改数据库编码:set character_set_database = '编码';
3. 数据表级别的编码进行设置
创建数据表时给定编码:
create table t9(
id int unsigned not null auto_increment primary key,
name varchar(32)
)engine=MyISAM default charset=utf8;//进行设置数据表编码的位置
修改表的编码:alter table t9 charset='utf8';
4. 对数据字段级别的编码进行设置
必须是字符串型的数据才会有编码
alter table t9 change name name varchar(32) character set 'utf8';
5.配置文件修改默认字符编码
在[mysqld]下添加
character-set-server=utf8
在[client]下添加
default-character-set=utf8
四、修改表结构
1.添加字段
alter table 表名 add 字段名 字段类型(长度) 约束条件;
alter table stu add aihao set("dabolang","xiaobolang");
alter table stu add xiaoming varchar(32) after name;
alter table stu add sid int unsigned not null .. first;
注意:我们在添加字段时,可以规定它添加的位置,通过 after 或 first 来控制默认位置为最后一个字段后
2.删除字段
alter table 表名 drop 字段名;
注意:删除字段是,关键字是 drop 而不是 delete 这点要注意
再次注意:drop 是针对于数据库或数据表或数据表结构执行删除时的关键字,delete 是针对数据表中的数据执行删除时的关键字
3.修改字段
alter table 表名 change 原字段名 新字段名 类型(长度) 约束条件;
例如:alter table stu change classid classname varchar(32) default 'lamp149';
alter table 表名 modify 原字段名 类型(长度) 约束条件;
例如:alter table stu modify classname varchar(64) default 'lamp149';
注意:使用change 关键字可以将字段名同时进行修改,但是modify不具有重命名的效果,只能修改数据类型和约束条件
4.修改表名
alter table 表名 rename 新表名;
例如:alter table stu rename stu1;