MYSQL字段类型与操作
字符编码与配置文件
操作 | 代码 | 功能 |
---|---|---|
查看 | \s | 查看数据库基本信息(用户、字符编码) |
配置(配置文件层面) | my-default.ini | windows下MySQL默认的配置文件 |
修改配置(配置文件层面) | my.ini | 必须带my.ini才会被mysql系统识别并读取 |
添加服务端字符编码(配置文件层面) | [mysqld]\n character-set-server=utf8(字符编码即可)\n collation-server=utf8_general_ci | 修改mysql服务端默认的字符编码,我们需要重新启动我们默认自启的服务端 |
添加客户端字符编码(配置文件层面) | [client]\n default-charcter-set=utf8 | 修改mysql客户端默认的字符编码,我们只需要重新登录我们的客户端即可 |
添加mysql的字符编码(配置文件层面) | [mysql]\n default-character-set=utf8 | 修改mysql的字符编码,我们需要重新登陆 |
偷懒操作 | -uroot -pxxx | 将我们的用户名和密码写入配置文件那么就不需要一直自己登录操作,但是我们要注意好自己的电脑不会被他人操作再进行修改 |
存储引擎
名称 | 代码 | 结构 | 作用 |
---|---|---|---|
MyISAM | cerate table 表名(字段名 字段类型) engine=myisam; | .frm 表结构 .MYD 表数据 .MYI 表索引(加速数据的查询) | MySQL5.5及之前版本默认的存储引擎,存取数据的数据较快,但是功能很少,安全性较低 |
InnoDB | cerate table 表名(字段名 字段类型) engine=innodb; | .frm 表结构 .idb 表数据,表索引(加速数据的查询) | MySQL5.5之后版本默认的存储引擎,存取速度没有MyISAM快但是支持十五,行锁,外键等诸多功能,并且安全性较高 |
Memory | cerate table 表名(字段名 字段类型) engine=menory; | .frm 表结构 | 基于内存工作的存储引擎,存取速度极快,但是断电数据立即丢失无法保存 |
BlackHole | cerate table 表名(字段名 字段类型) engine=blackhole; | .frm 表结构 | 黑洞,无论写入什么数据都会立即丢失,类似垃圾回收站,但是这个垃圾回收站有点bug空间无限 |
展示 | insert into 表名 values(1); | 展示引擎效果 | |
CV | 右键点击 | 粘贴 | 在windows cmd终端中鼠标右键的意思就是粘贴 |
查看 | show engines; | 查看所有的存储引擎 |
创建表的完整语法
-
语法
cerate table 表名( 字段名1 字段类型(数字)约束条件 字段名2 字段类型(数字) 约束条件 字段名3 字段类型(数字)约束条件 )engine=存储引擎;
-
补充
- 字段名和字段类型是必须的(至少写一个)
- 数字和约束条件是可选的(可有可无)
- 约束条件可以写多个 只需要空格空开即可
- 最后一个字段的结尾千万不能加逗号,加逗号就会报错,粗心的话那么就会一致发现不了这个小错误
字段类型之整型
- 类型展示
类型 | 字节 | 有符号 | 没有负号 |
---|---|---|---|
tinyint | 1 bytes | -128~127 | 0~255 |
smallint | 2 bytes | -32768~13267 | 65535 |
mediumint | 3 bytes | -8388608~8388607 | 16777215 |
int | 4 bytes | -2147483648~2147483647 | 4294967295 |
bigint | 8 bytes | -263~(263)-1 | (2^64)-1 |
-
验证整型是否自带负号
cerate table 表名(字段名 tinyint); insert into 表名 values(-129),(256); 发现自动填写为两个边界值,数据失真久没有任何意义了 上述所有类型默认都会带有负号
-
自定义移除负号
""" unsigned 约束条件之一 意思是不需要负号 """ create table 表名(字段名 tinyint unsigned); insert into 表名 values(-129),(256);
-
修改文件
插入的数据值超出了数据类型的范围 不应该让其插入并自动修改 没有任何意义 数据库应该直接报错(这个特性其实应该是有的但是我们做配置文件的时候被我们修改了) 方式一: set session sql_mode='strict_trans)tables' 当前客户端操作界面有效 set global sql_mode='STRICT_TRANS_TABLES' 服务器不重启那么就永久有效 方法二: [mysqld] sql_mode='STRICT_TRANS_TABLES' 其实和上方编写配置文件的的一样,只是将我们需要一直写的东西直接写入了就不需要我们自己去输入了
字段类型之浮点型号
类型 | 使用区间 | 精确度问题 | 展示 |
---|---|---|---|
float | (255,30) | create table 表名(id float(255,30)); | insert into 表名 values(1.222222222222222222222222222222) |
double | (255,30) | cerate table 表名(id double(255,30)); | insert into 表名 values(1.222222222222222222222222222222) |
decimal | (65,30) | cerate table 表名(id decimal(65,30)); | insert into 表名 values(1.222222222222222222222222222222) |
-
排序 float < double < decimal
-
我们一般使用浮点型的时候使用float就足够使用了,如果想要你输多少就出多少的话那么就直接使用字符串类型就可以了
字段类型之字符类型
- 类型
类型 | 存储方式 | 存储范围 | 作用 |
---|---|---|---|
char | char(4) | 固定存储四个字符 | 如果存储不够四个字符那么就会使用空格来填充,如果超过那么不好意思报错 |
varchar | varchar(4) | 最大存储四个字符 | 如果存储不够四个字符那么不会改变默认在前面加一个bytes来区分你所存储的数据,如果朝贡四个那么就会直接报错,毫不犹豫 |
-
验证区别
1.验证二者的区别 char方法: cerate table 表名(字段名 字段类型,name char(4)) varchar方法: cerate table 表名(字段名 字段类型,name varchar(4)) 2.验证结果 二者都是只要超出范围都会报错,注意sql_mode='strict_trans_tables' 3.验证长短特性 char_length() # 查看字段数据的长度,类似python中的len() """ 在默认的情况下我们在存储的时候如果没有填充满足固定位数的字符那么系统就会自动默认帮我们填充空格,然后我们在读取的时候只要检查到空格那么就会自动帮我们做删除然后就会帮我们读出我们想要的数据,而在存取varchar的时候存入会自动帮我们加入一个分开的字节以方便我们取出的时候发生错乱现象 我们要是想要取消上方删减空格的操作可以使用 sql_mode set global sql_mode='strict_trans_tables,pad_char_to_full_length' 将上方代码写入我们之前写的那个配置文件中 """
-
应用范围
char cahr(4) a b c lili jsonboy zeay 整存整取 速度较快但是有点浪费内存空间,因为需要空格去给他填充 varchar varchar(4) 1bytes+a1bytes+b1bytes+c1bytes+lili+1bytesjson+1bytesboy+1byteszeay 存取的时候都需要制作报头,相较于char来说就比较节省内存空间,所以存储数据的速度就较慢于char """ 现在两者的使用频率都很高,之前默认使用的是char但是现在较多是默认使用carchar因为比较节省空间 """
数字的含义
数字大部分呢情况下都是用来限制字段的存储长度,但是整型除外,不是用来限制存储的长度你有多少他给你存多少但是到展示的时候他就只会给你展示你所标注数字的长度
cerate table 表名(字段名 int(3));
cerate table 表名(字段名 int(3) zerofill);
总结
也就是说以后只要是设计整形字段的定义那么子啊类型后面不需要加括号和写数字,除非有业务需求必须固定位数
0000000013
0052856123
字段类型之枚举与集合
enum枚举类型是一种可以在事先定义好(枚举出来)的各个可取值中选择一个的数据类型,其定义方法时使用enum(枚举值1,枚举值2,枚举值3....)来定义此种类型后,将对有关字段(变量)的取值范围进行了限定,只能取个枚举值中的某一个,否则报错,一个枚举类型数据最多可以拥有65535个枚举项,其允许的取值为字符串枚举内的内容
枚举 多选一:
例如:性别(生理男性,生理女性,其他)
create table 表名(
字段名 int,
name varchar(32),
gender enum('male','female','others')
);
集合 多选多(也包括多选一):
例如:hobby('sing','jump','rap','basketball')
cerate table 表名(
字段名 int,
name varchar(32),
hobbyies set('sing','jump','rap','basketball')
);
字段类型之日期类型
代码 | 时间 |
---|---|
date | 年月日 |
datetime | 年月日时分秒 |
time | 时分秒 |
year | 年份 |
- 时间展示
eleate now():现在时间
create table 表名(
字段名 int,
name varchar(32),
birth date,
reg_time datetime,
study_time time,
join_time year
);
insert into 表名 values('2022-12-24','2021-4-29-12-24-32','12-24-32','2001');
字段约束条件
条件 | 代码 | 功能 |
---|---|---|
unsigned | id int unsigned | 无负号 |
zerofill | id int zerofill | 零填充 |
not null | name varchar(32) not null | 非空 |
default | name varchar(32) default 'joseph' | 默认值 |
unique | id int unique | 唯一值 |
unique | host varchar()32 port int unique(host,port) | 联合唯一 |
insert into 表名 vlaues() | 默认按照创建表的字段顺序添加 | |
insert into 表名(字段) vlaues() | 可以自定义字段顺序 |