MySQL数据库基础

1.数据库的操作

1.1 显示当前数据库

show databses;

1.2 创建数据库

create database [if not exist] db_name;

创建名为db_test1的数据库

sql 复制代码
create database db_test1;

说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集;utf8,校验规则是

utf8_general_ci

1.3数据库的字符集和校验规则

例:在用create table命令来创建db_test1,并用ENGINE指定数据库的存储引擎MyISAM,用CHARACTER SET指定字符集是utf8,COLLATE指定校验规则为utf8_bi

create table 表名 (

字段1 类型1,

字段2 类型2,

........

)ENGINE=MyISAM default character set = utf8 collate = utf8_bi;

•CHARACTER SET:指定数据库采用的字符集

•ENGINE:指定数据库的存储引擎

•COLLATE:指定数据库字符集的校验规则

如果系统没有db_test的数据库,则创建一个使用utf8mb4字符集的db_test数据库,如果有则不创建

create database if not exists db_test character set utf8mb4;

1.4 使用数据库

use 数据库名;

1.5 删除数据库

drop database [if exists] db_name;

说明:

•数据库删除以后,内部看不到对应的数据库,里面的表和数据全部删除

drop database if exists db_test1;

drop database if exists db_test2;

2.常用数据类型

2.1数据类型

分为整型和浮点型:

|--------------|------------|----------------------------|-------------------------|
| 数据类型 | 大小 | 说明 | 对应java类型 |
| BIT[(M)] | M指定位数,默认为1 | 二进制数,M范围从1到64, 存储数字范围从0到24 | 常用bollean,默认值为1 ,只能存0和1 |
| TINYINT | 1字节 | | byte |
| SMALLINT | 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---65,535字节 | 可变长度字符串 | String |
| TEXT | 0---65,535字节 | 长文本数据 | String |
| MEDIUMTEXT | 0---16 777 215字节 | 中等长度文本数据 | String |
| BLOB | 0---65,535字节 | 二进制形式的长文本数据 | byte[] |

2.3 日期类型

date 日期类型

timestamp 时间戳

3.表的操作

需要操作数据库中表时,需要先使用该数据库

use db_test;

3.1 查看表结构

desc 表名;

3.2创建表

create table table_name(

field1 datatype,

field2 datatype,

field3 datatype

);

可以使用comment增加字段说明

示例:

create table stu_test(

id int,

name varchar(20) comment '姓名',

password varchar(50) comment '密码',

age int,

sex varchar(1),

birthday timestamp,

amout decimal(13,20,

resume text

);

3.4删除表

语法格式:

drop table tb1_name;

示例:

•删除stu_test表

drop table stu_test;

•如果存在stu_test 表,则删除stu_test表

drop table if exist stu_test;

例题:

•有一个商店的数据,记录客户及购物情况,有以下三个表组成:

商品goods(商品编号goods_id,商品名goods_name,单价unitprice,商品类别category,供应商provider)

客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证card_id)

购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)

SQL:

sql 复制代码
# 创建数据库
create database if not exists bit111 default character set utf8;
#选择数据库
use bit111;
# 创建数据库表
# 商品
create table if not exists goods
(
    goods_id int comment'商品编号',
    goods_name varchar(32) comment'商品名称',
    unitprice int comment '单价,单位分',
    category varchar(12) comment'商品分类',
    provider varchar(64) comment '供应商名称'
);
desc goods;
# 客户
create table if not exists customer
(
    customer_id int comment'客户编号',
    name varchar(20) comment'姓名',
    addreass varchar(256) comment'地址',
    email varchar(64) comment'电子邮箱',
    sex bit comment'性别',
    card_id varchar(18) comment'身份证'
);
desc customer;
#购买
create table if not exists purchase
(
    order_id int comment'购买订单',
    customer_id int comment'客户编号',
    goods_id int comment'商品编号',
    nums int comment'购买数量'
);
desc purchase;

2. MySQL表的增删改查

2.新增(create)

案例:

sql 复制代码
#创建一张学生表
  drop table if exists student;
  
create table student(
id int,
sn int comment '学号',
name varchar(20) comment '姓名',
qq_mail varchar(20) comment 'QQ邮箱'
);

2.1单行数据+全列插入

•插入两条记录 ,value_list 数量必须指定和定义表的列的数量及顺序一致

insert into student values(100,1000,'唐三藏',null);

insert into student values (101,10001,'孙悟空','11111');

2.2 多行数据+指定列插入

•插入两条记录,value_list 数量必须和指定列数量及顺序一致

insert into student (id,sn,name) values

( 102,20001,'曹孟德'),

(103,20002,'孙仲谋');

3.查询

sql 复制代码
# 创建考试成绩表

drop table if exists exam_result;

create table exam_result (
       id  int,
       name varchar(20),
       chinese decimal(3,1),
       math decimal(3,1),
       english decimal(3,1)
);


#插入测试数据
insert into exam_result (id,name,chinese,math,english) values
 (1,'唐三藏',67,98,56),
 (2,'孙悟空',87.5,78,77),
 (3,'猪悟能',88,98.5,90),
 (4,'曹孟德',82,84,67),
 (5,'刘玄德',55.5,85,45),
 (6,'孙权',70,73,78.5),
 (7,'宋公明',75,65,30)
);
  

3.1全列查询

select * from exam_result;

3.2 指定列查询

select id,name,english from exam_result;

3.3 查询字段为表达式

复制代码
# 表达式不包含字段
select id,name,10 from exam_result;
# 表达式包含一个字段
select id,name,english + 10 from exam_result;
#表达式包含多个字段
select id,name,chinese + math + english 总分 from exam_result;

3.4 别名

•为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称

select colum [AS] alias_name [......] from table_name;

•结果集中,表头的列名=别名

select id,name,chinese + math + english 总分 from exam_result;

3.5 去重:distinct

使用distinct关键字对某列数据进行去重:

select math from exam_result;

复制代码
#去重结果
select distinct math from exam_result;

3.6 排序:order by

•ASC 为升序 (从小到大)

•DESC 为降序 (从大到小)

#默认为ASC

SELECT ... FROM table_name [where...]

ORDER BY colum [ASC|DESC],[.....];

1.没有ORDER BY子句的查询,返回的顺序时未定义的,永远不要依赖这个顺序

2.NULL数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

#查询同学姓名和 qq_email,按qq_email 排序显示

SELECT name,qq_email FROM student ORDER BY qq_email;

SELECT name, qq_email FROM student ORDER BY qq_email DESC;

3.使用表达式及别名排序

#查询同学及分数,由高到低

SELECT name, chinese + english + math FROM exam_result

ORDER BY chinese + english + math DESC;

SELECT name , chinese + english + math + total FROM exam_result

ORDER BY total DESC;

4.可以对多个字段进行排序,排序优先级随书写顺序

#查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示

SELECT name,math,english,chinese from exam_result ORDER BY math DESC,english,chinese;

3.7 条件查询: where

注意:

1.where条件可以使用表达式,但是不能使用别名

2.AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先级执行

案例:

基本查询:

sql 复制代码
--查询英语不及格的同学及英语成绩--
select name,english from exam_result where english<60;

--查询语文成绩好于英语成绩的同学--
select name,chinese,english from exam_result where chinese > english;

--查询总分在200分以下的同学--
select name,chinese + math + english 总分 from exam_result  
where chinese + math +english < 200;

And 与 OR

sql 复制代码
--查询语文成绩大于80分,且英语成绩大于80分的同学--
select * from exam_result where chinese >80 and english > 80;

--查询语文成绩大于80分,或英语成绩大于80分的同学--
select * from exam_result chinese > 80 or english > 80;

--观察AND 和 OR 的优先级

select * from exam_result where chinese > 80 or math > 70 and english > 70;
select * from exam_result where (chinese > 80 or math > 70) and english > 70;

范围查询:

1.BETEWEEN....AND..

sql 复制代码
--查询语文成绩在[80,90]分的同学及语文成绩--
SELECT name,chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;

--使用 AND 也可以实现--
SELECT name,chinese FROM exam_result WHERE chinese >= 80 AND chinese <= 90;

2.IN

sql 复制代码
--查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩--
SELECT name,math FROM exam_result WHERE math IN(58,59,98,99);


--使用 OR 也可以实现--
SELECT name,math FROM exam_result WHERE math = 58 OR math=59 OR math = 98 OR math=99;

•模糊匹配:LIKE

sql 复制代码
--% 匹配任意多个(包括0个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';

--_匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_';

•NULL的查询:IS[NOT] NULL

sql 复制代码
--查询 qq_mail 已知的同学姓名
SELECT name,qq_mail FROM student WHERE qq_mail IS NOT NULL;

--查询 qq_mail 未知的同学姓名
SELECT name,qq_mail FROM student RE qq_mail IS NULL;

3.8 分页查询:LIMIT

案例:按id进行分页,每页3条记录,分别显示第1,2,3页

sql 复制代码
--第1页

SELECT id,name,english,chinese from exam_result ODER BY id LIMIT 3 OFFSET 0;

--第2页

SELECT id,name,math,english,chinese FROM exam_result ORDER BY  id LIMIT 3 OFFSET 3;

--第3页

SELECT id,name,math,english,chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 6;

4.修改

sql 复制代码
--将孙悟空同学的数学成绩变更为80分

UPDTAE exam_result SET math=0 WHERE name='孙悟空';

--将曹孟德同学的数学成绩变更为60分,语文成绩变更为 70 分

UPDATE exam_result SET math=60,chinese = 70 WHERE name ='曹孟德';

--将总成绩倒数前三的3位同学的数学成绩加上30分

UPDATE exam_result SET math = math+30 ORDER BY chinese + math + english LIMIT 3;

--将所有同学的语文成绩更新为原来的2倍

UPDATE exam_result SET chinese = chinese * 2;

5.删除(DELETE)

sql 复制代码
--删除孙悟空同学的考试成绩
DELECT FROM exam_result where name = '孙悟空';

--删除整张表数据
--准备测试表
DROP TABLE IF EXISTS for_delect;
CREATE table for_delect(
 id int,
name varchar(20)
);
--插入测试数据
INSERT INTO for_delete (name) VALUES ('A'),('B'),('C');

--删除数据
DELECT FROM for_delete;
相关推荐
QQ_115432031几秒前
基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现四
java·spring boot·mysql·毕业设计·毕业源码·竞拍系统·竞拍平台
blammmp8 分钟前
MySQL:事务
数据库·mysql
白萝卜弟弟17 分钟前
【MySQL】MySQL中的函数之JSON_ARRAY_APPEND
数据库·mysql·json
尘浮生29 分钟前
Java项目实战II基于SpringBoot的客户关系管理系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·小程序
晚风_END33 分钟前
postgresql|数据库开发|python的psycopg2库按指定顺序批量执行SQL文件(可离线化部署)
服务器·开发语言·数据库·python·sql·postgresql·数据库开发
桃园码工1 小时前
2-测试bigcache做进程内缓存 --开源项目obtain_data测试
vscode·mysql·go·postman
晴子呀1 小时前
Redis除了做缓存,还能做什么???
数据库·redis·缓存
sxy1993sxy20181 小时前
数据库和缓存的数据一致性 -20241124
数据库·缓存
hxj..1 小时前
【中间件】Redis
数据库·redis·缓存·中间件
孙克旭_1 小时前
第四章 Redis多级缓存案例
数据库·redis·缓存