你好! 这是我自己编辑的一些知识点。如果你想学习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 null | is 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)
-
全连接
笛卡尔积
当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积,被称为笛卡尔积现象。
避免现象发生:连接时加条件,满足条件的记录被筛选出来。