一文搞懂MySQL数据库基础与MySQL表的增删查改(初阶)
Posted Java猿~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文搞懂MySQL数据库基础与MySQL表的增删查改(初阶)相关的知识,希望对你有一定的参考价值。
目录
1. 数据库的操作
1.1 显示当前数据库
SHOW DATABASES;
1.2 创建数据库
语法:
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
1.3 使用数据库
use 数据库名;
示例:
use db_name3;
1.4 删除数据库
语法:
DROP DATABASE [IF EXISTS] db_name;
示例:
drop database if exists db_name1;
drop database if exists db_name2;
说明:数据库删除以后,内部看不到对应的数据库,里边的表和数据全部被删除
2. 常用数据类型
2.1 数值类型
整型和浮点型:
数据类型 | 大小 | 说明 | 对应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 |
2.2 字符串类型
数据类型 | 大小 | 说明 | 对应Java类型 |
VARCHAR(SIZE) | 0-65535字节 | 可变长度字符串 | String |
TEXT | 0-65535字节 | 长文本数据 | String |
MEDIUMTEXT | 0-16777215字节 | 中等长度文本数据 | String |
BLOB | 0-65535字节 | 二进制形式的长文本数据 | byte[] |
2.3 日期类型
数据类型 | 大小 | 说明 | 对应Java类型 |
DATATIME | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换 | java.util.Data java.sql.Timestamp |
TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换 | java.util.Data java.sql.Timestamp |
3. 表的操作
需要操作数据库中的表时,需要先使用数据库:
use db_name;
3.1 查看表的结构
desc 表名;
示例:
3.2 创建表
语法:
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)
);
3.3 删除表
语法格式:
DROP [TEMPORARY] TABLE [IF EXISTS] tab_name;
示例:
-- 删除tab_name1表
drop table tab_name1;
-- 如果tab_name2表存在,则删除
drop table if exists tab_name2;
4. MySQL表的增删查改(CRUD)
注释:在SQL中可以使用“--空格+描述”来进行注释说明
CRUD即:增加(create),查询(retrieve),更新(updata),删除(delete)
4.1 新增(create)
语法:
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);
4.2 查询(retrieve)
语法:
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;
结果:
4.3 别名
为查询结果中的指定列起别名,表示返回的结果集中,以别名作为该列的名称,语法:
SELECT column [AS] alias_name [...] FROM table_name;
关键字为:as,但是as可以省略
示例:
-- 别名作为列名返回
select
id,
name,
chinese + math + english sum
from
student_score;
结果:
4.4 去重(distinct)
使用DISTINCT关键字对某列数据进行去重
-- 语文得85分的重复了
select chinese from student_score;
-- 去重结果
select distinct chinese from student_score;
4.5 排序(ORDER BY)
语法:
-- 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;
结果:
4.6 条件查询(where)
比较运算符:
运算符 | 说明 |
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于,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 '小%';
4.7 分页查询(LIMIT)
语法:
-- 起始下标为 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;
结果:
4.8 修改(updata)
语法:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
示例:
将小花的语文成绩修改为80:
update student_score set chinese=80 where name='小花';
结果:
4.9 删除(delete)
语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
示例:
删除小花的成绩:
delete from
student_score
where
name = '小花';
结果:
删除整张表的数据:
delete from student_score;
结果:
以上是关于一文搞懂MySQL数据库基础与MySQL表的增删查改(初阶)的主要内容,如果未能解决你的问题,请参考以下文章