MySQL基础
本文最后更新于 168 天前,如有失效请评论区留言。

                

DDL

DML

DQL

目录

数据库的概述

数据库服务的启动与登录

SQL的概念

操作数据库

增删改表中数据

查询表中的记录

聚合函数

排序 分组 分页

数据库的概述


基本概念
1. 存储数据的仓库
2. 本质上是一个文件系统,还是以文件的方式存在服务器的 电脑上的。
3. 所有的关系型数据库都可以使用通用的 SQL 语句进行管理 DBMS DataBase Management System

特点
1. 持久化存储数据的。其实数据库就是一个文件系统
2. 方便存储和管理数据
3. 使用了统一的方式操作数据库 – SQL

  • 一个数据库服务器包含多个库
  • 一个数据库包含多张表
  • 一张表包含多条记录

数据库服务的启动与登录


1.MySQL服务器启动方式有两种

  1. 通过服务的方式自动启动
  2. 手动启动的方式

操作方法:

  1. 手动操作
    打开计算机管理进行操作
  2. 通过DOS命令操作
    使用管理员打开cmd
    net start mysql : 启动mysql的服务
    net stop mysql:关闭mysql服务

2. MySQL登录–控制台连接数据库

登录格式

  • mysql -u 用户名 -p 密码 (u 和 p 后面没有空格)
  • mysql -hip 地址 -u 用户名 -p 密码 (127.0.0.1 代表本机的 IP 地址)
  • mysql –host=ip 地址 –user=用户名 –password=密码

3. 退出MySQL

quit 或 exit

SQL的概念


Structured Query Language 结构化查询语言

SQL特点

1. 是一种所有关系型数据库的查询规范,不同的数据库都支持。
2. 通用的数据库操作语言,可以用在不同的数据库中。
3. 不同的数据库 SQL 语句有一些区别。

SQL语句分类

  • ata Definition Language (DDL 数据定义语言) 如:建库,建表
  • Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改
  • Data Query Language(DQL 数据查询语言),如:对表中的查询操作
  • Data Control Language(DCL 数据控制语言),如:对用户权限的设置

MySQL的语法

每条语句以分号结尾,如果在 SQLyog 中不是必须加的。
SQL 中不区分大小写,关键字中认为大写和小写是一样的
3 种注释:

– 空格 单行注释
/* */ 多行注释
# 这是 mysql 特有的注释方式

DDL操作数据库

1.操作数据库:CRUD

1. C(Create):创建

  • 创建数据库:
     create database 数据库名称;
  • 创建数据库,判断不存在,再创建:
     create database if not exists 数据库名称;
  • 创建数据库,并指定字符集
     create database 数据库名称 character set 字符集名;

2. R(Retrieve):查询

  • 查询所有数据库的名称:
     show databases;
  • 查询某个数据库的字符集:查询某个数据库的创建语句
     show create database 数据库名称;

3. U(Update):修改

  • 修改数据库的字符集
     alter database 数据库名称 character set 字符集名称;

4. D(Delete):删除

  • 删除数据库
     drop database 数据库名称;
  • 判断数据库存在,存在再删除
     drop database if exists 数据库名称;

5. 使用数据库

  • 查询当前正在使用的数据库名称
     select database();
  • 使用数据库
     use 数据库名称

在这里插入图片描述

在这里插入图片描述

show databases;
create database demodemo character set utf8;
show databases;
show create database demodemo;
drop database demodemo;
show databases;

命令:system cls 可以清屏

2.操作表

1. C(Create):创建

1. 语法:
  create table 表名(
    列名1 数据类型1,
    列名2 数据类型2,
    …
    列名n 数据类型n
  );
  * 注意:最后一列,不需要加逗号(,)
 * 数据库类型:
    1. int:整数类型
     * age int,
    2. double:小数类型
     * score double(5,2)
    3. date:日期,只包含年月日,yyyy-MM-dd
    4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
    5. timestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
    6.varchar:字符串
     * name varchar(20):姓名最大20个字符
     * zhangsan 8个字符 张三 2个字符
  创建表
  create table student(
    id int,
    name varchar(32),
    age int ,
    score double(4,1),
    birthday date,
    insert_time timestamp
   );
  复制表:
   * create table 表名 like 被复制的表名;

2. R(Retrieve):查询

  • 查询某个数据库中所有的表名称
    * show tables;
  • 查询表结构
    * desc 表名;

3. U(Update):修改

1. 修改表名
  alter table 表名 rename to 新的表名;
2. 修改表的字符集
  alter table 表名 character set 字符集名称;
3. 添加一列
  alter table 表名 add 列名 数据类型;
4. 修改列名称 类型
  alter table 表名 change 列名 新列别 新数据类型;
  alter table 表名 modify 列名 新数据类型;
5. 删除列
  alter table 表名 drop 列名;
6. 修改类型modify
  alter table 表名 modify 列名 新的类型;
7. 修改列名 change
  alter table 表名 change 旧列名 新列名 类型;

4. D(Delete):删除

drop table 表名;
 * drop table if exists 表名 ;

use students   -- 使用此数据库
-- 建表
create table Student
(Sno char(15) not null primary key,
Sname char(10) unique,
Ssex char(5),
Sage int,
Sdept char(10)
);

show tables;   -- 展示所有表名
create table studentdemo like student;
show tables;   -- 复制表(只复制了结构)
desc studentdemo; -- 查询表结构
alter table studentdemo rename to demo; -- 更改studentdemo表的名为demo
alter table demo add Sweight int; -- 添加一列
alter table demo drop Sweight int; -- 删除一列
drop table if exists demo;  -- 删除demo表,若存在   

在这里插入图片描述

在这里插入图片描述

DML:增删改表中数据

1. 添加数据:

语法:
  insert into 表名(列名1,列名2,…列名n) values(值1,值2,…值n);
 * 注意:
  1. 列名和值要一一对应。
  2. 如果表名后,不定义列名,则默认给所有列添加值
    insert into 表名 values(值1,值2,…值n);
  3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来

2. 删除数据:

语法:
 * delete from 表名 [where 条件]
注意:
 1. 如果不加条件,则删除表中所有记录。
 2. 如果要删除所有记录
   1. delete from 表名; – 不推荐使用。有多少条记录就会执行多少次删除操作
   2. TRUNCATE TABLE 表名; – 推荐使用,效率更高 先删除表,然后再创建一张一样的表。

3. 修改数据:

语法:
  * update 表名 set 列名1 = 值1, 列名2 = 值2,… [where 条件];

  • 注意:
    1. 如果不加任何条件,则会将表中所有记录全部修改。
-- 插入数据
insert into demo (Sno, Sname, Ssex, Sage, Sdept)
values('201215121', '李勇', '男', 20, 'CS'),
      ('201215122', '刘晨', '女', 19, 'CS'),
      ('201215123', '王敏', '女', 18, 'MA'),
      ('201215125', '张立', '男', 19, 'IS');

 select * from demo; -- 查看demo表的所有信息
 delete from demo where sname = '刘晨'; -- 删除操作
 update demo set sage = 18, sname = '王勇'  where sname = '李勇'; -- 更新操作

在这里插入图片描述

在这里插入图片描述

DQL:查询表中的记录

select * from 表名;

1. 语法:

select
 字段列表
from
 表名列表
where
 条件列表
group by
 分组字段
having
 分组之后的条件
order by
 排序
limit
 分页限定

2. 基础查询

1. 多个字段的查询
   select 字段名1,字段名2… from 表名;
 注意:
    如果查询所有字段,则可以使用*来替代字段列表。
2. 去除重复:
   * distinct
3. 计算列
   * 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
   * ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
   * 表达式1:哪个字段需要判断是否为null
   * 如果该字段为null后的替换值。
4. 起别名:
   * as:as也可以省略

3. 条件查询

1. where子句后跟条件
2. 运算符
   * > 、< 、<= 、>= 、= 、<>
   * BETWEEN…AND
   * IN( 集合)
   * LIKE:模糊查询
   * 占位符:
   * _:单个任意字符
   * %:多个任意字符
   * IS NULL
   * and 或 &&
   * or 或 ||
   * not 或 !

-- 插入数据
insert into demo (Sno, Sname, Ssex, Sage, Sdept)
values('201215130', '懒羊羊', '男', 20, 'CS'),
      ('201215131', '美羊羊', '女', 19, 'CS'),
      ('201215132', '喜羊羊', '男', 18, 'MA'),
      ('201215133', '沸羊羊', '男', 19, 'IS');

select * from demo;
select sname from demo where sname like '%羊';
select * from demo where sage > 18 and sdept = 'CS';

在这里插入图片描述

聚合函数

  • 聚合函数会忽略空值 NULL。
聚合函数 作用
max(列名) 求这一列的最大值
min(列名) 求这一列的最小值
avg(列名) avg(列名) 求这一列的平均值
count(列名) count(列名) 统计这一列有多少条记录
sum(列名) 对这一列求总和

IFNULL(列名,默认值) 如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。

  • 利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏
select ifnull(sage,0) from demo; -- 举例

select min(sage) 最小年龄, max(sage) 最大年龄, avg(sage) 平均年龄, sum(sage) 年龄和
from demo;

在这里插入图片描述

排序 ORDER BY

单列排序

  • 通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)

SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名;
[ASC|DESC];
ASC: 升序,默认值
DESC: 降序

select sname, sage from demo order by sage;

在这里插入图片描述

组合排序

SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];

 select sname, sage from demo
 where sname like '%羊%'
 order by sage desc, sno; -- 年龄相同,则学号升序

在这里插入图片描述

分组 GROUP BY ; HAVING

  • 分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组, 一般分组会跟聚合函数一起使用。

SELECT 字段 1,字段 2… FROM 表名 GROUP BY 分组字段 [HAVING 条件];

having 与 where 的区别

子名 作用
where 子句 1. 对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之 前过滤数据,即先过滤再分组。 2. where 后面不可以使用聚合函数
having 子句 1. having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。2. having 后面可以使用聚合函数
select ssex, avg(sage) from demo -- 求男女生的平均年龄
group by ssex;
-- 查询年龄小于20的男女生人数
select ssex, count(*) from demo where sage < 20 group by ssex;
-- 查看男生、女生人数---大于3的显示
select ssex, count(*) cnt from demo where sage < 20 group by ssex having cnt > 3;

在这里插入图片描述

分页 LIMIT

  • limit 语句;LIMIT 是限制的意思, LIMIT 的作用就是限制查询记录的条数

SELECT *|字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子 句][LIMIT 子句];

  • offset:起始行数,从 0 开始计数,如果省略,默认就是 0
    length: 返回的行数
select * from demo;
select * from demo limit 3; -- 省略,默认就是 0
select * from demo limit 6, 3; -- 如果最后不够,有多少显示多少

在这里插入图片描述

版权声明:除特殊说明,博客文章均为 "代码不会敲" 原创。依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇