首页 > 数据库 >字符编码配置、MySQL字符类型和约束条件

字符编码配置、MySQL字符类型和约束条件

时间:2022-11-23 21:35:56浏览次数:50  
标签:约束条件 字符 insert into id values MySQL table create

  • 字符编码与配置文件

  • 数据库存储引擎

  • 创建表的完整语法

  • MySQL字段基本数据类型

  • MySQL字段常见约束条件

字符编码与配置文件

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

# 如果想要永久修改编码配置 需要操作配置文件
默认的配置文件是my-default.ini

步骤1:拷贝一份 my-default.ini 配置文件,并修改名称为my.ini

步骤2:清空 my.ini 文件内的内容
    
步骤3:添加固定配置信息
    [mysqld]
        character-set-server=utf8mb4
        collation-server=utf8mb4_general_ci
    [client]
        default-character-set=utf8mb4
    [mysql]
        default-character-set=utf8mb4
        
步骤4:保存并重启服务端就可以了
    net stop mysql
    net start mysql

    
ps:
    1.utf8mb4能够存储表情 功能更强大
    2.utf8与utf-8是有区别的 MySQL中只有utf8
修改了配置文件中关于[mysqld]的配置 需要重启服务端
"""
利用配置文件我们可以偷懒
	将管理员登录的账号密码直接写在配置文件中 之后使用mysql登录即可
	[mysql]
		user='root'
		password=123
"""

image

数据库存储引擎

# 存储引擎含义
	数据库针对数据采取的多种存取方式
    
# 查看常见的存储引擎方式
	show engines;
    
# 需要了解的引擎
	MyISAM
    	MySQL5.5之前默认的存储引擎
        存取数据的速度快 但是功能较少 安全性低
        
	InnoDB
    	MySQL5.5之后默认的存储引擎
        支持事务、行锁、外键等操作 存取速度没有MyISAM快 但是安全性更高
        
	Memory
    	基于内存存取数据 仅用于临时表数据存取
        
	BlackHole
    	任何写进去的数据都会立刻消失
        
了解不同存储引擎底层文件个数
    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.balckhole一个文件
        .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.最后一行结尾不能加逗号
ps:编写SQL语句报错之后不要慌 仔细查看提示 会很快解决 
    	near ')' at line 7

字段类型之整型

tinyint		1bytes		正负号(占1bit)
smallint	2bytes		正负号(占1bit)
int		4bytes		正负号(占1bit)
bigint		8bytes		正负号(占1bit)

# 注意事项
1、需要考虑正负数的问题, 如果需要存储负数则需要占一个比特位
2、手机号如果使用整型存储, 需要使用bigint才可以
"""
 工作小技巧:
   有时候看似需要使用数字类型存储的数据其实可能使用的是字符串、
     应为字符串可以解决不同语言对数字不精确的缺陷
"""

验证整型默认是否携带正负号
	create table t5(id tinyint);
	insert into t5 values(-129),(128);
结果是-128和127 也就意味着默认自带正负号
	
我们也可以取消正负号
	create table t6(id tinyint unsigned);
 	insert into t6 values(-129),(128),(1000);

image

严格模式

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

1.临时修改
	set session sql_mode='strict_trans_tables';
    	在当前客户端有效
 	set global sql_mode='strict_trans_tables';
    	在当前服务端有效
        
2.永久修改
	直接修改配置文件

字段类型之浮点型

float(255,30) 
double
decimal
上述浮点型从上往下精确度越来越高
float(m, d)	    4字节,单精度浮点型,m总个数,d小数位
float(255,30)   总共255位 小数位占30位

double(m, d)	8字节,双精度浮点型,m总个数,d小数位
double(255,30)  总共255位 小数位占30位

decimal(m, d)	decimal是存储为字符串的浮点数
decimal(65,30)  总共65位 小数位占30位

# 实操
create table t7(id float(255,30));
create table t8(id double(255,30));
create table t9(id decimal(65,30));

insert into t7 values(1.111111111111111);
insert into t8 values(1.111111111111111);
insert into t9 values(1.111111111111111);

"""
 使用范围:
   正常业务精确度只要小数点三四位的样子的时候,使用float就可以
   如果是科研业务,精确度要求极高,那么就使用decimal
"""
三者的核心区别在于精确度不同
	float<	double  < decimal

image

字段类型之字符类型

# 定长
char

char(4)  最多存储四个字符 超出就报错 不够四个空格填充至四个

# 变长
varchar

varchar(4) 最多存储四个字符 超出就报错 不够则有几位存几位

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

"""
 获取字段数据的长度
 char_length() 
 这个方法无法直接获取到定长的真实长度,因为MySQL在存数据的时候会自动填充空格在取数据的时候又会自动移除空格

想要让MySQL在取数据的时候不自动移除空格
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
"""

# 工作使用
char 
整存争取 速度快(就是会造成一定存储空间的浪费)
可能会造成黏包形式的现象
'''
 owenkevinmary tom
'''
varchar
 节省存储空间
 存取数据的速度没有char快
 '''
  varchar在存数据的时候会生成一个1bytes的报头 记录数据长度
  varchar在取数据的时候先会读取1bytes的报头 从中获取真实数据长度
 	  1bytes+owen1bytes+kevin1bytes+mary 1bytes+tom
  '''
"""
 两者都有使用场景
  针对统一中国人的姓名,应该采取 ————  varchar
  规模较小,数据量相对固定的字典 ———— char
  char与varchar的使用需要结合具体应用场景
  很多时候字段类型的选取和命名都会在邮件中标明
"""

数字的含义

字段类型括号内的数字大部分情况下是用来限制存储的长度
但在整型中并不是用来限制长度的,而是用来控制展示长度的

create table t12(id int(3)); # 不是用来限制长度
insert into t12 values(1111);

create table t13(id int(3) zerofill); # 而是用来控制展示的长度
insert into t13 values(1);  
insert into t13 values(1111); # 有几位展示几位
"""
  结论:
    涉及到整型字段 都无需自己定义长度 直接使用自带的
    针对其他类型的字段,则需要自己添加数字
"""

字段类型之枚举与集合

# 枚举
	多选一模式
    create table t15(
    id int,
    name varchar(32),
    gender enum('male','femle','others')
    );
    
    insert into t15 values(1,'tony','男'); # 报错
    insert into t15 values(2,'jason','male'); # 正确
'''
 插入数据的时候,正对gender只能填写提前定义好的数值
''' 

image

# 集合
	多选多(也可以多选一)
    create table t16(id int,name varchar(32);hobbies set('read','study','sleep'));
    
    insert into t16 values(1,'jason','read')
    insert into t16 values(2,'tony','study')
    insert into t16 values(3,'tom','read,study')

image

image

字段类型之日期类型

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:以后涉及到日期相关字段一般都是系统自动回去 无需我们可以操作

标签:约束条件,字符,insert,into,id,values,MySQL,table,create
From: https://www.cnblogs.com/super-xz/p/16920175.html

相关文章

  • Android Studio 连接 MySQL数据库
    1、下载MySQL-connector-jave.jar包地址如下:https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.46 2、将jar包移到如图所示的位置,然后右键addasl......
  • mysql关于优化设计模式与数据类型
    一、设计数据结构的字段数据类型基本原则是:1、更小的通常更好。就是尽量使用可以正确存储数据的最小数据类型,主要更小的数据类型可以更快,占用磁盘空间,内存和CPU缓存,处理周期......
  • 进入python的世界_day37_数据库——mysql字符编码配置、数据引擎配置、字段类型及语法
    一、字符编码与配置文件输入\s可以看到一些信息如果想要永久修改编码配置,可以在mysql的文件夹根目录下自己复制并改名一个my.ini去操作配置文件[mysqld]character-se......
  • mysql配置与mysql数据类型
    字符编码1.\s查看MySQL相关信息 当前用户、版本、编码、端口号MySQL5.6之前的版本编码需要人为统一之后版本已经全部默认统一如果想要永久修改编码配置需要操作配置......
  • Mysql密码策略
    一、查看当前密码策略showvariableslike'validate_password%'; 关于mysql密码策略相关参数validate_password.length固定密码的总长度;validate_password.......
  • linux命令风格与mysql启动
    Linux三种风格(Unix、BSD、GNU)下的ps的参数说明mysqld_safe是什么使用mysqld_safe启动mysql服务,mysqld_safe为mysqld的守护进程,在BSD风格的unix系统上,常用mysqld_safe脚......
  • Python基础之数据库:5、创建表的完整语法、MySQL数据类型
    一、创建表的完整语法1、创建表的语法createtable表名(​ 字段名1字段类型(数字)约束条件,​ 字段名2字段类型(数字)约束条件,​ 字段名3字段类型(数字)......
  • helm部署mysql
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos关于helm部署mysql如果您的kubernetes已有helm,那么部署mysql的......
  • docker-compose值mysql集群模式(MGR)
    一、之前也提过MGR的方式,局限很多,但是毕竟是集群的方式还是存在使用场景的。1、必须使用InnoDB2、每个表必须定义主键,主要用于事务冲突判断。3、必须使......
  • MySQL中用户和系统变量设置获取使用@和@@ global和session--笔记
    1、概述mysql有用户变量和系统变量,系统变量又分全局(global)和会话(session)查看set命令root@localhost:01:23[7308][(none)]>helpset;Name:'SET'Description:Syntax:......