首页 > 数据库 >【2022-08-15】mysql基础知识(二)

【2022-08-15】mysql基础知识(二)

时间:2022-08-15 20:59:00浏览次数:48  
标签:存储 15 int 08 id 2022 into table create

mysql基础知识(二)

字符编码与配置文件

  • windows系统下查看mysql的版本信息:\s

  • 由于5.6版本编码不统一,会导致乱码的情况出现,所以统一修改编码格式为>>>:utf8

  • my-default.ini配置文件

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

  • 步骤2:清空my.ini文件内的内容

  • 步骤3:添加固定的配置信息即可

  • 步骤4:保存并重启服务端即可生效

  • 配置信息如下:

[mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
[client]
    default-character-set=utf8
[mysql]
    default-character-set=utf8  
    
如果配置文件涉及到了mysqld相关的配置修改 那么需要重启服务端才可以生效

存储引擎

  • 存储引擎:就是针对相同的数据采用的不同的存储策略
  • 查看mysql所有的存储引擎
show engines;          查看所有的存储引擎

  • MyISAM

    mysql5.5之前版本默认的存储引擎,特点是存储数据速度快,功能较少,安全性较低

  • InnoDB

    mysql5.5之后版本默认的存储引擎,存储数据速度没有MyISAM快,但是支持事物、行锁、外键等诸多功能,安全性较高

  • Memory

    基于内存的存储引擎,存取速度极快,但是断电数据就会立刻丢失

  • BlackHole

    黑洞引擎,任何写进去的数据都会立刻丢失,类似于垃圾回收

  • 不同存储引擎之间底层文件的区别

创建四张不同的表,指定不同的存储引擎:

create table test1(id int) engine=innodb;
create table test2(id int) engine=myisam;
create table test3(id int) engine=memory;
create table test4(id int) engine=blackhole;




查看四张表的存储引擎:

show create table test1;
show create table test2;
show create table test3;
show create table test4;



Innodb
	.frm		表结构
	.ibd		表数据、表索引(加快数据查询)
MyISAM
	.frm		表结构
 	.MYD		表数据
 	.MYI		表索引(加快数据查询)
Memory
	.frm		表结构
BlackHole
	.frm    	表结构
	
验证上述条件是否成立:

insert into test1 values(1);
insert into test2 values(2);
insert into test3 values(3);
insert into test4 values(4);



创建表的完整语法

create table 表名(
字段名1 字段类型(数字) 约束条件,
字段名2 字段类型(数字) 约束条件,
字段名3 字段类型(数字) 约束条件
)engine=存储引擎;

1.字段名和字段类型是必须的(至少写一个)
2.数字跟约束条件是可选的(可有可无)
3.约束条件可以写多个,空格隔开即可
4.最后一个字段的结尾千万不能加逗号

字段类型之整型

整型分为四种类型:

tinyint				1bytes
smallint9			2bytes
int				    4bytes
bigint				8bytes


验证整型是否自带负号

        create table test5(id tinyint);

        desc test5

        insert into test5 values(-129),(256);

验证结果:
		发现默认自带负号,并且会自动填写为两个边界值,数据失帧,没有实际意义
		上述所有的整型类型默认都会带有负号



		
解决方法:自定义移除负号

		"""unsigned 约束条件之一,意思是不需要负号"""
		create table test6(id tinyint unsigned);
		insert into test6 values(-129),(256);
		
"""
插入的数据值超出了数据类型的范围,不应该让其插入并自动修改,没有意义
数据库应该直接报错,在配置文件中可以进行修改

修改方式一:命令行临时进行修改,重启后失效

		set session sql_mode='strict_trans_tables'   当前客户端操作界面有效
		set global sql_mode='strict_trans_tables'    服务端不重启永久有效




修改方式二:修改配置文件,永久生效

		[mysqld]
			sql_mode='STRICT_TRANS_TABLES'
			
"""

				
	

字段类型之浮点型

浮点型分为三种类型:

float
double
decimal

三者都可以存储浮点型数据,但是各自的精确度不一致

使用方式:第一个数表示总共多少位 第二个数表示小数占多少位
		float(255,60)
		double(255,70)
		decimal(65,30)

验证精确度问题:
		create table test7(id float(255,60));
		create table test8(id double(255,70));
		create table test9(id decimal(65,30));
		insert into test7 values(1.11111111111);
		insert into test8 values(1.11111111111);
		insert into test9 values(1.11111111111);
		
验证结果:
		float < double < decimal
		
"""
一般情况下float足够使用了
如果想追求非常完美的精确度 可以使用字符串来代替
"""


字段类型之字符类型

字符类型有两种:

char
varchar
区别在于一个是定长,一个是变长

char(n):定长;最大只能存储n个字符,超出范围则报错,不够则空格填充至n个

varchar(n):变长;最大只能存储四个字符,超出范围则报错 不够则有几个存几个


验证两者的区别:
			create table test10(id int,name char(4));
			create table test11(id int,name varchar(4));



			
1.结果验证 超出范围两者都会报错
	注意sql_mode='strict_trans_tables'
	
2.验证定长和变长的特性
	char_length()    统计字段数据的长度
	
"""
默认情况下char在存储的时候针对没有满足固定位数的字符会自动填充空格
然后在读取的时候又会自动将填充的空格移除 如果想取消该机制需要sql_mode
	set global sql_mode='strict_trans_tables,pad_char_to_full_length';
上述目录是替换 不是新增 所以之前的配置也要写上
"""
				
两者的优缺点:
        char:
            整存整取 速度快
            浪费存储空间
            
        varchar:
            节省存储空间
            存取数据的速度慢于char
            存取数据都需要操作报头(耗时)
            
两者使用频率都很高 现在默认很多时候是varchar

数字的含义

字段后的数字大部分情况下都是用来限制字段的存储长度 
但是在整型中,不是用来限制存储的长度,而是展示的长度

create table test12(id int(3)); 
create table test13(id int(3) zerofill);       # zerofill约束条件之一,它的意思就是,如果你的位数不够,那就用零填充

总结
	以后涉及到整型字段的定义 类型后面不需要加括号写数字 除非有业务需求必须固定位数
    eg:
    	00000000013
    	00123123031

字段类型之枚举与集合

枚举
	多选一
	
create table test14(
	id int,
	name varchar(32),
	gender enum('male','female','others')
);

desc test14;




集合
	多选多(也可以多选一)
	
create table test15(
	id int,
	name varchar(32),
	hobbies set('read','run','music','rap')
);

desc test15;

字段类型之日期类型

data			年月日
datetime		年月日时分秒
time			时分秒
year			年份


create table test17(
	id int,
	name varchar(32),
	birthday date,
	reg_time datetime,
	study_time time,
	join_time year	
);

insert into t17 values(1,'jason','2022-11-11','2000-11-11 11:11:11','11:11:11','1995');


字段约束条件

"""
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   单列唯一
 	
 	host varchar(32)
 	port int		
	unique(host,port)  联合唯一

标签:存储,15,int,08,id,2022,into,table,create
From: https://www.cnblogs.com/dy12138/p/16589588.html

相关文章

  • 2022杭电多校第八场1、7、5
    1001Theramore观察以下两种情况:以0为例,上图就是说,只要有两个连续的0,我们就可以一直把它们往前移动直到移动到首位。同理只要有两个连续的1我们就可以把它们移动到尾部......
  • 2022牛客暑假第七场C、F、J、K
    C-ConstructiveProblemsNeverDie_"蔚来杯"2022牛客暑期多校训练营7(nowcoder.com)容易知道,只要A中的数不是全部相同,就一定有解。我们思考如何构造:如果A中的数是一......
  • 2022-08-15 第四小组 王星苹 学习笔记
    学习心得       开始MySQL数据库的学习,创建库,再创建表,在表中保存多条数据,一列就是一个字段,也可以增删改查心情 又新学个新东西,新起点,出发加油掌握情况:背......
  • 8.15
    A.begin一道显而易见的结论题因为\(a^2+b^2\leq(a+b)^2\),所以排个序,算一下(1,2),(i,i-2)···(n-1,n)的路长的和,即得答案ACCode#include<bits/stdc++.h>usingnamespace......
  • 2022/8/15 总结
    题单贴贴A.Begin这是道结论题。但令人惊奇的是我完全没往这方面想用奇怪的策略做居然得到了\(\mathtt{80pts}\);Solution观察样例,再结合一点数学知识,我们可以知道......
  • 2022-08-15第七组薛雯匀
    Mysql数据库数据库数据库【按照数据结构来组织、存储和管理数据的仓库】。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据对于公司......
  • 2022 8-15 第四组 曹雨 MySQL数据库01
    MySQLMySQl是一个“关系型数据库管理系统”。MySQL使用了一种语言“SQL语言”MySQL分为社区版和商业版,体积小,速度快,成本低,开源以表的形式存取数据基本操作MySQL操......
  • UPC2022暑期个人训练赛第36场
    多谢两位大佬的帮助,才能勉强完成几个题,这几个题还是挺有意思的问题A:WJ的逃离DFS超时,所以考虑BFS,记得上次炸僵尸也是这个教训,这次忘记了感谢sgjen大佬提供的帮......
  • 20220815 随笔
    昨天是个好日子,我们大部分时间都在宿舍里度过。前一天晚上我们睡得太晚了,所以昨天我们也起得很晚。早上没吃饭,中午和晚上点了外卖。我觉得外卖烤肉饭很好吃,只是酱汁有点......
  • 20220815 第一组 于芮 mysql数据库第一天(第三十一天)
     小白成长记——第三十一天   今天我们告别了java基础,开始了新的旅程——mysql数据库,之前有接触过一点mysql数据库,所以有一点点的基础,对于今天新学的内容,没有那么......