MySQL | 青训营

102 阅读8分钟

MySQL

什么是MySQL

概念

MySQL是一个关系型数据库,一种开源关系数据库管理系统(RDBMS),它使用最常用的数据库管理语言-结构化查询语言(SQL)进行数据库管理

关系型数据库

是建立在关系模型基础上的数据库

  • 关系型数据库是由多张能互相联接的二维行列表格组成的数据库。
  • 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
  • 当前主流的关系型数据库有Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL、浪潮K-DB、MariaDB、SqLite等

简单来说,关系型数据库就是数据以数据表的形式进行存储与管理的数据库

那么,表又是啥?

表是一种二维行列表格,关系型数据库中的数据通常以表的形式存储,如图所示

  • 列(column) - 表中的一个字段 ,如图2中patient_id 。所有表都是由一个或多个列组成的
  • 行(row) - 表中的一个记录,比如第一行,这条记录,记录下了小红的信息(病人号、姓名、年龄、身高体重等等)
  • 主键(primary key) - 一列(或一组列),其值能够唯一标识表中每一行。

比如图2中每个patient_id,都标识了一个独一无二的病人

又比如b站的uid,也标识了一个独一无二的用户

SQL

SQL 是一种操作数据库的语言,包括创建数据库、删除数据库、查询记录、修改记录、添加字段等。

SQL 是关系型数据库的标准语言,所有的关系型数据库管理系统(RDBMS)都将 SQL 作为其标准处理语言。

也就是说,SQL也是一种语言,不过这种语言是用来操作关系型数据库的

SQL有以下用途:

  • 允许用户访问关系型数据库系统中的数据;(查数据)
  • 允许用户描述数据;(自定义要查哪些数据)
  • 允许用户定义数据库中的数据,并处理该数据;(建表)
  • 允许将 SQL 模块、库或者预处理器嵌入到其它编程语言中;(后文在golang中使用SQL)
  • 允许用户创建和删除数据库、表、数据项(记录);
  • 允许用户在数据库中创建视图、存储过程、函数;
  • 允许用户设置对表、存储过程和视图的权限;

下图是SQL的体系结构:

SQL命令分为三类

具体语法后文会讲,记住关键词即可

1.DDL - Data Definition Language,数据定义语言

对数据的结构和形式进行定义,一般用于数据库和表的创建、删除、修改等。

命令说明
CREATE用于在数据库中创建一个新表、一个视图或者其它对象。
ALTER用于修改现有的数据库,比如表、记录。
DROP用于删除整个表、视图或者数据库中的其它对象

2.DML - Data Manipulation Language,数据处理语言

对数据库中的数据进行处理,一般用于数据项(记录)的插入、删除、修改和查询。

命令说明
CREATE用于在数据库中创建一个新表、一个视图或者其它对象。
ALTER用于修改现有的数据库,比如表、记录。
DROP用于删除整个表、视图或者数据库中的其它对象

3.DCL - Data Control Language,数据控制语言

对数据库中的数据进行处理,一般用于数据项(记录)的插入、删除、修改和查询。

命令说明
SELECT用于从一个或者多个表中检索某些记录。
INSERT插入一条记录。
UPDATE修改记录。
DELETE删除记录。

如何使用MySQL

要想使用MySQL,我们首先得学会SQL语句

MySQL其实是有许多友好的图形化客户端的,可以很轻松地生成SQL语句,但是对于开发人员来说,最好还是得会SQL

SQL语法

SQL语法其实很简单,就是几个关键词(如上)与基础的几段结构

让我们先来了解一下SQL的基本规则

  1. SQL 语句要以分号;结尾,在 RDBMS (关系型数据库)当中,SQL 语句是逐条执行的,一条 SQL 语句代表着数据库的一个操作
  2. SQL 语句不区分大小写,例如,不管写成 SELECT 还是 select,解释都是一样的。表名和列名也是如此,但是,** 插入到表中的数据是区分大小写的**
  3. SQL 语句的单词之间必须使用半角空格(英文空格)或换行符来进行分隔

开始


前提是已经安装好了 并且正确配置环境变量,如果不会,在群里提问、自行百度或者向学长提问

1. 登录你的mysql

首先,打开你的cmd或者windows powershell(如果是mac就打开你的终端)

然后输入

mysql -u root -p

root是你的用户名

然后根据提示输入密码来启动MySQL

除此之外,我们也可以在goland中连接数据库,这样可以直观地管理数据,并且还可以一键生成SQL

2.创建一个数据库
创建数据库
creat database student;
creat database 
student;

这二者是等效的

让我们看看结果:

mysql>
create database school;
Query OK, 1 row affected (0.01 sec)
删除数据库
drop database school;
查看所有数据库
show databases;

当然,我们也可以使用LIKE从句来指定要查看的数据库:

1.完全匹配(只有名为school的数据库)

show databases like 'school';

2.查看名字中包含sch的数据库(%表示任意个字符)

show databases like '%sch%';

3.查看以sch开头的数据库

show databases like 'sch%';

4.查看以ool结尾的数据库

show databases like '%ool';

结果如图所示

[tips]:mysql 有四个自带的数据库,分别是mysql,information_schema,performance_schema,sys;

使用数据库

这样我们就成功创建了一个数据库了

那我们怎么使用呢?只需要输入:

student school;

接下来就可以使用这个数据库了

3.创建一张数据表
基本格式
CREATE TABLE <表名>
(
[
    表定义选项]
)[表选项][分区选项];
表的结构

一张表通常由多个字段组成,每个字段都有其独特的名称

表的结构如下所示:

下面是Mysql的数据类型,大致分为数值日期/时间字符串(字符)类型

[数值类型]:

[时间/日期]:

[字符串/字符类型]:

详情见:

创建表

其对应的SQL语句如下:

CREATE TABLE `student`
(
    `id`   BIGINT(20) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(20) DEFAULT '0',
    `sex`  VARCHAR(8)  DEFAULT '',
    `age`  INT(11),
    PRIMARY KEY (`id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  CHARSET = utf8mb4;

对应结构

CREATE TABLE <表名>
(
[
    表定义选项]
)[表选项][分区选项];

ENGINE=InnoDB:指定 MySQL引擎为InnoDB

AUTO_INCREMENT=1:自增的字段每次自增1

CHARSET=utf8mb4:指定编码为utf8base64以支持中文

以SQL语句形式查看表结构
show create table student;
删除表
drop table student;
4.增删查改
添加一条记录 Insert

由于id是自增,所以添加的时候无需插入id

insert into 表名(列1,列2,列3,列4,...)
values (值,值,值)
insert into student(name, sex, age)
values ('小明', '男', 18);

当字段允许空时或者设置了默认值时,也可以不插入这个字段,字段会默认为空或者默认值

insert into student(name, sex)
values ('小红', '女');
查询记录 Select
select1, 列2
from 表名
where...;

查询所有学生

select *
from student;

查询所有学生的姓名与年龄

select name, age
from student;

查询男学生

select name, age
from student
where sex = '男';

如果想改变输出时的字段名 可以使用AS

select name as '姓名'
from student;
子查询

子查询是嵌套在另一个语句,如:select update delete insert中的查询

select name, age
from student
where name in (select name
               from student
               where sex = '男')
order by id desc;

我们将这条语句拆解一下

最外层:

select name, age
from student
where name in (..)
order by id desc;

里层:

select name
from student
where sex = '男';

外层在里层结果的基础上再进行查询

最后的:

order by id
desc;

意思是结果按id排序,降序(desc)

升序是asc

更新记录 Update
update <表名>
set1 =1,列2 =2,.... where...
update student
set age=19,
    sex='女'
where id = 1;

这里用where来限定要更新的记录,因为update会更新所有符合限定条件的记录,如果不限定,会更新所有记录

条件之间可以用andor连接

update student
set age=19,
    sex='女'
where id >= 1
  and name = '小明';
删除记录 Delete
delete
from student
where id = 1;
5.修改数据表
修改字段
alter table <表名> change <旧字段名> <新字段名> <新数据类型>
alter table student
    change name 姓名 varchar(32);
删除字段
alter table student
    drop 姓名;
添加字段

需要注意的是,添加的字段会默认在表最后一列

alter table <表名> add <新字段名><数据类型>[约束条件];
alter table student
    add name varchar(12) default '李华' not null;
在开头添加字段

末尾加上first即可

alter table student
    add name varchar(12) default '李华' not null first;
在中间添加字段

末尾加after接字段名即可

alter table student
    add name varchar(12) default '李华' not null after id;