MySQL基础
-
SQL通用语法
-
SQL语句和以携程单行或多行,以分号结尾
-
MySQL数据库的SQL语句不区分大小写,关键字一般大写(本文中个人习惯使用小写)。
-
注释
#单行注释 -- 单行注释, -- 后有空格 /* 多行注释 */
-
-
SQL分类
- DDL:数据定义语言。定义数据库对象:数据库、表、列
- DML:数据操作语言。增删改
- DQL:数据查询语言。查询记录
- DCL:数据控制语言。访问权限、安全级别、创建用户...
-
DDL
-
DDL操作数据库
#查询全部数据库 show databases; #创建数据库 create database 数据库名称; create database if not exists 数据库名称; #删除数据库 drop database 数据库名称; drop databases if not exists 数据库名称; #使用数据库 use 数据库名称; #查看当前使用中的数据库,函数调用 select database();
-
DDL操作表
#查询数据库下所有表 show tables; #查询表结构 desc 表名称; #创建表 create table 表名 ( 字段名 数据类型, 字段名 数据类型, ... 字段名 数据类型 #最后一行末尾不加逗号 ); #删除表 dorp table 表名; drop table if exists 表名; #修改表名 alter table 表名 rename to 新表名; #添加一列 alter table 表名 add 列名 数据类型; #修改数据类型 alter table 表明 modify 列名 新数据类型; #同时修改列名和数据类型 alter table 表名 change 列名 新列名 新数据类型; #删除列 alter table 表明 drop 列名;
-
-
DML
#给指定列添加数据 insert into 表名(列名1,列名2,...) values(值1,值2,...); #添加一条完整数据 insert into 表名(值1,值2...); #批量添加数据 insert into 表名(列名1,列名2...) values(值1,值2,...),(值1,值2,...),(值1,值2,...)...; insert into 表名 values(值1,值2,...),(值1,值2,...),(值1,值2,...)...; #修改数据 update 表名 set 列名1=值1,列名2=值2,… [where 条件] ; #删除数据 delete from 表名 [where 条件];
-
DQL
-
查询完整语法
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后条件 order by 排序字段 limit 分页限定
-
基础查询
#查询一列 select 字段列表 from 表名; -- 使用 * 作为字段列表查询全部数据 #去除重复记录 select distinct 字段列表 from 表名; #别名 as -- 可省略 #举例 select student_name as name,student_gender as gender from student; select name,gender,score from student; -- 起别名之后的sql中可直接使用别名代替原字段名
-
条件查询
select 字段名 from 表名 where 条件列表;
-
条件运算符
符号 功能 > 大于 < 小于 >= 大于等于 <= 小于等于 = 等于 <> 或 != 不等于 between...and... 再某个范围之内,闭区间 in(字段值列表) 包含,用于代替多个值比较的逻辑或 like 含占位符的字段值 模糊查询,详见【模糊查询】 is null 为空 is not null 非空 and 或 && 逻辑且 or 或 || 逻辑或 not 或者 ! 逻辑非
-
-
模糊查询
/* 占位符: _ : 代表任意单个字符 % : 代表任意个数字符 */ #模糊查询 select 字段列表 from 表名 where 字段名 like 含占位符的字段值;
-
排序查询
/* ASC : 升序排序(默认) DESC : 降序排序 */ #排序查询 select 字段列表 from 表名 order by 排序字段1 [排序方式1],排序字段2 [排序方式2];
-
聚合函数
-
聚合函数分类
函数名 功能 count() 统计数据条数 max() 最大值 min() 最小值 sum() 求和 avg() 平均值 -
聚合函数语法
#聚合函数,null不参与聚合函数运算 select 聚合函数名(字段名) from 表名;
-
-
分组查询
分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
#分组查询 select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤]; ##举例 #查询男同学和女同学各自的数学平均分 select sex, avg(math) from stu group by sex; select name, sex, avg(math) from stu group by sex; -- 这里查询name字段就没有任何意义 #查询男同学和女同学各自的数学平均分,以及各自人数 select sex, avg(math),count(*) from stu group by sex; #查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组 select sex, avg(math),count(*) from stu where math > 70 group by sex; #查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的 select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
-
分页查询
分页查询的索引从0开始
起始索引 = (当前页码 - 1) * 每页显示的条数
#分页查询 select 字段列表 from 表名 limit 起始索引,查询条目数量; ##举例 #从0开始查询,查询3条数据 select * from stu limit 0 , 3; #每页显示3条数据,查询第1页数据 select * from stu limit 0 , 3; #每页显示3条数据,查询第2页数据 select * from stu limit 3 , 3; #每页显示3条数据,查询第3页数据 select * from stu limit 6 , 3;
-
-
MySQL数据类型整合
-
数值类型
数据类型 大小 描述 备注 示例 TINYINT 1 byte 小整数值 SMALLINT 2 bytes 大整数值 MEDIUMINT 3 bytes 大整数值 INT或INTEGER 4 bytes 大整数值 age int BIGINT 8 bytes 极大整数值 FLOAT 4 bytes 单精度浮点数值 DOUBLE 8 bytes 双精度浮点数值 score double(总长度,小数点后保留的位数) 0~100 2 score double(5,2) DECIMAL 小数值 -
日期和时间类型
数据类型 大小 描述 备注 示例 DATE 3 日期值 birthday date TIME 3 时间值或持续时间 YEAR 1 年份值 DATETIME 8 混合日期和时间值 TIMESTAMP 4 混合日期和时间值,时间戳 -
字符串类型
数据类型 大小 描述 备注 示例 CHAR 0-255 bytes 定长字符串 name char(10) 10个字符空间 存储的性能高 浪费空间 “张三” VARCHAR 0-65535 bytes 变长字符串 name varchar(10) 2个字符空间 存储性能低 节约空间 “张三” TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串 TINYTEXT 0-255 bytes 短文本字符串 BLOB 0-65 535 bytes 二进制形式的长文本数据 TEXT 0-65 535 bytes 长文本数据 MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据 MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据 LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据 LONGTEXT 0-4 294 967 295 bytes 极大文本数据
-