目录
1. 数据库的操作
1.1 显示当前数据库
1.2 创建数据库
1.3 使用数据库
1.4 删除数据库
2. 常用数据类型
2.1 数值类型
2.2 字符串类型
2.3 日期类型
3. 表的操作
3.1 查看表的结构
3.2 创建表
3.3 删除表
4. MySQL表的增删查改(CRUD)
4.1 新增(create)
4.2 查询(retrieve)
4.3 别名
4.4 去重(distinct)
4.5 排序(ORDER BY)
4.6 条件查询(where)
4.7 分页查询(LIMIT)
4.8 修改(updata)
4.9 删除(delete)
SHOW DATABASES;
语法:
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification]...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:
· 大写的表示关键字
· [ ]是可选项
· CHARACTER SET:指定数据库采用的字符集
· COLLATE:指定数据库字符集的校验规则
示例:
· 创建名字为db_name1的数据库
create database db_name1;
说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_general_ci
· 如果系统里没有db_name2的数据库,则创建一个名字为db_name2的数据库,如果有则不创建
create database if not exists db_name2;
· 如果系统里面没有db_name3的数据库,则创建一个使用utf8mb4字符集的db_name3的数据库,如果有则不创建
create database if not exists db_name3 character set utf8mb4;
说明:MySQL的utf8编码不是真正的utf8,没有包含某些复杂的中文字符,MySQL真正的utf8是使用utf8mb4,建议都是用utf8mb4
use 数据库名;
示例:
use db_name3;
语法:
DROP DATABASE [IF EXISTS] db_name;
示例:
drop database if exists db_name1;
drop database if exists db_name2;
说明:数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除
整型和浮点型:
数据类型 | 大小 | 说明 | 对应Java类型 |
BIT[(M)] | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围从0到2^M-1 | 常用boolean对应BIT,此时默认为1位,只能存0和1 |
TINYINT | 1字节 | Byte | |
SMALINT | 2字节 | Short | |
INT | 4字节 | Integer | |
BIGINT | 8字节 | Long | |
FLOAT(M,D) | 4字节 | 单精度,M指定长度,D指定小数位数,会发生精度丢失 | Float |
DOUBLE(M,D) | 8字节 | Double | |
DECIMAL(M,D) | M/D最大值+2 | 双精度,M指定长度,D表示小数点位数,精确数值 | BigDecimal |
NUMERIC(M,D) | M/D最大值+2 | 和DECIMAL一样 | BigDecimal |
数据类型 | 大小 | 说明 | 对应Java类型 |
VARCHAR(SIZE) | 0-65535字节 | 可变长度字符串 | String |
TEXT | 0-65535字节 | 长文本数据 | String |
MEDIUMTEXT | 0-16777215字节 | 中等长度文本数据 | String |
BLOB | 0-65535字节 | 二进制形式的长文本数据 | byte[] |
数据类型 | 大小 | 说明 | 对应Java类型 |
DATATIME | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换 | java.util.Data java.sql.Timestamp |
TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换 | java.util.Data java.sql.Timestamp |
需要操作数据库中的表时,需要先使用数据库:
use db_name;
desc 表名;
语法:
create table table_name(
field1 datatype,
field2 datatype,
field3 datatype
);
可以使用comment增加字段说明
示例:
create table student (
id int,
name varchar(10) comment '姓名',
age int comment '年龄',
sex varchar(1)
);
语法格式:
DROP [TEMPORARY] TABLE [IF EXISTS] tab_name;
示例:
-- 删除tab_name1表
drop table tab_name1;
-- 如果tab_name2表存在,则删除
drop table if exists tab_name2;
注释:在SQL中可以使用“--空格+描述”来进行注释说明
CRUD即:增加(create),查询(retrieve),更新(updata),删除(delete)
语法:
INSERT
[INTO] table_name [(column [, column]...
) ]
VALUES
(value_list) [, (value_list)]...value_list: value,
[, value]...
案例表:
create table student (
id int,
name varchar(10) comment '姓名',
age int comment '年龄',
sex varchar(1) comment '性别'
);
单行数据 + 全列插入 :
-- value_list数量必须和表的列的数量和顺序一致
insert into student values (1,'小张',20,'男');
insert into student values (2,'小红',21,'女');
多行数据 + 指定列插入:
insert into
student (id, name, age)
values
(3, '小花', 22),
(4, '小赵', 25);
语法:
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
案例表:
-- 创建成绩表
create table student_score (
id int,
name varchar(10),
chinese decimal(3, 1),
math decimal(3, 1),
english decimal(3, 1)
);
-- 往成绩表中插入数据
insert into
student_score (id, name, chinese, math, english)
values
(1, '小张', 60.5, 70, 85),
(2, '小花', 85.5, 95, 96),
(3, '小赵', 76, 88, 92),
(4, '小王', 85, 64, 73);
全列查询:
-- *代表全部列
select * from student_score;
结果:
指定列查询:
select
id,
name,
chinese
from
student_score;
结果:
查询字段为表达式:
表达式含有一个字段
-- 表达式包含一个字段
select
id,
name,
chinese + 10,
math -10,
english -5
from
student_score;
结果:
表达式不含有字段
-- 表达式不包含字段
select id,name,10 from student_score;
结果:
表达式包含多个字段
-- 表达式含多个字段
select
id,
name,
chinese + math + english
from
student_score;
结果:
为查询结果中的指定列起别名,表示返回的结果集中,以别名作为该列的名称,语法:
SELECT column [AS] alias_name [...] FROM table_name;
关键字为:as,但是as可以省略
示例:
-- 别名作为列名返回
select
id,
name,
chinese + math + english sum
from
student_score;
结果:
使用DISTINCT关键字对某列数据进行去重
-- 语文得85分的重复了
select chinese from student_score;
-- 去重结果
select distinct chinese from student_score;
语法:
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
1. 没有order by子句的查询返回的顺序是未定义的
2. null数据排序,视为比任何值都小,升序在最上面,降序在最下面
示例:按语文成绩进行升序排序:
select
*
from
student_score
order by
chinese;
结果:
3. 使用表达式及别名进行排降序
select
id,
name,
chinese + math + english sum
from
student_score
order by
sum desc;
结果:
4. 可以对多个字段进行排序,排序优先级随书写顺序
select
*
from
student_score
order by
chinese,
math,
english desc;
结果:
比较运算符:
运算符 | 说明 |
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL不安全,NULL=NULL的结果为NULL |
<=> | 等于,NULL安全,NULL<=>NULL的结果为TRUE |
!=,<> | 不等于 |
BETWEEN a0 AND a1 | 范围匹配,[ a0,a1 ] |
IN(option1......) | 如果是option中的任意一个返回true |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
LIKE | 模糊匹配,%表示任意多个任意字符;_表示任意一个字符 |
逻辑运算符:
运算符 | 说明 |
AND | 多个条件都必须是true,结果才是true |
OR | 任意一个条件为true,结果就是true |
NOT | 条件为true,结果为false |
注意:
1. where条件可以使用表达式,但是不能使用别名
2. AND的优先级高于OR
示例:
· 基本查询:
-- 查询语文成绩小于70分的同学
select id,name,chinese from student_score where chinese<70;
--查询语文成绩比英语成绩低的同学
select
id,
name,
chinese,
english
from
student_score
where
chinese < english;
-- 查询总分低于250分的同学
select
id,
name,
chinese + math + english
from
student_score
where
chinese + math + english < 250;
结果:
· AND与OR:
-- 查询语文和英语成绩都大于80分的同学
select
*
from
student_score
where
chinese > 80
and english > 80;
-- 查询数学成绩大于80或者英语成绩小于80的同学
select
*
from
student_score
where
math > 80
or english < 80;
· 范围查询:
-- 查询语文成绩在70到90分之间的学生
select
*
from
student_score
where
chinese between 70
and 90;
· 模糊查询: LIKE
-- 查询名字为 小... 同学的成绩
select
*
from
student_score
where
name like '小%';
语法:
-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
示例:查询语文成绩排在第二名的成绩:
select
id,
name,
chinese
from
student_score
order by
chinese desc limit 1,1;
结果:
语法:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
示例:
将小花的语文成绩修改为80:
update student_score set chinese=80 where name='小花';
结果:
语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
示例:
删除小花的成绩:
delete from
student_score
where
name = '小花';
结果:
删除整张表的数据:
delete from student_score;
结果: