MySQL
形象化:
数据库:文件夹
表:文件(.frm)
数据:表中的记录
SQL
数据类型
基本语法:
- SQL语句可以单行或者多行写,以分号结尾。
- 使用空格和缩进来增强语句可读性。
- MySQL不区分大小写,但是关键字建议用大写。
- 三种注释:
- 单行注释:-- 注释内容 或 # 注释内容(mysql特有)
- 多行注释:/* 注释内容 */
分类
- DDL(Data Definition Language)数据定义语言,用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等。
- DML(Data Manipulation Language)数据操作语言,用来对数据库中表的数据进行增删改。关键字:insert,delete,update等。
- DQL(Data Query Language)数据查询语言,用来查询数据库中表的记录(数据)。关键字:select,where等。
- DCL(Data Control Language)数据控制语言(了解)用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE等。
1. DDL
操作数据库:CRUD
- C(Create):创建
(1). 创建数据库:create database 数据库名称 (character set 字符集名称);
(2). 创建数据库如果该数据库不存在:create database if not exists 数据库名称;
例:创建db4数据库,判断是否存在,并制定字符集为gbk:create database if not db4 character set gbk; - R(Retrieve):查询
(1). 查询所有数据库名称:show databases;
(2). 查询某个数据库的字符集(创建语句):show create database 数据库名称; - U(Update):修改
(1). 修改数据库的字符集:alter database 数据库名称 character set 字符集名称; - D(Delete):删除
(1). 删除数据库:drop database 数据库名称;
(2). 如果数据库存在就删除:drop database if exists 数据库名称; - 使用数据库
(1). 查询当前正在使用的数据库:select database();
(2). 使用某数据库:use 数据库名称;
操作表:CRUD - C(Create):创建
(1). 创建表空间:create table 表名(列名1 数据类型1,列名 数据类型2…age int);
整形(int):age int
小数类型(double):score double(5,2)-- 一共五位,两位是小数
日期型(date):只包含年月日,格式 yyyy-MM-dd
日期型(datetime):包含年月日以及时分秒,格式 yyyy-MM-dd HH:mm:ss
时间错类型(timestamp):包含年月日以及时分秒,格式 yyyy-MM-dd HH:mm:ss与上个类型不同的是 当不给其赋值或者赋值为空时,系统自动将当前系统时间赋值给它
字符串型(varchar):name varchar(20)-- name最多存放20个字符
(2). 复制表:create table 表名 like 表名1;-- 创建一个像表名1一样的表 - R(Retrieve):查询
(1). 查询所有的表名称:show tables;
(2). 查询表结构:desc 表明; - U(Update):修改
(1). 修改表名:alter table 表名 rename to 新的名字;
(2). 修改表的字符集:(查看:show create table 表名;)alter table 表名 character set 字符集名字;
(3). 添加一列:alter table 表名 add 列名 数据类型;
(4). 修改列名称 类型:alter table 表名 change 列名 新列名 新列类型;
(5). 修改表类型:alter table 表名 modify 列名 新数据类型;
(6). 删除列:alter table 表名 drop 列名; - D(Delete):删除
(1). 删除表:drop table (if exists) 表名;
2.DML
(1). 增加数据:insert into 表名(列名1,列名2…列名n) values (值1,值2…值n);
注意:
列名与值要一一对应
如果列表后,不定义列名,则默认给所有列添加值:insert 表名 values (值1…值n);
除了数字类型,其他类型需要使用引号(单双都行)引起来
(2). 删除数据:delect from 表名 [where 条件];
注意:
如果不加条件,则删除表中所有数据。
删除所有数据:truncate 表名;(效率高)
(3). 修改数据:update 表名 set 列名1=值1,列名2=值2,…[where 条件];
注意:
如果不添加任何条件,则会将表中所有聚氯全部修改。
3.DQL
①.基础查询
(1). 查询表中所有数据:select * from 表名;
(2). 通用语法:
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限制;
where后跟的条件时满足条件,having后跟的是不满足条件
(3). 基础查询:
- 多个字段的查询:select 字段名,字段名2,…from 表名;(查询所有用*代替)
- 去除重复:distinct
- 计算列:一半可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)ifnull(表达式1,表达式2) :null参与的运算,计算结果都为null;–表达式1时要判断是否为null的语句,表达式2是要替代的值。
- 起别名:as(可省略)
②. 条件查询 - where子句后跟条件
- 运算符
<、>、<=、>=、<>
between…and
in(集合)
like:模糊查询
_ :单个占位符
%:多个占位符
is null
and或&&
or或||
not 或!
③.排序查询
语法:order by 排序字段1,排序方式1,排序字段2,排序方式2…
排序方式:asc(升序,默认的排序方式),desc降序。
注意:如果有多个排序字段,当前面排序字段的值一样时,才会判断第二个。
例:select * from student order by math desc; – 将学生表按照数学成绩降序排序
④.聚合函数
含义:将一列数据作为一个整体,进行纵向的计算.
count:计算个数
例:select count(name) from student; – 根据名字一列计算总人数.
max:计算最大值
例:select max(math) from student; – 计算数学的成绩的最大值
min:计算最小值
例:select min(math) from student; – 计算数学的成绩的最小值
sum:求和
例:select sum(math) from student; – 计算数学的成绩的总值
avg:求平均数
例:select avg(math) from student; – 计算数学的成绩的平均值
注意:聚合函数的计算排除null值。
⑤.分组查询
语法:group by 分组字段;
注意:分组之后查询的字段:分组字段、聚合函数
例:select sex,ave(math),count(id),from student group bysex;-- 将学生表里的学生按性别分组统计男女生的总人数以及平均成绩。
⑥.分页查询
语法:limit 开始的索引,每页的条数;
公式:开始的索引=(当前页码数-1)*每页显示的条数
例:select * from student limit 0,3;-- 从0开始,一共显示3条
注意:limit是MySQL的一个"方言"。