• 带你了解MySQL数据库(二)


    一、 字符编码与配置文件

    	\s 				查看数据库基本信息
    	show engines 	查看所有的存储引擎
    	char_length() 	统计字段数据长度
    	
    	以下是WIN版本
    		我们MySQL刚安装完 发现创建表记录的时候写入字符串Varchar 查看结果乱码
    		解决方法如下:
    			拷贝my-default.ini 					# windows下MySQL默认的配置文件
    			拷贝上述文件并且重命名my.ini			#(随机取名 看见一大堆英文不要慌)
    			由于5.6版本编码不统一 会造成乱码 我们需要统一修改>>>: Utf8
    			[mysqld]							# Mysqld 服务端 
    			    character-set-server=utf8		# 编码改成utf8  也可以utf8mb4(mb4表示可以显示表情包)
    			    collation-server=utf8_general_ci
    			[client]							# 客户端编码改成utf8
    			    default-character-set=utf8
    			[mysql]								# mysql客户端端编码改成utf8
    			    default-character-set=utf8
    			    user='root'						# 为了每次登录不需要输入密码
    			    passoword='123'					# 直接写入配置文件 输入mysql即可直接使用
    			注意如果配置文件涉及到mysqld相关的配置修改 那么需要重启服务端才可以生效
    
    	以下是MAC版本
    		我们MySQL刚安装完 默认是全部都有加载好的 不需要去配置文件
    		如果需要配置的话 只需要在 /etc/ 文件夹里面 创建一个文件后缀名cnf 内容跟以上win一样
    		(注意该文件权限不能太高 写完之后改成只读 文本里面不要有空格 重启mysql即可)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    二、 储存引擎

    		储存引擎我们可以理解成针对相同的数据采用不同的存取策略(show engines;)
    		比较重要的存储引擎
    			MyISAM
    				MySQL5.5及之前版本默认的存储引擎
    				存取数据的速度很快 但是功能较少 安全性较低
    			InnoDB
    				MySQL5.5之后版本默认引擎
    				存取数据的速度没有MyISAM快 但支持事务 行锁 外键等诸多功能 安全性较高
    			Memroy
    				基于内存的储存引擎 存取数据极快 但是断电立刻丢失(基于内存都是如此)
    			BlackHole
    				黑洞 任何写进去的数据都会立刻删除 类似于垃圾站
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    		ps:MySQL中默认是大小写不敏感的(忽略大小写)
    		# 不同存储引擎之间底层文件的区别
    		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;
    		ps:windows cmd终端鼠标右键的意思就是粘贴
    		
    		创建完表格之后每个表格都会产生的文件
    			InnoDB		IBD	表数据和索引的文件
    			MyISAM		SDI 表结构	MYD 表数据	MYI 表索引		
    			Memroy		SDI 表结构			# 断电丢失数据或者重启
    			BlackHole	SDI 表结构			# 放进去的数据立马丢失
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    三、 创建表的完成语法

    		create table 表名(字段名 字段类型(数字) 约束条件,)engine=存储引擎;
    						   id	int	0~255	 default		MyISAM			
    		
    		1.字段名和字段类型是必须的(至少写一个)
    		2.数字跟约束条件是可选的(可有可无)	# not _null  default	
    		3.约束条件可以写多个 空格隔开即可
    		4.最后一个字段的结尾千万不能加逗号		
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    四、 字段类型之整形

    在这里插入图片描述

    		1.验证整型是否自带负号
    			create table t6(id tinyint);
    		 	insert into t6 values(-129),(256);
    		 	ps:发现自动填写为两个边界值 数据失真 没有实际意义
    			上述所有的整型类型默认都会带有负号
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    		2.自定义移除负号
    			'''unsigned 约束条件之一 意思是不需要负号'''
    			create table t7(id tinyint unsigned);
    			insert into t7 values(-129),(256);
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    		插入的数据值超出了数据类型的范围 不应该让其插入并自动修改 没有意义
    		数据库应该直接报错(这个特性其实是有的 只是被我们改了>>>:配置文件)
    		
    		方式1:命令临时修改
    			set session sql_mode='strict_trans_tables'  当前客户端操作界面有效
    			set global sql_mode='STRICT_TRANS_TABLES'  服务端不重启永久有效
    		方式2:配置文件永久修改
    			[mysqld]
    				sql_mode='STRICT_TRANS_TABLES'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    五、 字段类型之浮点型

    在这里插入图片描述

    		float	double	decimal 三者都可以存储浮点型数据 但是各自的精确度不一致
    		
    		使用方法 float(255,14)	double(255,14)	decimal(65,14)
    		第一个数表示总共多少位 第二个数表示小数占多少位
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    		float < double < decimal  一般情况下float足够使用了
    		如果想追求非常完美的精确度 可以使用字符串来代替
    
    • 1
    • 2

    在这里插入图片描述

    六、 字段类型之字符型

    		char 定长
    			char(4)
    				最大只能存储四个字符 如果超过范围则直接报错
    				如果不超出范围 则用空格填充至四个字符
    		varchar	变长
    			varchar(4)
    		    	最大只能存储四个字符 如果超过范围则直接报错
    		        如果不超出范围 则有几位就存几位
    		
    		验证两者的区别	
    		create table t9(id int, name char(4));
    	 	create table t10(id int, name varchar(4));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    		1.结果验证 超出范围两者都会报错
    			注意sql_mode='strict_trans_tables'
    		2.验证定长和变长特性
    			char_length()  # 统计字段数据的长度
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    		默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格
    		然后在读取的时候又会自动将填充的空格移除 如果想取消该机制 需要sql_mode
    			set global sql_mode='strict_trans_tables,pad_char_to_full_length';
    		上述目录是替换 不是新增 所以之前的配置也要写上
    	
    		Char VS Varchar
    		Char 整存整取 速度快 浪费存储空间(不管你写多少个后面没写的给你填上空格)
    		Varchar 节省存储空间 存储数据的速度慢于Char(节省空间 但是不知道每一个数据原本有多长)
    		两者使用频率都很高 现在默认很多时候是varchar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    七、 数字的含义

    		数字大部分情况下都是用来限制字段的存储长度 但是整型除外
    		不是用来限制存储的长度 而是展示的长度
    
    		create table t13(id int(3)); 
    		create table t14(id int(3) zerofill);  
    		# zerofill 表示如果数据没有填写超过三位则以0补充支三位
    		
    		总结
    			以后涉及到整型字段的定义 类型后面不需要加括号写数字 除非有业务需求必须固定位数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    八、 字段类型之枚举与集合

    		枚举
    			多选一
    		    	eg:性别(男 女 其他)
    			create table t14(id int,name varchar(32),gender enum('male','female','others'));
    			# 只能选择里面的内容 如果是没有的则报错
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    		集合
    			多选多(包含多选一)
    			    eg:爱好(唱 跳 rap)
    			create table t16(id int,name varchar(32),hobbies set('read','run','music','rap'));
    			# 只能选择里面的内容 如果是没有的则报错 可以多选
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    九、 字段类型之日期类型

    		date		 年月日
    		datetime	 年月日时分秒
    		time		 时分秒
    		year		 年份
    		
    		create table t16(id int,name varchar(32),
    		 	taday date,
    		  	now_day datetime,
    		 	now_minute time,
    		 	now_year year
    		);
    		insert into t16 values(1,'LIke','2002-4-16','2002-04-16 22:43:11','22:44:11','2002');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    十、 字段约束条件

    		insert into 表名 vlaues()  # 默认按照创建表的字段顺序添加
    		insert into 表名(字段) vlaues()  # 可以自定义字段顺序
    		
    		1.unsigned	无负号
    			id int unsigned
    		2.zerofill	零填充
    			id int zerofill
    		3.not null	非空
    			name varchar(32) not null
    		4.default 	默认值
    			name varchar(32) default 'jason'
    		5.unique	唯一值
    			id int unique   单列唯一  # 只能出现一次 
    
    		create table t17(id int, host varchar(32),port int,unique(host,port));		联合唯一 # 两个结果只能出现一次
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请点点赞收藏+关注 谢谢支持 !!!

  • 相关阅读:
    「大厂必备」系列之Redis主从、持久化、哨兵
    kubernetes部署
    元服务那些事儿 | 舞刀解决隐私声明,斩断上架牵绊
    我的创作纪念日——365天
    【MM32F5270开发板试用】一、移植 TencentOS 到 PLUS-F5270
    关于过程改进和能力提升
    简单认识时间复杂度和空间复杂度
    基于windows、GDAL2.2.3版本和Java集成安装和使用GDAL库的方法
    STM32F4X UCOSIII 事件集
    C++报错信息:LNK2001:无法解析的外部符号 原因分析及解决方法
  • 原文地址:https://blog.csdn.net/MeiJin_/article/details/126350965