MySQL必知必会01:一个完整的存储过程

Posted zhuyuping2020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL必知必会01:一个完整的存储过程相关的知识,希望对你有一定的参考价值。

阅读整理自《MySQL 必知必会》- 朱晓峰,详细内容请登录 极客时间 官网购买专栏。

文章目录

mysql 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库确认字段创建数据表插入数据

创建 MySQL 数据库

数据存储的第一步,就是创建数据库。

从系统架构的层次上看,MySQL 数据库系统从大到小依次是数据库服务器、数据库、数据表、数据表的行与列。

数据库是 MySQL 里面最大的存储单元。数据表、数据表里的数据,表与表之间的关系,还有在它们的基础上衍生出来的各种工具,都存储在数据库里面。

没有数据库,数据表就没有载体,也就无法存储数据。

创建数据库

SQL 语句:

CREATE DATABASE demo;

查看数据库

在 Workbench 的导航栏,可以看到数据库服务器里的所有数据库:
也可以在 Workbench 右边的工作区,通过查询语句,查看所有的数据库:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| demo               |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

说明:

  • “demo”是我们通过 SQL 语句创建的数据库,是我们用来存储用户数据的
  • “information_schema”是 MySQL 系统自带的数据库,主要保存 MySQL 数据库服务器的系统信息,比如数据库的名称、数据表的名称、字段名称、存取权限、数据文件所在的文件夹和系统使用的文件夹,等等
  • “performance_schema”是 MySQL 系统自带的数据库,可以用来监控 MySQL 的各类性能指标
  • “sys”数据库是 MySQL 系统自带的数据库,主要作用是,以一种更容易被理解的方式展示 MySQL 数据库服务器的各类性能指标,帮助系统管理员和开发人员监控 MySQL 的技术性能
  • “mysql”数据库保存了 MySQL 数据库服务器运行时需要的系统信息,比如数据文件夹、当前使用的字符集、约束检查信息,等等。

为什么 Workbench 里面只能看到“demo”和“sys”这 2 个数据库?其实是因为,Workbench 是图形化的管理工具,主要面向开发人员,“demo”和“sys”这 2 个数据库已经够用了。如果有特殊需求,比如,需要监控 MySQL 数据库各项性能指标、直接操作 MySQL 数据库系统文件等,可以由 DBA 通过 SQL 语句,查看其它的系统数据库。


确认字段

数据存储流程的第二步是确认表的字段。

MySQL 数据表由行与列组成,一行就是一条数据记录,每一条数据记录都被分成许多列,一列就叫一个字段。每个字段都需要定义数据类型,这个数据类型叫做字段类型。例如:

mysql> select * from demo.test;
+---------+-----------+-------+
| barcode | goodsname | price |
+---------+-----------+-------+
| 0001    | book      |     3 |
| 0002    | pen       |     2 |
| 0003    | rubber    |     1 |
+---------+-----------+-------+
3 rows in set (0.00 sec)

每一条数据记录的每一个片段,就按照字段的定义被严格地管理起来了,从而使数据有序而且可靠。MySQL 支持多种字段类型,字段的定义会影响数据的取值范围、精度,以及系统的可靠性。


创建数据表

数据存储流程的第三步,是创建数据表。

MySQL 中的数据表是什么?可以把它看成用来存储数据的最主要工具。

数据表对存储在里面的数据进行组织和管理,使数据变得有序,并且能够实现高效查询和处理。

大多数情况下,我们是不会先准备一个 Excel 文件,再通过 Workbench 的数据导入来创建表的,这样太麻烦了。

通过 SQL 语句来创建表:

CREATE TABLE demo.test
( 
  barcode text,
  goodsname text,
  price int
); 

注意点:

  • 创建表的时候,最好指明数据库。否则,如果你没有选中数据库,Workbench 会提示错误;要是你当前选中的数据库不对,还可能把表创建到错误的数据库中
  • 不要在最后一个字段的后面加逗号“,”,这也是初学者容易犯的错误

查看表结构

mysql> DESCRIBE demo.test;
+-----------+------+------+-----+---------+-------+
| Field     | Type | Null | Key | Default | Extra |
+-----------+------+------+-----+---------+-------+
| barcode   | text | YES  |     | NULL    |       |
| goodsname | text | YES  |     | NULL    |       |
| price     | int  | YES  |     | NULL    |       |
+-----------+------+------+-----+---------+-------+
3 rows in set (0.00 sec)
  • Field:表示字段名称
  • Type:表示字段类型,这里 barcode、goodsname 是文本型的,price 是整数类型的
  • Null:表示这个字段是否允许是空值(NULL)。这里一定要注意,在 MySQL 里面,空值不等于空字符串。一个空字符串的长度是 0,一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的
  • Key:暂时把它叫做键
  • Default:表示默认值。我们导入的表的所有的字段都允许是空,默认值都是 NULL
  • Extra:表示附加信息

查看数据库中的表

USE demo;
SHOW TABLES;
mysql> SHOW TABLES;
+----------------+
| Tables_in_demo |
+----------------+
| test           |
+----------------+
1 row in set (0.00 sec)

设置主键

主键可以确保数据的唯一性,而且能够减少数据错误。

MySQL 中数据表的主键,是表中的一个字段或者几个字段的组合。它主要有 3 个特征:必须唯一,不能重复;不能是空;必须可以唯一标识数据表中的记录。

一个 MySQL 数据表中只能有一个主键。虽然 MySQL 也允许创建没有主键的表,但是,建议要给表定义主键,并且养成习惯。因为主键可以帮助减少错误数据,并且提高查询的速度。

在 Workbench 中,可以通过修改表结构,来增加一个主键字段:

删除掉主键

SQL语句修改表结构,增加主键字段:

ALTER TABLE demo.test ADD COLUMN itemnumber int PRIMARY KEY AUTO_INCREMENT;

alter table demo.test add column itemnumber int primary key auto_increment;

  • ALTER TABLE,表示修改表
  • ADD COLUMN,表示增加一列
  • PRIMARY KEY,表示这一列是主键
  • AUTO_INCREMENT,表示每增加一条记录,这个值自动增加

插入数据

数据存储流程的第四步,也是最后一步,是把数据插入到表当中去。

SQL语句:

INSERT INTO demo.test (barcode, goodsname, price) VALUES ('0001', 'book', 3);

这里的 INSERT INTO 表示向 demo.test 中插入数据,后面是要插入数据的字段名,VALUES 表示对应的值。

  • 要插入数据的字段名也可以不写,但是建议不要怕麻烦,一定要每次都写。这样做的好处是可读性好,不易出错,而且容易修改。否则,如果记不住表的字段,就只能去查表的结构,才能知道值所对应的字段了。
  • 由于字段 itemnumber 定义了 AUTO_INCREMENT,所以插入一条记录的时候,不给它赋值,系统也会自动给它赋值。而且,每次赋值,都会在上次的赋值基础上,自动增加 1。也可以在插入一条记录的时候给 itemnumber 赋值,由于它是主键,新的值必须与已有记录的 itemnumber 值不同,否则系统会提示错误。

SQL 规范

小结 SQL 语句:

create database demo;
show databases;
show databases demo;

create table demo.test 
(
	barcode text,
    goodsname text,
    price int
);

describe demo.test;

use demo;
show tables;

alter table demo.test add column itemnumber int primary key auto_increment;

insert into demo.test (barcode, goodsname, price) values ('0001', 'book', 3);
select * from demo.test;

drop database demo;

每一条 SQL 语句的最后,都必须有一个分号,否则,MySQL 会认为这条语句没有完成,提示语法错误。

在 SQL 语句时遵循统一的样式,以增加可读性,减少错误。参考链接:SQL样式指南 · SQL Style Guide

以上是关于MySQL必知必会01:一个完整的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

《mysql必知必会》读书笔记--存储过程的使用

《mysql必知必会》学习_第23章_20180809

工具书分享:MySQL必知必会

MySQL必知必会1

MySql查询性能优化必知必会

《MYSQL必知必会2