MySQL数据库

你好! 这是我自己编辑的一些知识点。如果你想学习MySQL数据库的有关知识, 可以仔细阅读这篇文章,了解一下关于MySQL数据库的基本语法知识。

MySQL

介绍

  • 数据库(DataBase),简称DB,按照一定格式存储数据的一些文件的组合。

  • 数据库管理系统(DataBaseManagement),简称DBMS,数据库管理系统是专门来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。

    ​ 常见的数据库管理系统:MySQL、oracle、Ms SqlServer、DB2、Sybase等…

  • SQL:结构化查询语言

    ​ 程序员编写SQL语句,DBMS负责执行SQL,进行增删改查。

**三者关系:**DBMS – 执行 – > SQL – 操作 – > DB

SQL语句分类

名称描述
DQL数据查询语言(凡是带有select关键字的都是查询语句)select…
DML数据操作语言(凡是对表当中的数据进行增删改查的都是DML)insert增、delete删、update改
DDL数据定义语言(主要操作的是表的结构)create新建、alter修改、drop删除
TCL事务控制语言conmit事务提交、rollback事务回滚
DCL事务控制语言grant授权、revoke撤销权限

MySQL卸载时:

​ 1.点击安装包进行卸载删除

​ 2.删除目录与隐藏目录:

​ - C:\ProgramData\MySQL

​ - C:\Program Files (x86)\MySQL

数据库操作库

命令启用MySQL服务

net stop 服务名称;

net start 服务名称;

本地登录

C:\Users\薯片>mysql -uroot -p111111
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye

注意:

  • mysql -uroot -p111111为显示密码登录
  • mysql -u root -p
    Enter password: * * * * * *为隐藏密码登录
  • exit为退出mysql。
  • 不区分大小写且不见(;)不执行

查看数据库的版本号

select version();

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.22    |
+-----------+
1 row in set (0.03 sec)

查看当前使用的数据库

select database();

mysql> select database();
+------------+
| database() |
+------------+
| text       |
+------------+
1 row in set (0.00 sec)

查看数据库

show databases;

结尾时为英文状态下的(😉.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.04 sec)

mysql默认自带了4个数据库。

选择使用数据库

use 数据库名;

mysql> use mysql;
Database changed

创建数据库

create database 数据库名;

mysql>create database text charset utf8;
Query OK, 1 row affected (0.05 sec)

删除仓库

drop database 数据库名;

mysql>drop database text;
Query OK, 1 row affected (0.05 sec)

表操作

  • 数据库当中最基本的单元是表: table。

  • 数据库当中是以表格的形式表示数据。

    ​ - 行(row):被称为数据/记录

    ​ - 列(column):被称为字段

    ​ - 字段:字段名、数据类型、约束等属性

注意:唯一性约束添加后,该字段中的数据不能重复

数据类型

描述类型
字符型char、varchar、text
整型tinyint、smallint、int、bigint
浮点型float、double、decimal
日期型date、time、year、datetime、timestamp

约束

类型描述
not null/null非空/空
default默认值
primary key主键
foreign key外键
unique唯一

注意:在创建表示添加注释使用comment。

创建表

create table 表名(字段名 字段类型,字段名 字段类型,字段名 字段类型);

mysql>  drop table if exists item;
mysql>  create table item(id int,username varchar(20),phone char(11));
Query OK, 0 rows affected (0.06 sec)

修改表名

alter table 表名 rename to 新名;

alter table student rename to stu;

删除表

drop table 表名;

mysql>  drop table yg;
Query OK, 0 rows affected (0.06 sec)

查看数据库下的表

show tables;

mysql> show tables;
Empty set (0.02 sec)

查看表结构

desc 表名;

mysql> desc item;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | YES  |     | NULL    |       |
| username | varchar(20) | YES  |     | NULL    |       |
| adress   | varchar(30) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

添加字段

alter table 表名 add 新字段名;

mysql> alter table item add class int;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除字段

alter table 表名 drop 要删除的字段;

mysql> alter table item drop class;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

修改字段

alter table 表名 change 原字段名 新字段名 新类型;

mysql> alter table item change phone adress varchar(30);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

简单查询

查询字段

查询一个字段:

select 字段名 from 表名;

mysql> select adress from item;
+--------+
| adress |
+--------+
| 杭州   |
| 北京   |
+--------+
2 rows in set (0.00 sec)

查询多个字段:

select 字段名,字段名 from 表名;

mysql> select adress,id from item;
+--------+------+
| adress | id   |
+--------+------+
| 杭州   | 2023 |
| 北京   | 2022 |
+--------+------+
2 rows in set (0.00 sec)

注意:

  • select和from都是关键字。
  • 字段名和表名都是标识符。

去除重复的字段

select distinct 字段名 from 表名;

mysql> select distinct class from item;
+-------+
| class |
+-------+
|     1 |
|     3 |
+-------+
2 rows in set (0.00 sec)

查看表中数据

select*from 表名;

mysql> select*from item;
+------+----------+--------+-------+
| id   | username | adress | class |
+------+----------+--------+-------+
| 2023 | wellcom  | 杭州   |     3 |
| 2022 | say      | 北京   |     2 |
+------+----------+--------+-------+
2 rows in set (0.00 sec)

添加数据

插入一条数据:

insert into 表名(字段1,字段2…) values (值1,值2,…)

mysql> insert into item(id,username,adress,class) value(2021,'hello','上海',01);
Query OK, 1 row affected (0.00 sec)

插入多条数据:

insert into表名(字段1,字段2…)values(值1,值2…),(值1,值2,…)

mysql> insert into item(id,username,adress,class) value(2022,'say','北京',02),(2023,'wellcom','杭州',03);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

删除数据

delete from 表名 where 数据名;

mysql> delete from item where class;
Query OK, 3 rows affected (0.06 sec)

更新数据

update 表名 set 字段名=值 where 条件(字段名=值);

mysql> update item set class=1 where id=2023;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

截断数据

truncate table 表名;

mysql> truncate table salgrade;
Query OK, 0 rows affected (0.00 sec)

条件查询

select 字段 from 表名 where 条件;

mysql> select adress,id from item where id=2023;
+--------+------+
| adress | id   |
+--------+------+
| 杭州   | 2023 |
+--------+------+
1 row in set (0.00 sec)
条件描述
<> !=大于、小于、不等于
<小于
<=小于大于
>大于
>=大于大于
between…and…两个值之间,等同于 >=and<=
is nullis not null不为空
and并且
or或者
in包含,相对于多个or (not in 不在范围内)
not可以取非,主要用于is或in中
like模糊查询,支持%或_匹配
%匹配任意多个字符
_一个下划线只匹配一个字符

注意:

  • 使用between and时,必须遵循左小右大。
  • 在数据库中null不能使用等号进行衡量,需要使用is null,数据库中的null不是一个值。
  • and和or同时出现,and优先级较高,如需先执行or需要加小括号。
  • in不是一个区间,in后面跟的是具体的值。
  • \为转义字符

分组查询

select 函数 from 表名 group by 字段;

mysql> select count(*) from item group by class;
+----------+
| count(*) |
+----------+
|        3 |
|        3 |
|        3 |
+----------+
3 rows in set (0.00 sec)
分组条件

select 函数 from 表名 group by 字段名 having 条件表达式;

mysql> select count(sex) from item group by sex having class=2;
+----------+
| count(sex) |
+----------+
|        3 |
|        3 |
+----------+
3 rows in set (0.00 sec)
函数名描述
count(*)统计个数
max(字段名)统计最大值
min(字段名)统计最小值
sum(字段名)统计和
avg(字段名)统计平均值

统计表中数据: select count(*) from 表名;

mysql> select count(*) from item;
+----------+
| count(*) |
+----------+
|        9 |
+----------+
1 row in set (0.00 sec)

统计表中某个字段的种类的总个数:select count(*) from 表名 group by 字段;

mysql> select count(*) from item group by class;
+----------+
| count(*) |
+----------+
|        3 |
|        3 |
|        3 |
+----------+
3 rows in set (0.00 sec)

最大值:select max(字段名) from 表名;

mysql>  select max(height) from item;
+-------------+
| max(height) |
+-------------+
|        1422 |
+-------------+
1 row in set (0.00 sec)

统计添加条件的字段下的数据信息:select avg(字段名) from 表名 group by 字段名 having avg(字段名)>=800;

mysql> select avg(height) from item group by id having avg(height)>=800;
+-------------+
| avg(height) |
+-------------+
|   1422.0000 |
|    957.0000 |
|    864.0000 |
+-------------+
3 rows in set (0.00 sec)

注意:分组以后再加条件一定用having,不能用where。

模糊查询

select 字段名 from 表名 where 字段名 like ‘值’;

mysql> select ENAME from emp where ENAME like '%A%';
+--------+
| ENAME  |
+--------+
| ALLEN  |
| WARD   |
| MARTIN |
| BLAKE  |
+--------+
4 rows in set (0.00 sec)

注意:

  • A%:第一个字为A
  • %A:最后一个字为A
  • %A%:包含A的
  • %A_:倒数第二个字为A

排序

升序

select 字段名,字段名 from 表名 order by 字段名;

指定升序: select 字段名,字段名 from 表名 order by 字段名 asc;

有数据相等时再添加一个字段名升序:select 字段名,字段名 from 表名 order by 字段名 asc,字段名 asc;

mysql> select id,name from yg order by id;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | 五六万    |
|    2 | 包含万    |
|    4 | 弗利萨    |
|    5 | 孙悟空    |
+------+-----------+
4 rows in set (0.00 sec)
降序

select 字段名,字段名 from 表名 order by 字段名 desc;

mysql> select id,name from yg order by id desc;
+------+-----------+
| id   | name      |
+------+-----------+
|    5 | 孙悟空    |
|    4 | 弗利萨    |
|    2 | 包含万    |
|    1 | 五六万    |
+------+-----------+
4 rows in set (0.00 sec)
mysql>  select id,name from yg where remark between 100 and 200 order by remark desc;
+------+-----------+
| id   | name      |
+------+-----------+
|    4 | 弗利萨    |
|    1 | 五六万    |
|    2 | 包含万    |
+------+-----------+
3 rows in set (0.00 sec)
--以上语句的执行顺序为:
--from
--where
--select
--order by(总是最后执行)

分页

select*from 表名 limit 行数;

mysql>  select*from yg limit 1;
+------+-----------+--------+------------+------------+--------+
| id   | name      | gender | birthday   | email      | remark |
+------+-----------+--------+------------+------------+--------+
|    1 | 五六万    | 男     | 1234-12-04 | 120@qq.com | 102    |
+------+-----------+--------+------------+------------+--------+
1 row in set (0.00 sec)
执行顺序

1.from

2.where

3.group by

4.having

5.select

6.order by

从某张表中查询数据,先经过where条件筛选出数据,对数据进行分组,分组后使用having继续筛选,select查询处理,最后排序。

连接查询

跨表查询、多表联合起来查询数据,被称为连接查询。

根据连接方式分为:

  • 内连接:
    • 等值连接
    • 非等值连接
    • 自连接
mysql> select name,sex,address from student inner join teacher on student.id=teacher.id;
+--------------+------+---------+
| name         | sex  | address |
+--------------+------+---------+
| 张华         | 女   | 保定    |
| 欧阳华少     | 男   | 上海    |
| 李磊         | 男   | 北京    |
| 张三丰       | 女   | 北京    |
+--------------+------+---------+
4 rows in set (0.00 sec)
  • 外连接:

    • 左外连接
    mysql> select name,sex,address,tname from student left join teacher on teacher.id=student.id;
    +--------------+------+---------+-----------+
    | name         | sex  | address | tname     |
    +--------------+------+---------+-----------+
    | 张华         | 女   | 保定    | 张老师    |
    | 欧阳华少     | 男   | 上海    | 李老师    |
    | 李磊         | 男   | 北京    | 王老师    |
    | 张三丰       | 女   | 北京    | 吴老师    |
    | 张一波       | 男   | 保定    | NULL      |
    | 爱丽丝       | 女   | 郑州    | NULL      |
    +--------------+------+---------+-----------+
    6 rows in set (0.04 sec)
    
    • 右外连接
    mysql> select name,sex,address,tname from student right join teacher on teacher.id=student.id;
    +--------------+------+---------+-----------+
    | name         | sex  | address | tname     |
    +--------------+------+---------+-----------+
    | 张华         | 女   | 保定    | 张老师    |
    | 欧阳华少     | 男   | 上海    | 李老师    |
    | 李磊         | 男   | 北京    | 王老师    |
    | 张三丰       | 女   | 北京    | 吴老师    |
    +--------------+------+---------+-----------+
    4 rows in set (0.00 sec)
    
  • 全连接

笛卡尔积

当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积,被称为笛卡尔积现象。

避免现象发生:连接时加条件,满足条件的记录被筛选出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薯片

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值