写点什么

从零开发区块链应用 (二)--mysql 安装及数据库表的安装创建

  • 2022 年 1 月 18 日
  • 本文字数:3334 字

    阅读完需:约 11 分钟

一、mysql 在 liunx 环境安装

1.1 下载 mysql 数据库镜像

# docker pull mysql:5.7.22
复制代码

1.2 创建 mysql 挂载目录

# mkdir -p /opt/mysql/data
复制代码

1.3 编写 mysql 配置文件

进入/opt/mysql 目录中,编写 mysql 配置文件


# cd /opt/mysql# vim my.cnf 
[client]port = 3306socket = /tmp/mysql.sock[mysqld]datadir=/var/lib/mysqlsocket=/tmp/mysql.sockport=3306sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"long_query_time = 5slow_query_log = 1slow_query_log_file = slow.logmax_connections=3000skip-name-resolveback_log=384log-bin=mysql-binbinlog_format=mixedexpire_logs_days = 7server-id = 123
复制代码

1.4 启动 mysql 数据库容器

命令:


# pwd/opt/mysql
# docker run -itd --restart=unless-stopped -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone --name mysql -p 3306:3306 -v $(pwd)/data:/var/lib/mysql -v $(pwd)/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.22
复制代码


注意:


安装 mysql 时,需要将连接信息保存至安全的文件中,需要保存如下信息:


Mysql:连接IP:mysql服务器内网IP地址连接端口:3306连接密码:123456
复制代码

二、mysql 库表创建

2.1 mysql 数据库创建

mysql 创建数据库,并且指定编码 utf8


CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci;
复制代码


注:utf8mb4 兼容 utf8,且比 utf8 能表示更多的字符。无特殊情况,用 uft8

2.2 mysql 数据表创建

CREATE TABLE IF NOT EXISTS `table`(   `geekdocs_id` INT UNSIGNED AUTO_INCREMENT,   `geekdocs_title` VARCHAR(100) NOT NULL,   `geekdocs_author` VARCHAR(40) NOT NULL,   `submission_date` DATE,   PRIMARY KEY ( `geekdocs_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码


参数解释:


  • 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL,在操作数据库时如果输入该字段的数据为 NULL ,就会报错。

  • AUTO_INCREMENT 定义列为自增的属性,一般用于主键,数值会自动加 1。

  • PRIMARY KEY 关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。

  • ENGINE 设置存储引擎,CHARSET 设置编码。

三、mysql 常用数据类型

3.1 数据类型介绍

数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等...


MySQL 支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。


  • 数值类型:包括整数类型 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、浮点小数数据类型 FLOAT 和 DOUBLE、定点小数类型 DECIMAL。

  • 日期/时间类型:YEAR 、TIME、 DATE、 DATETIME 和 TIMESTAMP。

  • 字符串类型: CHAR 、VARCHAR、 BINARY、 VARBINARY、 BLOB、 TEXT、 ENUM、 SET 。

3.2 整数类型

3.2.1 MySQL 中的整数型数据类型:


举例说明:整数类型的大小与范围的关系


例如:整数类型 int


1 字节=8 位 4 字节=32 位,每位由 0 或者 1 组成,所以 int 得取值范围是:2 的 32 次方 位

3.2.2 有符号与无符号

  • 无符号 unsigned 表示设置的的数据为 0 或者正数;

  • 有符号则可以是负数 -;

  • 举例说明(使用 TINYINT 数据类型进行举例)


如果带符号,需要用 1 位表示符号(1 表示负数,0 表示正),剩下 7 位表示数据,那么表示范围是-127—127(包括-0 和+0)


如果不带符号,8 位全部表示数据,那么表示范围是 0–256

3.2.3 类型的大小、取值范围与数据长度

我们经常会把数据类型设置成 INT(11),这后面的数字 11 表示的是该数据类型指定的显示宽度。


  • 举例一:例如,假设声明一个 INT 类型的字段:


create table t1(year int(4));
复制代码


我们向表中插入两条数据:


insert into t1(year) values(1999),(19999);
复制代码


可以插入,而且没有警告,然后查看表中数据如下:


mysql> select * from t1;+-------+| year  |+-------+|  1999 || 19999 |+-------+2 rows in set (0.00 sec)
复制代码


  • 举例二:我们再次向表中插入一条数据,此值超出了 int 数据类型有符号的范围:2147483647


INSERT INTO t1(YEAR) VALUES(2147483648);
复制代码


向数据库中插入此数据时,出现了一条警告:


Warning Code : 1264Out of range value for column 'year' at row 1
复制代码


然后查看表中数据如下:


mysql> select * from t1;+------------+| year       |+------------+|       1999 ||      19999 || 2147483647 |+------------+3 rows in set (0.00 sec)
复制代码


  • 根据以上实验可得出结论:


显示宽度和数据类型的取值范围是无关的,显示宽度只是指明 MySQL 最大可能显示的数字个数,数值的位数小于指定的宽度会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。


长度的作用为为整型指定显示宽度,如 INT(11),对于存储来说 INT(1)和 INT(20)是相同的,它不会限制值的合法范围,只是规定了 MySQL 与客户端的交互应该显示多少位而已,比如你向 INT(1)中插入了 123456 值,数据库中其实已经存入了 123456,只是对于客户端查出来是 1 而已。


显示宽度和数据类型的取值范围是无关的,显示宽度只是指明 MySQL 最大可能显示的数字个数,数值的位数小于指定的宽度会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。

3.2.4 tinyint、int、decimal 应用场景

  • tinyint、int、decimal 应用场景


tinyint:tinyint 一般用于存放 status,type 这种数值小的数据,不够用时可能会用 smallint,为了避免数据库被过度设计,布尔、枚举类型也采用 tinyint;


int:可用于存储时间戳与自增 ID 主键;


decimal: DECIMAL 类型可用于存储对精度要求比较高的数值,比如订单金额存储等。


  • 如何选择适合的数据类型


为了更好的提高系统性能,选择合适的数据类型非常重要,以下几个简单的原则有助于你更好的做出选择:


更小通常是最好的:越小,占用 cpu、磁盘和内存越少;


尽量简单:简单的数据类型可以减少 cpu 开销;


尽量避免 null:包含 null 值的列在 sql 语句中通常很难优化。

3.3 日期/时间类型

mysql(5.5)所支持的日期时间类型有:DATETIME、 TIMESTAMP、DATE、TIME、YEAR。本篇文章此处主要讲解 DATETIME 类型


几种类型比较如下:



注:dateTime 类型用来记录日期和时间,其作用等价于 date 类型和 Time 类型的组合。一个 dateTime 类型的字段可以用一个 date 类型的字段和一个 time 类型的字段代替。但是如果需要同时记录日期和时间,选择 dateTime 类型是个不错的选择。

3.4 字符串类型

MySQL 中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。

3.4.1 MySQL 中的字符串数据类型:

下表中列出了 MySQL 中的字符串数据类型,括号中的 M 表示可以为其指定长度。


类型名称 | 说明|存储需求


3.4.2 char 和 varchar

char 类型和 varchar 类型都是在创建表时指定了最大长度,其基本形式如下:字符串类型(M)。其中,字符串类型参数指定了数据类型是 char 类型还是 varchar 类型,M 参数指定了该字符串的最大长度为 M。举个例子,char(4)就是指数据类型是 char 类型,其最大长度为 4。


char 类型的长度是固定的,在创建表时就指定了,其长度可以是 0~~255 的任意值。


比如,char(100)就是指定 char 类型的长度为 100。


varchar 类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取 0~~65525 之间的任意值。指定了 varchar 类型的最大值以后,其长度可以在 o 到最大长度之间。


比如,varchar(100)的最大长度是 100,但是,不是每条记录都要占用 100 个字节。而是在这个最大值范围内,使用多少分配多少,varchar 类型实际占用的空间为字符串的实际长度加一。这样,即可有效节约系统的空间。

3.4.3 char、varchar、txt 应用场景

  • char 的优缺点:定长,效率高,存在空间浪费的可能;一般用于固定长度的表单提交数据存储;例如:身份证号,手机号,电话,密码等

  • varchar 的优缺点:存变长大数据,速度慢,不存在空间浪费;如果字符串列的最大长度比平均长度大很多;列的更新很少;所以碎片不是问题;使用了像 UTF-8 这样复杂的字符集,每个字符都使用不同的字节数进行存储,那么应该使用 varchar

  • text:存变长大数据,速度慢,不存在空间浪费;一般用来直接存储一个比较大的文本,比如说一篇文章,一篇新闻

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2020.11.21 加入

还未添加个人简介

评论

发布
暂无评论
从零开发区块链应用(二)--mysql安装及数据库表的安装创建