mysql-基本命令与索引
基本SQL命令
库管理
创建库(指定字符集):create database 库名 default charset = utf-8;
查看创建库的语句:show create database 库名;
切换库:use 库名;
查看当前所在库:select database();
查看库中已有表:show tables;
删除库:drop database 库名;
表管理
创建表(指定字符集):CREATE TABLES 表名(字段名,数据类型,...)DEFAULT CHARSET = UTF-8;
查看创建表的语句(字符集和存储引擎):show create table 表名;
查看表结构:desc 表名;
删除表:drop table 表名;
表记录管理:
插入:insert into 表名 values(),(),...;
insert into 表名(字段名列表) values(),(),...;
查询:select * from 表名;
select 字段名1,字段名2,...from 表名;
删除:delete from 表名 where 条件;
更新:update 表名 set 字段名=值1,...where 条件;
表字段管理:
添加:alter table 表名 add 字段名 数据类型 first ;
alter table 表名 add 字段名 数据类型 after 字段名;
修改:alter table 表名 drop 字段名;
字段重命名: alter table 表名 change 旧字段名 新字段名 数据类型;
表的重命名: alter table 表名 rename 新表名;
修改默认字符集
cd /etc/mysql/mysql.conf.d/
cp -p mysqld.cnf mysqld.cnf.bak
vi mysqld.cnf
[mysqld]
character_set_server = utf-8
/etc/init.d/mysql restart
SQL查询
排序:order by 字段名 ASC/DESC 升序/降序
范围:limit m,n #放在最后
聚合函数:avg(),sum(),max(),min(),count(字段名)##Null不会被统计
分组:group by
过滤:having #having与group by联合使用,用来过滤由group by语句返回的记录集
#where只能操作表中实际存在的列,having则可以操作聚合函数生成的显示列
去重:distinct
索引
mysql索引的数据结构为B Tree
优点:可以加快数据的检索速度
缺点:需要动态维护,降低了数据的维护速度,索引占用物理空间
索引性能分析:
- 开启性能分析:set profiling = 1
- 创建索引字段: create index 索引名 on 表名(字段名)
- 执行sql命令
- 查看性能分析结果:show profiling
索引分类
普通索引:index
创建:create index 索引名 on 表名(字段名)
唯一索引:UNI,字段值可以为空,但不允许重复
创建:create unique index 索引名 on 表名(字段名)
删除:只能一个一个删
show index from 表名;
drop index 索引名 on 表名;
主键索引:PRI,字段值不能为空且不允许重复
一个表中只能有一个字段为主键字段
创建:alter table 表名 add primary key(字段名)
删除:先删除自增长属性 alter table 表名 modify 字段名 数据类型;
删除主键 alter table 表名 drop primary key;
已有表添加主键索引:alter table 表名 motify 字段名 数据类型 auto_increment;
外键索引:让当前表字段值在另外一个表字段范围内去选择
创建:foreigin key(参考字段名)
reference 被参考表名(被参考字段名)
on delete 级联动作
on update 级联动作
alter table 表名 add foregin key(...)...
级联动作:cascade 同步更新
restrict 默认
set null
no action
删除:alter table 表名 drop foreign key 外键名;