MySQL

MySQL数据类型

整数类型

数据类型 字节数 无符号数的取值范围 有符号数的取值范围
TINYINT 1 0~255 -128~127
SMALLINT 2 0~65535 -32768~32767
INT 4 0~4294967295 -2147483648~2147482647
BIGINT 8 0~1844674407370955615 -9223372036854775808~9223372036854775807

 

 

 

 

 

 

 

浮点类型

FLOAT 4字节
DOUBLE 8字节

 

 

 

日期与时间类型:

数据类型 字节数 日期格式
YEAR 1 YYYY
DATE 4 YYYY-MM-DD
TIME 3 HH:MM:SS
DATETIME 8 0000-00-00 00:00:00
TIMESTAMP 4 0000-00-00 00:00:00

 

 

 

 

 

 

 

字符串和二进制类型:

数据类型 类型说明
CHAR 固定长度字符串
VARCHAR 可变长度字符串
BINARY 固定长度二进制数据
VARBINARY 可变长度二进制数据
BLOB 二进制大数据
TEXT 大文本数据
ENUM 枚举类型
SET 字符串对象,可以有零或多个值
BIT 表示位字段类型

 

 

 

 

 

 

 

 

 

 

 

 

数据库和表的基本操作
创建和使用数据库:

CREATE DATABASE 数据库名称;

USE 数据库名称

SHOW DATABASES;
SHOW CREATE DATABASE 数据库名称;

删除数据库

DROP DATABASE 数据库名称

 创建数据表

CREATE TABLE 表名(
字段名1 数据类型[完整性约束条件],
字段名2 数据类型[完整性约束条件],
    .
    .
    .
字段名n,数据类型[完整性约束条件],
)
SHOW CREATE TABLE 表名;

查看字段信息

DESC 表名;

修改字段名

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;

添加字段

ALTER TABLE 表名 ADD 字段名 数据类型[约束条件];

删除字段

ALTER TABLE 表名 DROP 字段名;

修改字段排列位置

ALTER TABLE 表名 MODIFY 字段名1 数据类型 FIRST|AFTER 字段名2;

修改字段数据类型

ALTER TABLE 表名 MODIFY 字段名 数据类型;

删除数据表

DROP TABLE 表名;

 

MySQL约束

在MySQL中,主要有六种约束(约束是指对表中数据的限制,为了保证数据的可靠性和准确性):

一.主键约束(PRIMARY KEY):字段名 数据类型 PRIMARY KEY

  为了快速查找到表中某条信息,通过设置主键实现。

  多字段主键:

PRIMARY KEY(字段名1,字段名2,...,字段名n)

  常常设置主键同时设置表的字段值自动增加:

字段名 数据类型 AUTO_INCREMENT;

二.

外键约束(FOREIGN KEY):

ALTER TABLE 表名 ADD CONSTRAINT FK_ID FOREIGN KEY(外键字段名) REFERENCES 主表表名(主键字段名);  

建表时添加外键约束:

CONSTRAINT FK_ID FOREIGN KEY(外键字段名) REFERENCES 主表表名(主键字段名);

外键指引用另一个表的的一列或者多列,被引用的列应该具有主键约束或唯一约束。

 

删除外键约束

ALTER TABLE 表名 DROP FOREIGN KEY 外键名;

 

三.非空约束(NOT NULL):字段名 数据类型 NOT NULL;

  字段的值不能为空。

四.唯一约束(UNIQUE):字段名 数据类型 UNIQUE;

  保证数据表中字段的唯一性。

五.默认值约束(DEFAULT):

  默认值约束用来约束不设置值的某一字段,自动为其添加一个已经设置好的值。

六.检查约束(MySQL不支持,因此在这里不进行学习)

 

索引

在数据库操作中,也许会有 SELECT * FROM 表名 WHERE id=99999 的操作,这样数据库会从id=1开始遍历,

直到找到id为99999的数据,这样会使效率非常低下,MySQL中允许建立索引表提高查询或者排序效率。

1.普通索引

由KEY或者INDEX定义的索引

2.唯一性索引

由UNIQUE定义,所在字段的值必须是唯一的

3.全文索引

全文由FULLTEXT定义,只能创建在CHAR,VARCHAR,TEXT类型的字段上,只有MyISAM存储引擎支持全文索引。

4.单列索引

单列索引指的是在表中单个字段上创建索引,它可以是普通索引,唯一索引或者全文索引,只要保证该索引只对应一个字段就行。

5.多列索引

在表中多个字段建立索引,只有在查询条件中使用了这些字段中的第一个字段,该索引才会被使用

6.空间索引

由SPACIAL定义,只能在MyISAM引擎中创建。

注:创建完索引后可以通过EXPLAIN SELECT语句查看索引使用的情况。

使用CREATE INDEX语句对已有的表上添加索引

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 ON 表名(字段名[(长度)] [ASC|DESC]);

也可以使用ALTER TABLE 对已存在的表添加索引

ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 (字段名 [(长度)] [ASC|DESC]);

删除索引

ALTER TABLE 表名 DROP INDEX 索引名; 

DROP INDEX 索引名 ON 表名;

 

添加丶更新与删除数据

添加

INSERT INTO 表名(字段名1,字段名2) VALUES (值1,值2,...);

更新

UPDATE 表名 SET 字段名1=值1[,字段名2=值2,...] [WHERE 条件表达式];

删除

DELETE FROM 表名 [WHERE 条件表达式];

如果没有WHERE子句,则会将表中所有记录删除

DELETE FROM 表名;

还有一种删除表中所有记录的方式

TRUNCATE [TABLE] 表名;

TRUNCATE和DELETE的区别:

1.DELETE是DML语句,TRUNCATE是DDL语句

2.DEL后面可以跟WHERE语句,TRUNCATE只能删除所有记录

3.使用TRUNCATE删除表中数据后再次向表中添加数据,自增字段的默认值从1开始,而DELETE后自动增加的值为删除字段的值加一

 

指定查询

SELECT 字段名1,字段名2... FROM 表名;

按条件查询

SELECT 字段名1,字段名2,... FROM 表名 WHERE 条件表达式;
关系运算符
=
<>不等于

!=不等于

<  >
<=
>=

 

 

 

 

 

 

 

 

 

带IN关键字的查询

SELECT 字段名1,字段名2,... FROM 表名 WHERE 字段名 [NOT] IN(元素1,元素2...);

带BETWEEN AND 的查询(指定范围)

SELECT 字段名1,字段名2,... FROM 表名 WHERE 字段名 [NOT] BETWEEN 值1 AND 值2;

空值查询(IS NULL)

带DISTINCT 的查询(去掉重复)

SELECT DISTINCT 字段名 FROM 表名;

带LIKE的查询(模糊查询)

SELECT 字段名1,字段名2,... FROM 表名 WHERE 字段名 [NOT] LIKE匹配字符串;
通配符
% (匹配多个字符)
_ (匹配一个字符)

 

 

 

 

注:如果要查询有%的数据,在%前添加 \  转义即可

 

带AND的查询

SELECT 字段名1,字段名2,... FROM 表名 WHERE 条件表达式1 AND 条件表达式2 [AND ...];

带OR 的查询

SELECT 字段名1,字段名2,... FROM 表名 WHERE 条件表达式1 OR 条件表达式2 [OR ...];

注:AND和OR一起用,AND优先级高,OR后执行

 

聚合函数

函数名称 作用
COUNT() 返回某列行数
SUM() 返回某列的和
AVG() 返回某列平均值
MAX() 返回某列最大值
MIN() 返回某列最小值

 

 

 

 

 

 

 

 

对查询结果排序

SELECT 字段名1,字段名2,... FROM 表名 ORDER BY 字段名 [ASC | DESC];

默认ASC,升序,DESC降序

 

分组查询(按类统计)

SELECT 字段名1,字段名2,... FROM 表名 GROUP BY 字段名1,字段名2...[HAVING 条件表达式];

常常会有GROUP BY 和聚合函数一起使用的情况

计算分组的平均值,最大值,最小值等等

 

使用LIMIT限制查询结果的数量

SELECT 字段名1,字段名2,... FROM 表名 LIMIT [OFFSET,] 记录数;

为表取别名

SELECT * FROM 表名 [AS] 别名;

为字段取别名

SELECT 字段名 [AS] 别名 [,字段名 [AS] 别名,...]  FROM 表名;

 

MySQL

上一篇:MySQL高可性解决方案MHA实战及Ansible常用模块与playbook实现


下一篇:Centos7 yum安装mysql5.7