前言

通过这篇文章你将收获:
对database(数据库)、table(表结构)、index(表索引)的一些基本操作。

先给出总结的xmind导图:

(右击图片另存为可以保存)
图片说明

数据库操作

创建数据库

CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

COLLATE是校对集的意思,可以理解为,排序规则等。

查询数据库

查询所有数据库

SHOW DATABASES;

查询数据库建表时的sql

SHOW CREATE DATABASE db_name;

删除数据库

DROP DATABASE db_name;

修改数据库

修改数据库的字符编码和排序方式

ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

选择数据库

USE db_name;

命令行设置之后操作的编码格式

SET NAMES UTF8

总结:告诉MySQL我用UTF8.

SET NAMES显示客户端发送的SQL语句中使用什么字符集。因此,SET NAMES 'UTF8'语句告诉服务器将来从这个客户端传 来的信息采用字符集UTF8。它还为服务器发送回客户端的结果指定了字符集。主要解决乱码问题。

数据库表操作

创建表

SQL : CREATE TABLE tb_name ( id INT AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(50),age INT);

(建表的字段、类型、长度、约束、默认、注释)

约束

非空
NOT NULL
非负
UNSIGNED
主键
PRIMARY KEY
自增
AUTO_INCREMENT (自增属性加上后,MySQL强制这个字段必须为主键索引)
默认
DEFAULT
注释
COMMENT
用户自定义约束
check

(备注:MySQL 5.5,5.6版本check约束不生效,也不报错;

其余版本不知,网上说也不生效;

一般通过触发器来真正实现SQLserver中的'check')

常用数据类型

极小整形
TINYINT

非负最大值255

1个字节

小整形
SAMLLINT

非负最大值65535

2个字节

整形
INT

非负最大值4 294 967 295

4个字节

单精度
FLOAT

4个字节

定长字符串
CHAR

最大保存255个字节

如果值没有到给定长度用空格补充

变长字符串
VARCHAR

最大保存65535个字节

用多大占多大

文本
TEXT

最大保存65535个字节

表字段索引

索引总结:

创建索引时,注意最左前缀匹配原则,将最常用的或者需要单个查询的字段放在前面,从而有效减少索引的个数,减少必要空间,提高查询效率.

V5.6版本后,注意索引条件下推原则,让索引树尽可能多的覆盖查询语句的匹配字段,从而减少回表次数,从而提高查询效率.

主键索引尽量选择长度较小的,因为普通索引也会存主键字段信息,从而减小必要空间.

唯一索引和普通索引的选择:尽量选择普通索引,会用到change buffer,显著提高插入效率,直接写内存即可,唯一性可以在业务代码中保证;但对于读多写少的可以考虑唯一索引,双重保险,减少业务代码的复杂逻辑.

查询表索引
SHOW CREATE TABLE t1;

-- 查看创建表语句(包含创建索引的语句)

SHOW INDEX FROM t1;

-- 查看表索引的具体信息

主键
添加

ALTER TABLE tb_name ADD PRIMARY KEY (field_name);

ALTER TABLE 表名 ADD PRIMARY KEY (字段名称)

删除

ALTER TABLE tb_name DROP PRIMARY KEY;

唯一索引
添加

创建索引

CREATE UNIQUE INDEX index_name ON tb_name (account);

表字段修改

ALTER TABLE tb_name ADD UNIQUE index_name(field_name);

删除

DROP INDEX 索引名称 ON 表名

普通索引
添加

修改表字段创建索引

ALTER TABLE 表名 ADD INDEX 索引名称(字段名称);

创建索引

CREATE INDEX Index_name ON tb_name(字段名);

CREATE INDEX 索引名称 ON 表名(字段名);

删除

DROP INDEX 索引名称 ON 表名

联合索引
添加

ALTER TABLE tb_name ADD index_name (field_name1,field_name2);

删除

DROP INDEX 索引名称 ON 表名

修改表

表字段的增删改查

字段添加
ALTER TABLE tb_name ADD address VARCHAR (100) NOT NULL DEFAULT '' COMMENT '地址';

ALERT TABLE tb_name ADD 添加字段 字段类型 非空约束 默认 注释

字段类型修改
ALTER TABLE tb_name MODIFY address VARCHAR (50) NOT NULL DEFAULT '' COMMENT '地址';

ALERT TABLE tb_name MODIFY 字段名称 新的字段类型 非负 非空 默认 注释

字段名称类型修改
ALTER TABLE tb_name CHANGE address addr VARCHAR (100) NOT NULL DEFAULT '' COMMENT '地址';

ALTER TABLE tb_name CHANGE 旧的字段名 新的字段名 新的类型 约束 默认 注释

字段类型查询
DESC tb_name;
字段删除
ALTER TABLE tb_name DROP addr;

ALTER TABLE 表名 DROP 删除的字段名

表修改

表名修改
ALTER TABLE tb_name RENAME TO new_tb_name;

ALTER TABLE 旧表名 RENAME TO 新表名

引擎修改
ALTER TABLE tb_name ENGINE = InnoDB;

ALTER TABLE 表名 ENGINE = 新的引擎名称

备注:修改引擎是重建表和主键索引的过程,会让表和索引更紧凑.

删除表

DROP TABLE tb_name;

查询表

查询所有表

SHOW TABLES;

查询建表时的sql

SHOW CREATE TABLE tb_name;