一文搞懂MySQL数据库基础与MySQL表的增删查改(初阶)

Posted Java猿~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文搞懂MySQL数据库基础与MySQL表的增删查改(初阶)相关的知识,希望对你有一定的参考价值。

目录

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) 


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
TINYINT1字节Byte
SMALINT2字节Short
INT4字节Integer
BIGINT8字节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
TEXT0-65535字节长文本数据String
MEDIUMTEXT0-16777215字节中等长度文本数据String
BLOB0-65535字节二进制形式的长文本数据byte[]

2.3 日期类型

数据类型大小说明对应Java类型
DATATIME8字节范围从1000到9999年,不会进行时区的检索及转换

java.util.Data

java.sql.Timestamp

TIMESTAMP4字节范围从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表的增删查改(初阶)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL一文搞懂MySQL语句(基础篇)

MySQL一文搞懂MySQL语句(基础篇)

MySQL一文搞懂MySQL语法(进阶)

MySQL一文搞懂MySQL语法(进阶)

MySQL一文搞懂MySQL语法(进阶)

mysql-表操作(增删查改)