MySQL字段类型


今日内容

字符编码与配置文件

查看数据库基本信息(用户 字符编码)
	/s
windows下MySQL默认的配置文件(苹果本不一样)
	my-default.int
	拷贝上述文件并且重命名为my.ini
由于5.6版本编码不统一 会照成乱码现象 我们需要统一修改成>>>:utf8

image-20220815184450049

添加字符编码相关的配置(百度查看即可)

[mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
[client]
    default-character-set=utf8
[mysql]
    default-character-set=utf8 
"""
注意如果配置文件涉及到了mysqld相关的配置修改 那么需要重启服务端才可以生效
"""
ps:偷懒操作 在配置文件中的mysql下提前写好用户名和密码 之后直接mysql登录

存储引擎

我们可以简单的理解为储存引擎就是针对相同的数据采取不同的存取策略

一、需要掌握的存储引擎

"""
show engines  查看所有引擎
"""
1.MyISAM
	MySQL5.5及之前默认的储存引擎
	存取数据的速度非常快 但是功能比较少 安全性较低
2.InnoDB
	MySQL5.5之后版本默认的存储引擎
	存取数据的速度没有MyISAM快 但是支持事务 行锁 外键等诸多功能
3.Memory
	基于内存的存储引擎 存取速度极快 但是断电就会丢失
4.BlackHoole
	黑洞 任何写进去的数据都会立刻消失 类似于垃圾站

二、不同存储引擎之间底层文件的区别

"""
补充小知识:
			windows cmd终端鼠标右键的意思就是粘贴
"""

1.myisam

create table d1(id int) engine=myisam;
	.frm	表结构
 	.MYD	表数据
 	.MYI	表索引(加快数据查询)

image-20220815161712614

2.innodb

create table d2(id int) engine=innodb;
	.frm	表结构
 	.ibd	表数据、表索引(加快数据查询)

image-20220815162458329

3.memory

create table d3(id int) engine=memory;
	.frm	表结构

image-20220815162836143

4.blackhole

create table d4(id int) engine=balckhole;
	.frm	表结构

image-20220815163319059

创建表的完整语法

create table 表名(
	字段名1 字段类型(数字) 约束条件,
	字段名2 字段类型(数字) 约束条件,
	字段名3 字段类型(数字) 约束条件
)engine=存储引擎;
1.字段名和字段类型是必须的(至少写一个)
2.数字跟约束条件是可选的(可有可无)
3.约束条件可以写多个 空格隔开即可
4.最后一个字段的结尾千万不能加逗号 加了逗号则会报错
eg:
    create table d5(
        id int not null,
        name varchar(32),
        pwd int          
    ) engine=myisam;
    

image-20220815170844888

容易出错的地方

image-20220815171329168

字段类型之整型

一、取值范围

整型类型 字节 有符号数取值范围 没有符号数取值范围
tinyint 1bytes -128-127 0-255
smallint 2bytes -32768-32767 0-65535
int 4bytes -2147483648-2147483647 04294967295
bigint 8bytes -9223372036854775808-9223372036854775807 0-18446744073709551615

二、验证整型是否自带符号

create table d6(id tinyint);
insert into d6 values(-129),(256);
"""
ps:发现会自动填写为两个边界值 数据失真 没有实际意义
上述所有的整型类型默认都会带有符号
"""

image-20220815173259814

三、自定义移除符号

unsigned 约束条件之一 意思是不需要符号
eg:
	create table d7(id tinyint unsigned);
	insert into d7 values(-129),(256);

image-20220815173859220

插入的数据值超出了数据类型的范围 不应该让其插入并自动修改 没有意义
数据库应该直接报错(这个特性其实是有的 只是被我们改了>>>:配置文件)

方式一、

命令临时修改

set session sql_mode='strict_trans_tables'
	当前客户端操作界面有效
set global sql_mode='STRICT_TRANS_TABLES'
	服务端不重启永久有效

方式二、配置文件永久修改

[mysqld]
	sql_mode='STRICT_TRANS_TABLES'

字段类型之浮点型

1.float
2.doule
3.decimal
三者都可存储浮点型数据 但是各自的精确度不一致

使用方式

1.float(255,30)
2.double(255,30)
3.decimal(255,30)
第一个数表示总共多少位 第二个数表示小数占多少位

验证精确度问题

create table d8(id float(255,30));
create table d9(id double(255,30));
create table d10(id decimal(65,30));


insert into d8 values(1.11111111111111111111111111);
insert into d9 values(1.11111111111111111111111111);
insert into d10 values(1.11111111111111111111111111);

image-20220815180020643

得出结论:float < double < decimal

一般情况下float足够使用了

想追求非常完美的精确度 可以使用字符串来代替

字段类型之字符类型

1.char			定长
char(4)
	最大只能存储四个字符 如果超过范围则直接报错
	如果不超出范围 则用空格填充至四个字符

2.varchar		变长
varchar(4)
	最大只能存储四个字符 如果超过范围则直接报错
	如果不超出范围 则用空格填充至四个字符	

验证两者的区别

create table d11(id int,name char(4));
create table d12(id int,name varchar(4));

insert into d11 values(1,'jason');
insert into d12 values(1,'jason');

image-20220815193813132

结果验证 超出范围两者都会报错

需要注意配置文件里的sql_mode=’strict_trans_tables’

如果配置里没有就不会报错

验证定长和变长

默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格

image-20220815195558020

然后在读取的时候又会自动将填充的空格移除 如果想取消该机制 需要sql_mode

  set global sql_mode=’strict_trans_tables,pad_char_to_full_length’;

image-20220815200222049

char与varchar优缺点

1.char
	优点:整存整取 速度快
	缺点:浪费存储空间
  
2.varchar
	优点:节省存储空间
	缺点:存取数据的速度慢于char
"""
char(4)
	a son jack
	不会出现黏包现象
	
varchar(4)
	ason jack
	可能会出现黏包 存取数据都需要操作报头(耗时)
"""
两者需要分应用场景
两者使用频率都很高 现在默认很多时候是varchar

数据的含义

数字大部分情况下都是用来限制字段的存储长度 但是整型除外!!!
不是用来限制存储的长度 而是展示的长度

create table d13(id int(3));
create table d14(id int(6) zerofill);

image-20220815201939879

字符类型之枚举与集合

一、枚举 多选一

案例

性别(男 女 其他)
	create table d15(id int,name varchar(32),gender enum('male','female','others'));

image-20220815213551085

二、集合 多选多(包含多选一)

案例

爱好(唱 跳 rap)
	create table d16(id int,name varchar(32),bobbies set('read','run','music','rap'));

image-20220815214039198

字段类型之日期类型

1.date 年月日
2.datetime 年月日时分秒
3.time 时分秒
4.year 年份

使用

create table d17(id int,name varchar(32),birth date,reg_time datetime,study_time time,join_time year);

insert into d17 values(1,'jason','2000-8-15','2022-8-15 11:11:11','11:11:11','1995');

字段约束条件

一、语法结构

1.默认按照创建表的字段顺序添加
	insert into 表名 values()
2.可以自定义字段顺序
	insert into 表名 values()

二、字段约束条件关键字

1.unsigned 无符号

作用:是整型范围无符号
eg:
	create table d18(id int unsigned);

2.zerofill 零填充

作用:不够位数使用0来填充
eg:
	create table d19(id int(6) unsigned zerofill);
	insert into d19 values(19);

image-20220815212325030

3.not null 非空(不能为空)

create table d20(id int,name varchar(32) not null);
insert into d20 values(id) values(1);

image-20220815212106100

4.default 默认值

create table d21(id int,name varchar(32) default 'jason');
insert into d21 values(1,'joker');
insert into d21(id) values(2);

image-20220815204419149

5.uniqeu 唯一值

uniqeu分单列和联合

​ 5.1.单列唯一

create table d22(id int,name vachar(32) unique);
insert into d22 values(1,'jason');

image-20220815205251784

​ 5.2.联合唯一

create table d23(id int,host varchar(32),port int, unique(host,port));
insert into d23 values(1,'127.0.0.1','8080');

image-20220815210423597

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/280784.html

(0)
上一篇 2022年8月16日
下一篇 2022年8月16日

相关推荐

发表回复

登录后才能评论