首页 > 数据库 >11月23日内容总结——配置文件修改字符编码、数据库存储引擎、创建表的完整语法、严格模式、字段类型之整形、浮点型、字符型、日期类型、枚举与集合

11月23日内容总结——配置文件修改字符编码、数据库存储引擎、创建表的完整语法、严格模式、字段类型之整形、浮点型、字符型、日期类型、枚举与集合

时间:2022-11-23 17:33:22浏览次数:42  
标签:字符 存储 配置文件 23 into values insert 类型

目录

一、字符编码与配置文件

昨天我们讲解到MySQL文件夹内的my-default.ini文件是配置文件,这里我们讲一些简单的配置设置。

ps:修改配置文件后需要重新启动MySQL服务才能生效。

mysql配置文件的作用

1.影响服务端的启动(mysqld)
2.影响客户端的连接

1.\s——查看MySQL相关信息

​ 登陆MySQL后使用\s命令后就可以查看当前用户、版本、编码、端口号。
​ MySQL5.6及之前的版本编码需要人为统一 之后的版本已经全部默认统一。如果想要永久修改编码配置,需要操作配置文件。

2.配置文件修改默认字符编码类型

默认的配置文件是my-default.ini

​ 但是我们在使用的时候不建议直接修改默认的配置文件,理想的操作应该是拷贝上述文件并重命名为my.ini,然后再my.ini中修改配置。

​ 配置文件打开后分成两部分内容,一部分是注释,一部分是配置代码。注释部分在每一行的开头有井号(#)。

ps:配置文件中的注释可以有中文,但是配置代码中不能出现中文。

配置代码

直接拷贝字符编码相关配置即可无需记忆
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
ps:
1.utf8mb4能够存储表情 功能更强大
2.utf8与utf-8是有区别的 MySQL中只有utf8

修改了配置文件中关于[mysqld]的配置 需要重启服务端

3.利用配置文件免输入账号信息登陆

​ 将管理员登录的账号密码直接写在配置文件中,之后使用mysql登录即可。

代码如下:

​ [mysql]
​ user='root'
​ password=123

二、数据库存储引擎

1、存储引擎

​ 数据库针对数据采取的多种存取方式。存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据库操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎

2、查看存储引擎的语句

​ show engines;

3、需要了解的四个存储引擎

1.MyISAM

​ MySQL5.5(包括5.5版本)之前默认使用的的存储引擎。
​ 存取数据的速度快,但是功能较少,安全性较低。

2.InnoDB

​ MySQL5.5之后默认使用的的存储引擎。
​ 支持事务、行锁、外键等操作,虽然存取速度没有MyISAM快,但是安全性更高。

3.Memory

​ 基于内存存取数据,仅用于临时表数据存取。

4.BlackHole

​ 任何写入进去的数据都会立刻丢失。

4、了解不同存储引擎底层文件个数

用各个存储引擎创建不同的表,然后去查看文件个数(如果不是5.6版本可能文件个数会不一样)。

​ create database db2;
​ use db2;
​ create table t1(id int) engine=innodb;
​ create table t2(id int) engine=myisam;
​ create table t3(id int) engine=memory;
​ create table t4(id int) engine=blackhole;

​ 1.innodb有两个文件
​ .frm 表结构
​ .ibd 表数据(表索引也放一起了)
​ 2.myisam有三个文件
​ .frm 表结构
​ .MYD 表数据
​ .MYI 表索引
​ 3.memory只有一个文件
​ .frm 表结构
​ 4.blackhole只有一个文件
​ .frm 表结构

创建了表之后我们加入数据

insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);

ps:MySQL默认忽略大小写

三、创建表的完整语法

语法

create table 表名(
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件
);

1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件也可以写多个 空格隔开即可
4.最后一行结尾不能加逗号

常见约束

not null 非空
default 默认值
auto_increment 自增长
primary key 主键 非空且唯一

ps:编写SQL语句报错之后不要慌,仔细查看提示,他会告知语句的什么位置疑似有错误,通过提示可以很快解决问题。

四、字段类型之整型

概念

整型主要用于存储整数值,主要有以下几个字段类型:

这里的范围是根据字节大小计算得到的(一个字节等于八位二进制)。

image

整型经常被用到,比如 tinyint、smallint、int、bigint 。默认是有符号的,符号会占用一个字节(bytes),若只需存储无符号值,可增加 unsigned 属性。

int(M)中的 M 代表最大显示宽度,并不是说 int(1) 就不能存储数值10了,不管设定了显示宽度是多少个字符,int 都是占用4个字节,即int(5)和int(10)可存储的范围一样。

存储字节越小,占用空间越小。所以本着最小化存储的原则,我们要尽量选择合适的整型,例如:存储一些状态值或人的年龄可以用 tinyint ;主键列,无负数,建议使用 int unsigned 或者 bigint unsigned,预估字段数字取值会超过 42 亿,使用 bigint 类型。

验证整型默认是否携带正负号

需要先在配置文件中删除下列信息:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

不删除的情况下就属于严格模式。

输入下列代码创建表(用上tinyint字段类型)并添加数据值

​ create table t5(id tinyint);
​ insert into t5 values(-129),(128);
结果是-128和127,也就意味着默认情况下是自带正负号的。

我们也可以用unsigned取消正负号
create table t6(id tinyint unsigned);
insert into t6 values(-129),(128),(1000);

取消正负号后最小就是0,最大255.

五、严格模式

当我们在使用数据库存储数据的时候,如果数据不符合规范,应该直接报错而不是擅自修改数据,这样会导致数据的失真(没有实际意义)。

在测试整形字段是否自带正负号的时候,就出现了失真的情况。正常都应该报错。但是我们之前不小心改了配置文件。

使用下方代码可以查看是否启动了严格模式:

show variables like '%mode%';

1.临时修改

​ set session sql_mode='strict_trans_tables';
​ 在当前客户端有效

​ set global sql_mode='strict_trans_tables';
​ 在当前服务端有效

2.永久修改
直接修改配置文件在mysqld下方加上如下代码:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

六、字段类型之浮点型

概念

浮点型主要有 float,double 两个,浮点型在数据库中存放的是近似值,例如float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457。

语法简介

float(20,10)
总共存储20位数,小数点后面占10位数。

image

定点型字段类型有 decimal 一个,主要用于存储有精度要求的小数。

image

对于声明语法 DECIMAL(M,D) ,自变量的值范围如下:

M是最大位数(精度),范围是1到65。可不指定,默认值是10。
D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。
例如字段 salary DECIMAL(5,2),能够存储具有五位数字和两位小数的任何值,因此可以存储在salary列中的值的范围是从-999.99到999.99。

代码验证精确度

float(20,10)
	总共存储20位数 小数点后面占10
double(20,10)
	总共存储20位数 小数点后面占10
decimal(20,10)
	总共存储20位数 小数点后面占10

create table t7(id float(60,20));
create table t8(id double(60,20));
create table t9(id decimal(60,20));
insert into t7 values(1.11111111111111111111);
insert into t8 values(1.11111111111111111111);
insert into t9 values(1.11111111111111111111);

我们会发现存储在表中的数据精确度不一样,float字段类型的精确度最低,其次是double,decimal精确度最高。

三者的核心区别在于精确度不同
float < double < decimal

七、字段类型之字符类型

概念

字符串类型也经常用到,常用的几个类型如下表:

image

其中 char 和 varchar 是最常用到的。char 类型是定长的,MySQL 总是根据定义的字符串长度分配足够的空间。当保存 char 值时,在它们的右边填充空格以达到指定的长度,当检索到 char 值时,尾部的空格被删除掉。varchar 类型用于存储可变长字符串(即变长),存储时,如果字符没有达到定义的位数,也不会在后面补空格。

char(M) 与 varchar(M) 中的的 M 表示保存的最大字符数,单个字母、数字、中文等都是占用一个字符。char 适合存储很短的字符串,或者所有值都接近同一个长度。例如,char 非常适合存储密码的 MD5 值,因为这是一个定长的值。对于字符串很长或者所要存储的字符串长短不一的情况,varchar 更加合适。

我们在定义字段最大长度时应该按需分配,提前做好预估,能使用 varchar 类型就尽量不使用 text 类型。除非有存储长文本数据需求时,再考虑使用 text 类型。

代码查看char和varchar的实际情况

create table t10(id int, name char(4));
create table t11(id int, name varchar(4));
insert into t10 values(1, 'jason1');
insert into t11 values(1, 'jason2');

ps:char_length()获取字段存储的数据长度
默认情况下MySQL针对char的存储会自动填充空格和删除空格
因此我们需要使用set global进行设置,在设置的时候需要把之前设置的指令也写上,否则会之前的指令就不生效了。

set global sql_mode='strict_trans_tables,pad_char_to_full_length';

接着使用
select char_length(name) from t10;
select char_length(name) from t11;

就能看到字符的长度变成了4和1

char和varchar对比

char
优势:整存整取 速度快
劣势:浪费存储空间
varchar
优势:节省存储空间
劣势:存取数据的速度较char慢

比如在存储下方的字符时,char字段类型使用空格填充,varchar就需要使用报头,记录每一次记录的字符的长度,而报头需要占用一个字节

jacktonyjasonkevintomjerry
1bytes+jack1bytes+tony1bytes+jason1bytes+kevin1bytes+tom1bytes+jerry

八、数字的含义

  • 数字在很多地方都是用来表示限制存储数据的长度,但是在整型中数字却不是用来限制存储长度,是用来设置展示长度的(即打印长度)。
create table t12(id int(3));  不是用来限制长度
insert into t12 values(12345);

create table t13(id int(5) zerofill);  而是用来控制展示的长度
insert into t13 values(123),(123456789);

create table t14(id int);

"""以后写整型无需添加数字"""

九、字段类型之枚举(enum)与集合集合(set)

enum枚举是多选一,像python布尔类型,

set集合是多选一或多

枚举
	多选一
	create table t15(
    	id int,
      	name varchar(32),
       gender enum('male','female','others')
    );
 	insert into t15 values(1,'tony','猛男');
  	insert into t15 values(2,'jason','male');
 	insert into t15 values(3,'kevin','others');

意思就是在给表添加记录的时候,枚举类型的值只能从创建时设定的值中选一个,否则都会报错。
    
集合
	多选多(多选一)
	create table t16(
    	id int,
      	name varchar(16),
       hobbies set('basketabll','football','doublecolorball')
    );
 	insert into t16 values(1,'jason','study');
 	insert into t16 values(2,'tony','doublecolorball');
	insert into t16 values(3,'kevin','doublecolorball,football');
    
集合的选择条件是让我们在给定的数据值中选择一个或多个,如果一个也没有就会报错。

十、字段类型之日期类型

概念

MySQL支持的日期和时间类型有 YEAR 、TIME 、DATE 、DATETIME 、TIMESTAMP,几种类型比较如下:

image

涉及到日期和时间字段类型选择时,根据存储需求选择合适的类型即可。

datetime 年月日时分秒
date 年月日
time 时分秒
year 年

关于 DATETIME 与 TIMESTAMP 两种类型如何选用,可以按照存储需求来,比如要求存储范围更广,则推荐使用 DATETIME ,如果只是存储当前时间戳,则可以使用 TIMESTAMP 类型。不过值得注意的是,TIMESTAMP 字段数据会随着系统时区而改变但 DATETIME 字段数据不会。总体来说 DATETIME 使用范围更广。

实操代码

create table t17(
	id int,
  	name varchar(32),
 	register_time datetime,
 	birthday date,
 	study_time time,
 	work_time year
);
insert into t17 values(1,'jason','2000-11-11 11:11:11','1998-01-21','11:11:11','2000');
ps:以后涉及到日期相关字段一般都是系统自动回去 无需我们可以操作


标签:字符,存储,配置文件,23,into,values,insert,类型
From: https://www.cnblogs.com/zhihuanzzh/p/16919112.html

相关文章