mysql安装及数据库表的安装创建
# docker pull mysql:5.7.22
# mkdir -p /opt/mysql/data
进入/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
命令:
# 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创建数据库,并且指定编码utf8
CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci;
注:utf8mb4兼容utf8,且比utf8能表示更多的字符。无特殊情况,用uft8
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;
参数解释:
数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。 有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等...
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次方 位
如果带符号,需要用1位表示符号(1表示负数,0表示正),剩下7位表示数据,那么表示范围是-127—127(包括-0和+0)
如果不带符号,8位全部表示数据,那么表示范围是 0–256
我们经常会把数据类型设置成INT(11),这后面的数字11表示的是该数据类型指定的显示宽度。
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)
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 最大可能显示的数字个数,数值的位数小于指定的宽度会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。
tinyint:tinyint 一般用于存放 status,type 这种数值小的数据,不够用时可能会用 smallint,为了避免数据库被过度设计,布尔、枚举类型也采用 tinyint;
int:可用于存储时间戳与自增ID主键;
decimal: DECIMAL类型可用于存储对精度要求比较高的数值,比如订单金额存储等。
为了更好的提高系统性能,选择合适的数据类型非常重要,以下几个简单的原则有助于你更好的做出选择:
更小通常是最好的:越小,占用cpu、磁盘和内存越少;
尽量简单:简单的数据类型可以减少cpu开销;
尽量避免null:包含null值的列在sql语句中通常很难优化。
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类型是个不错的选择。
MySQL 中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。
下表中列出了 MySQL 中的字符串数据类型,括号中的M表示可以为其指定长度。
类型名称 | 说明|存储需求
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535字节 | 变长字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
TEXT | 0-65535字节 | 长文本数据 |
MEDIUMTEXT | 0-16777215字节 | 中等长度文本数据 |
LONGTEXT | 0-4294967295字节 | 极大文本数据 |
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类型实际占用的空间为字符串的实际长度加一。这样,即可有效节约系统的空间。
本系列文章: 从零开发区块链应用(一)--golang配置文件管理工具viper 从零开发区块链应用(二)--mysql安装及数据库表的安装创建 从零开发区块链应用(三)--mysql初始化及gorm框架使用 从零开发区块链应用(四)--自定义业务错误信息 从零开发区块链应用(五)--golang网络请求 从零开发区块链应用(六)--gin框架使用 从零开发区块链应用(七)--gin框架参数获取 从零开发区块链应用(八)--结构体初识 从零开发区块链应用(九)--区块链结构体创建 从零开发区块链应用(十)--golang协程使用 从零开发区块链应用(十一)--以太坊地址生成 从零开发区块链应用(十二)--以太坊余额查询 从零开发区块链应用(十三)--以太坊区块查询 从零开发区块链应用(十四)--以太坊交易哈希查询
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!