mysql配置与mysql数据类型

字符编码

1.\s查看MySQL相关信息
	当前用户、版本、编码、端口号
MySQL5.6之前的版本编码需要人为统一 之后版本已经全部默认统一


如果想要永久修改编码配置需要操作配置文件
2.默认的配置文件是my-deafult.ini
	拷贝上述文件并重名命my.ini
    
配置文件:
	[mysqld]
        character-set-server=utf8mb4
        collation-server=utf8mb4_general_ci
    [client]
        default-character-set=utf8mb4
    [mysql]
        default-character-set=utf8mb4
        
        
1.utf8mb4能够存储表情 功能更强大
2.utf8与utf-8是有区别的 MySQL中只有utf8
修改了配置文件中的[mysqld]的配置 需要重启服务端才能生效

"""
利用配置文件我们可以偷懒
	将管理员登录的账号密码直接写在配置文件中 之后使用mysql登录即可
	[mysql]
		user='root'
		password=123
"""

数据库存储引擎

存储引擎:数据库针对数据采取的多种存取方式

查看常见存储引擎的方式
show engines;

image

四种存储引擎

  1. MyISAM
    MySQL5.6之气默认的存储引擎
    存取数据的数度快 但是功能少 安全性低
  2. InnoDB
    MySQL5.6之后默认的存储引擎
    支持事务,行锁,外键等操作 存取数度没有MyISAM快但是更安全
  3. memory
    基于内存的数据库,服务端重启数据则消失
  4. blackhole
    黑洞,无论存放什么数据,都会立刻丢失
了解不同存储引擎底层文件个数
create database d1;
show databases;
use d1;
create table t1(id int) engine = myisam
create table t2(id int) engine = innodb
create table t3(id int) engine = memory
create table t4(id int) engine = blackhole

image

1.myisam三个文件
	.frm		表结构
    .myd		表数据
    .myi		表索引
2.innodb两个文件
	.frm		表索引
    .ibd		表数据与表索引
3.memory一个文件
	.frm		表索引
4.blackhole一个文件
	.frm		表索引
    
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 valuse(1);


mysql默认忽略大小写

image

可以看出memory存储引擎再服务端重启后数据全部丢失

image

创建表的完整语法

create table 表名(
	字段 字段类型(数字) 约束条件,
	字段 字段类型(数字) 约束条件,
	字段 字段类型(数字) 约束条件
);
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件可以写多个 空格隔开即可
4.最后一个字段最后不能加逗号','

mysql报错不要慌 仔细查看提示 
near ')' at line 7 说明再第七行)左右出现了错误重点检查


字段类型之整型

tinyint			1bytes=8bit		正负号(占1bit)
		-128--127
    	0--255

smallint		2bytes			正负号(占1bit)	


int				4bytes			正负号(占1bit)	


bigint			8bytes			正负号(占1bit)	
默认所有整型都带正负号
验证整型默认是否携带正负号
	create table t5(id tinyint);
    insert into t5 values(-129),(128);
    结果是-128和127 也就意味着默认带正负号
也可以取消正负号

	create table t6(id tinyint unsigned);
    insert into t5 values(-129),(128);
    结果是0-128 意味着取消了正负号

严格模式

当我们在使用数据库存储数据的时候如果数据不符合规范 应该直接报错而不是擅自修改数据 这样会导致数据失真(没有实际意义)
	正常情况都应报错 之前修改配置文件时不小心修改了
查看严格模式
show variables lisk '%mode%';

image

临时修改
在当前客户端有效

set session sql_mode='strict_trans_tables';

image

在当前服务端有效

set global sql_mode='strict_trans_tables';

永久修改

修改配置文件
image

字段类型之浮点型

  1. 一般小数数据用这个即可,精度在小数点后7-8位
    float(20,10) 总共存储20位数 小数点后面占10位

  2. 一般很少用这个即可,精度在小数点后15-16位
    double(20,10) 总共存储20位数 小数点后面占10位

  3. 精度非常高,一般用于科学计算,精度要求很高的数据
    decimal(20,10) 总共存储20位数 小数点后面占10位

小数位超出则四舍五入

三者核心区别

float < double decimal
image

可以添加负数,修改为无符号后不允许添加

image

总长度必须大于等于小数位长度

image

总长度等于小数位长度,则整数位必须是(正负号0)然后添加小数位数即可

image

字段类型之字符类型

  1. char
    定长 char(4) 最多存储四个字符 超出就报错 不够四个默认空格填充到4个
  2. varchar
    不定长 varchar(4) 最多存储四个字符 超出就报错 不够有机位存几位

image

ps:char_length()获取字段存储的数据长度
默认情况下MySQL针对char的存储会自动填充空格和删除空格

set global sql_mode='strict_trans_tables,pad_char_to_full_length';



char VS varchar
    char
        优势:整存整取 速度快
        劣势:浪费存储空间
	 varchar
    	  优势:节省存储空间 
       	 劣势:存取数据的速度较char慢
jacktonyjasonkevintomjerry
1bytes+jack1bytes+tony1bytes+jason1bytes+kevin1bytes+tom1bytes+jerry
"""
char与varchar的使用需要结合具体应用场景
"""

数字的含义

数字在很多地方都是用来限制存储数据的长度但是在整型中数字却不是用来限制存储长度的

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);

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

image

字段类型之枚举与集合

枚举多选1

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');

字段类型之日期类型

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

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:以后涉及到日期相关字段一般都是系统自动回去 无需我们可以操作
posted @ 2022-11-23 21:01  clever-cat  阅读(41)  评论(0编辑  收藏  举报