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 表名;