MySQL-1(数据库介绍以及部分SQL语法)

这篇博客介绍了MySQL数据库的基本概念,包括数据库的作用、常见的数据库类型以及实体类与表结构的对应关系。详细讲解了SQL语言,分为DDL、DML、DQL等类别,涵盖对数据库和表的操作,如创建、查看、更新、删除,以及查询操作,如基本查询、条件查询、排序、聚合函数、分组查询和分页。此外,还强调了INSERT、UPDATE、DELETE和TRUNCATE的区别,以及LIMIT在分页查询中的应用。

数据库介绍

基本介绍

数据库:存储数据的仓库,本质时一个文件管理系统

【DBMS:数据库管理系统】

使用数据库的目的时对数据进行【CRUD】create/read/update/delete 处理

数据库对数据的存储是持久化方式保存

常见的数据库:

oracle mysql sqlserver redis elasticsearch

​ 数据分类:

​ oracle mysql sqlserver 关系型数据库

​ redis 基于内存

​ elasticsearch 搜索数据库

实体类与表结构对应关系
Java表结构
成员属性表头字段
对象表中每一行的记录

SQL

结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。

​ SQL分类:

  • DDL 数据库定义语言 用来定义数据库、表
  • DML 数据库操作语言 用来对记录操作 update delete insert
  • DCL 数据库控制语言 权限 用户
  • DQL 数据库查询语言 select 它不是官方分类
  • TCL 事务控制语言 事务

DDL

DDL 数据库定义语言 用来定义数据库、表

对库的操作

创建数据库

-- 格式  
create database if not exists 库名  default character set 编码;

-- 需求: 创建名称为db1的数据库 
create database db1;
-- 需求: 当db2数据库不存在是创建名称为db2数据库 
create database if not exists db2;
-- 需求: 创建名称为db3数据库,并指定字符集为gbk 
create database db3 character set gbk;

查看数据库

-- 格式
- 查看所有数据库  
 show database;
- 查看数据库的创建语句  
 show create database 数据库名;
 
 -- 需求:查询Mysql数据管理系统中所有的数据库 
show databases;
-- 需求:查询db3数据库的建库语句
show create databaase db3;

修改数据库

-- 格式
drop database 数据库名  

-- 从数据库管理系统中删除名称为db2的数据库
drop database db2;

使用数据库

- 格式
  - 查看正在使用的数据库   select database();
- 切换数据库   use 数据库名 

-- 查看正在使用的数据库 
select database();
-- 使用db1数据库
use db1;
对表的操作

创建表

- 创建表
 - 格式
create table 表名(
    字段名1  类型  约束,
    字段名2  类型  约束,
    ......)
-- 注意事项:
    -  字段要使用逗号分开
    - 定义字段时它的格式    字段名称   类型
    mysql中常用 的数据类型
    - 数字类型   整数  小数
    - 字符   定长  变长
    - 日期  date    time   datetime  
    charvarchar区别
   # char 定长  长度不可改变
   # varchar 变长   长度根据数据量进行改变,更节省空间。
  - 示例
    -- 需求:创建student表包含 
    -- id整数 
    -- name变长字符串长20 
    -- sex性别定长型1 
    -- birthday字段日期类型 
    create table student(
    	id int,
        name varchar(20),
        sex char(1),
        birthday date
    )
    -- 需求:创建一个student2表,结构与student相同 
    create table student2 like student;

查看表

- - 格式
  - 查看所有表  show tables;
  - 查看表结构   desc  表名
  - 查看创建表的语句    show create table 表名

-- 需求:查看mysql数据库中的所有表 
show tables;
-- 需求:查看student表的结构 
desc student;
-- 需求:查看student表的建表语句 
show create table student;

修改表

-- 添加表列 --
- 格式
  alter table 表名  add  字段名  类型;
-- 需求:为student表添加一个新的字段nianling,类型为varchar(2)
alter table student add nianling varchar(2);

-- 修改表列类型 --
alter table 表名  modify 字段名  类型;
-- 需求:将student表中的nianling字段的类型改为int(11)
alter table student modify nianling int(11)

-- 修改表列名 --
alter table 表名  change 旧字段名  新字段名 类型;
-- 需求:将student表中的nianling字段名改成age,类型int(2)
alter table student change nianling age int(2);

-- 修改表名 --
RENAME TABLE 表名 TO 新表名;
-- 需求:将student表名称改为stu
rename table student to stu;

-- 修改字符集 -- 
ALTER TABLE 表名 character set 字符集;
-- 需求:将stu表的字符集修改为gbk, 再将其修改回来
alter table character stu set gbk;
alter table character stu set utf8;

删除表

-- 删除列 --
ALTER TABLE 表名 DROP 列名; 
-- 需求:将student表中的age字段从表中删除
alter table student drop age;

-- 删除表 --
drop table  if exists  表名
-- 需求:直接删除student2表 
drop table student2;
-- 需求:判断表是否存在,若存在则删除表
drop table if exists student2;

DML

新增操作(insert)

注意事项:

  1. 值与字段个数,顺序,类型都必须对应
  2. 值的数据大小必须再字段的长度范围内
  3. 除了书值类型,其它的字段类型的值必须使用引号
  4. 如果要插入控值,可以不写或者插入null
格式
insert into 表名(字段1,字段2,....)  values(1,值2,值....)
/*
	值只要不是数字,都用引号引起来
	如果向表中插入所有字段的值,可以省略字段名
*/
insert into 表名  values(1,值2,值....)

-- 添加一条记录(写出所有字段方式): id为1,姓名为张三,性别为男,生日为2018-05-02 
insert into (id,name,sex,birthday)values(1,'张三','男','2018-05-02');
-- 添加一条记录(省去字段名称不写方式): id为2,姓名为李四,性别为男,生日为2012-05-02
insert into values(2,'李四','男','2012-05-02');
-- 添加一条记录:姓名为王五,性别为男 
insert into (name,sex)values('王五','男');

蠕虫复制

格式
insert into 源表名  select * from 目标表名

-- 1.快速创建一张stu2表,结构与stu一样 
create table stu2 like stu;
-- 2.查询stu2表结构和表中的数据 
desc stu2;
select*from stu2;
-- 3.蠕虫复制stu表中的数据到stu2表中 
insert into stu select*from stu2;

【重:】mysql中的insert语句中的value与values有什么区别,分别在什么场景使用?

value插入多条记录性能会更高。

values更适用于一条记录

更新操作(update)
格式
update 表名 set 字段名1=1 , 字段名2=2
update操作时,一般是有条件修改  
update 表名 set 字段名1=1 , 字段名2=2...   where 条件

-- 需求:修改表中的性别为'女' 
update stu set sex='女';
-- 需求:将表中id为1的性别改为男 
update stu set sex='男' where id=1;
删除操作(delete)
格式
delete from 表名  where 条件

-- 需求:删除id为2的学生信息 
delete from stu where id=2;
-- 需求:删除整张表中的所有数据 
delete from stu;
truncate table stu;

【注意:】truncate和delete的区别

  • truncate是将表结构删除,在重新创建一个表结构; truncate是DDL
  • delete 是一行一行删除记录 delete是DML语句

DQL

基本查询操作
  • 查询所有

    格式 : select * from 表

    -- 需求:查询所有的商品. 
    select*from product;
    
  • 查询指定列名

    格式: select 字段1,字段2,… from 表

    -- 需求:查询商品名和商品价格. 
    select pname,price from product
    
  • 别名查询

    格式 可以对表或字段起别名,使用 as来操作,as还可以省略

    -- 表别名:查询商品名称和价格 
    select pro.pname ,pro.price from product as pro;
    -- 列别名:查询商品名称和价格 
    select pname as 商品名,price as 价格  from product as 商品;
    
  • 去重复查询

    格式 使用 distinct

    -- 需求:查看商品表中有那些价格. 
    select distinct price from product;
    
  • 查询结果参与运算

    格式

    -- 需求:将所有商品的价格+10元进行显示. (查询结果可参与运算) 
    select *,ifnull(price,0)+10 from product;
    
条件查询

比较、逻辑、in

  • 格式

    • 比较运算 > < >= <= = !=
    • 逻辑 and or not
    • in(值1,值2,值3)
  • 示例

    -- 比较练习
    -- 查询math分数大于80分的学生
    select *from student where math>80;
    -- 查询english分数小于或等于80分的学生
    select *from student where math>=80;
    -- 查询age等于20岁的学生
    select *from student where age=20;;
    -- 查询age不等于20岁的学生
    select *from student where age!=20;
    -- 逻辑练习
    -- 查询age大于35且性别为男的学生(两个条件同时满足)
    select *from student where age>35 and sex= '男';
    -- 查询age大于35或性别为男的学生(两个条件其中一个满足)
    select*from student where age>35 or sex='男';
    -- 查询id是1或3或5的学生
    select*from student where id=1 or id=3 or id=5;
    -- in练习
    -- 查询id是1或3或5的学生
    select*from student where id in(1,3,5);
    -- 查询id不是1或3或5的学生
    select*from student where id not in(1,3,5);
    
    

between…and与like

  • 格式

    • between …and … >= and <=
    • like 模糊查询 两种通配符 % 通配所有 _ 通配一个
  • 示例

    -- between..and 练习
    -- 查询english成绩大于等于75,且小于等于90的学生
    select *from student where english between 75 and 90;
    
    -- like 练习
    -- 查询姓马的学生
    select *form student where like '马%';
    -- 查询姓名中包含'德'字的学生
    select *form student where like '%德%';
    -- 查询姓马,且姓名有三个字的学生
    select *form student where like '马__';
    
排序

order by 关键字

  • 格式

    select * from 表 order by 字段 asc[desc 降序] ,字段 asc[desc 降序]

    默认是asc 代表升序

    多个字段代表当前一个字段相同,根据后一个字段进行排序

  • 示例

    -- 查询所有数据,使用年龄降序排序
    select *from student order by age;
    -- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序
    select *from student order by age desc math;
    

    注:order by 一般是在语句最后

聚合函数

【count、max、min、avg】

  • 格式

    聚合函数也叫分组函数,它的作用是对一列数据进行统计 常用 count max min avg sum

    • count 统计个数
    • max 最大
    • min 最小
    • avg 平均值
    • sum 求和
  • 示例

    -- 查询学生总数
    select count(*) from student;
    -- 查询年龄大于40的总数
    select count(*)from student where age>40;
    -- 查询数学成绩总分
    select sum(math) from student ;
    -- 查询数学成绩平均分
    select avg(math)from student;
    -- 查询数学成绩最高分
    select max(max) from student;
    -- 查询数学成绩最低分
    select min(math)from student;
    
分组查询

【分组函数group by ,使用having进行条件过滤】

  • 格式

    分组使用的是group by ,它是根据某一个字段对数据进行区分,区分后重要的数据的统计,这时就需要使用聚合函数(sum/count/max/min/avg)

  • 示例

    -- 按性别分组
    select sex from student group by sex;
    -- 查询男女各多少人
    select sex,count(*)from student group by sex;
    -- 查询年龄大于25岁的人,按性别分组,统计每组的人数
    select sex,count(*)from student where age>25 group by sex;
    -- 查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据
    select sex,count(*)from student where age>25 group by sex having count(*)>2;
    

【注意:】 where 是在group by 前进行了条件的过滤,简单理解就是where是在group by 前执行了,如果我们分组后在进行条件过滤,需要使用的是having

分页limit

【使用limit对数据进行分页】

  • 格式

    limit可以对数据进行分页显示

    select * from 表 limit n,m

    n 开始行

    m 每页显示多少条

    【显示页数 】 算法 limit *(页码-1)每页显示条数, 每页显示条数

  • 示例

    -- 查询学生表中数据,从第三条开始显示,显示6条
    select)from student limit 2,6;
    

书写顺序:

select 字段 from 表 where 条件 group by 字段 having 条件 order by 字段 limit m,n;

执行顺序:

  1. from 表

  2. where 条件

  3. group by 字段 having 条件

  4. select

  5. order by

  6. limit m,n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值