MySQL字段类型
作者:互联网
今日内容
字符编码与配置文件
查看数据库基本信息(用户 字符编码)
\s
windows下MySQL默认的配置文件(苹果本不一样)
my-default.int
拷贝上述文件并且重命名为my.ini
由于5.6版本编码不统一 会照成乱码现象 我们需要统一修改成>>>:utf8
添加字符编码相关的配置(百度查看即可)
[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 表索引(加快数据查询)
2.innodb
create table d2(id int) engine=innodb;
.frm 表结构
.ibd 表数据、表索引(加快数据查询)
3.memory
create table d3(id int) engine=memory;
.frm 表结构
4.blackhole
create table d4(id int) engine=balckhole;
.frm 表结构
创建表的完整语法
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;
容易出错的地方
字段类型之整型
一、取值范围
整型类型 | 字节 | 有符号数取值范围 | 没有符号数取值范围 |
---|---|---|---|
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:发现会自动填写为两个边界值 数据失真 没有实际意义
上述所有的整型类型默认都会带有符号
"""
三、自定义移除符号
unsigned 约束条件之一 意思是不需要符号
eg:
create table d7(id tinyint unsigned);
insert into d7 values(-129),(256);
插入的数据值超出了数据类型的范围 不应该让其插入并自动修改 没有意义
数据库应该直接报错(这个特性其实是有的 只是被我们改了>>>:配置文件)
方式一、
命令临时修改
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);
得出结论: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');
结果验证 超出范围两者都会报错
需要注意配置文件里的sql_mode='strict_trans_tables'
如果配置里没有就不会报错
验证定长和变长
默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格
然后在读取的时候又会自动将填充的空格移除 如果想取消该机制 需要sql_mode
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
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);
字符类型之枚举与集合
一、枚举 多选一
案例
性别(男 女 其他)
create table d15(id int,name varchar(32),gender enum('male','female','others'));
二、集合 多选多(包含多选一)
案例
爱好(唱 跳 rap)
create table d16(id int,name varchar(32),bobbies set('read','run','music','rap'));
字段类型之日期类型
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);
3.not null 非空(不能为空)
create table d20(id int,name varchar(32) not null);
insert into d20 values(id) values(1);
4.default 默认值
create table d21(id int,name varchar(32) default 'jason');
insert into d21 values(1,'joker');
insert into d21(id) values(2);
5.uniqeu 唯一值
uniqeu分单列和联合
5.1.单列唯一
create table d22(id int,name vachar(32) unique);
insert into d22 values(1,'jason');
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');
标签:int,create,into,字段,values,MySQL,类型,table,id 来源: https://www.cnblogs.com/lisony/p/16589808.html