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

一、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            = 3306
socket          = /tmp/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/tmp/mysql.sock
port=3306
sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
long_query_time = 5
slow_query_log = 1
slow_query_log_file = slow.log
max_connections=3000
skip-name-resolve
back_log=384
log-bin=mysql-bin
binlog_format=mixed
expire_logs_days = 7
server-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中的整数型数据类型:

类型名称 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1个字节 (-128,127) (0,255) 小整数值
SMALLINT 2个字节 (-32768,32767) (0,65535) 大整数值
MEDIUMINT 3个字节 (-8388608,8388607) (0,16777215) 大整数值
INT(INTEGER) 4个字节 (-2147483648,2147483647) (0,4294967295) 大整数值
BIGINT 8个字节 (-9233372036854775808,9223372036854775807) (0,18446744073 709551615) 极大整数值

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

例如:整数类型 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 : 1264
Out 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 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 9999-12-31 23:59:59 0000-00-00 00:00:00
TIMESTAMP 4 bytes YYYY-MM-DD HH:MM:SS 19700101080001 2038 年的某个时刻 00000000000000
DATE 4 bytes YYYY-MM-DD 1000-01-01 9999-12-31 0000-00-00
TIME 3 bytes HH:MM:SS -838:59:59 838:59:59 00:00:00
YEAR 1 bytes YYYY 1901 2155 0000

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

3.4 字符串类型

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

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

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

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

类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535字节 变长字符串
TINYTEXT 0-255字节 短文本字符串
TEXT 0-65535字节 长文本数据
MEDIUMTEXT 0-16777215字节 中等长度文本数据
LONGTEXT 0-4294967295字节 极大文本数据

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:存变长大数据,速度慢,不存在空间浪费;一般用来直接存储一个比较大的文本,比如说一篇文章,一篇新闻
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容