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的基本规则
- SQL 语句要以分号
;结尾,在 RDBMS (关系型数据库)当中,SQL 语句是逐条执行的,一条 SQL 语句代表着数据库的一个操作 - SQL 语句不区分大小写,例如,不管写成 SELECT 还是 select,解释都是一样的。表名和列名也是如此,但是,** 插入到表中的数据是区分大小写的**
- 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
select 列1, 列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 <表名>
set 列1 = 值1,列2 = 值2,.... where...
update student
set age=19,
sex='女'
where id = 1;
这里用where来限定要更新的记录,因为update会更新所有符合限定条件的记录,如果不限定,会更新所有记录
条件之间可以用and、or连接
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;