MySQL(二)

上周内容回顾

  • 数据演变史

    文本文件    文件路径不一致,数据格式不一致
    目录规范    文件路径统一在db文件夹下,统一了json格式,但json格式中的键值对不同
    数据库软件   文件路径和数据格式完全统一
    
  • 数据库应用史

    本地数据库服务
    网络数据库服务
    
  • 数据库的本质

    数据库软件本质其实就是CS架构的应用程序
    
  • MySQL简介

    5.6X版本  使用频率最高的版本
    5.7X版本  最近在过渡的版本
    8.0X版本  最新版本
    
  • MySQL相关环境搭建

    1.环境变量
    2.系统服务
       mysqld --install
       mysqld --remove
       net start mysql
       net stop mysql
    
  • SQL与NoSQL

    数据库指定的操作数据库的唯一方式(语言)
    SQL:关系型数据库或者操作关系型数据库的语言
    NoSQL:非关系型数据库或者操作非关系型数据库的语言
    
  • 基本SQL语句

    create database db1;
    show databases;
    show create databases db1;
    alter database db1 charset='gbk';
    drop database db1;
    
    use db1;
    select database();
    create table t1(id int,name varchar(32));
    show create table t1;
    show tables;
    desc t1;
    alter table t1 rename ttt;
    drop table ttt;
    
    insert into t1 values();
    insert into t1 values(),(),();
    select * from t1;
    select id,name from t1;
    update t1 set name='jason' where id=1;
    delete from t1;
    delete from t1 where id>3;
    
    

今日内容概要

字符编码与配置文件

1.\s     # 查看数据库基本信息(用户、字符编码)

	由于5.6版本编码不统一, CHARSET=拉丁文,为了输入中文不会出现乱码的现象,我们需要修改编码,进行以下操作
	
2.my_default.ini  # windows下MYSQL默认的配置文件

我们不要直接在my_default.ini下去修改,而是最好拷贝上述文件并且命名为my.ini(只能改成这个名字)

由于5.6版本编码不统一,会造成乱码,我们需要统一修改>>>:utf8

添加字符编码相关的配置(百度查看即可)
-----------------------------------------------------------------------------
    [mysqld](服务端)
        character-set-server=utf8  (utf8b4>>>功能更强大,支持发表情包)
       collation-server=utf8_general_ci
    [client](其他语言的客户端)
        default-character-set=utf8
    [mysql](mysql的客户端)
        default-character-set=utf8
-----------------------------------------------------------------------------
注意:如果配置文件中涉及到了mysqld(服务端)相关的配置修改,那么需要重启服务端才能生效
		'''手动操作>>>:在cmd中输入services.msc,找到MySQL重新启动'''

ps:偷懒操作,在配置文件中的mysql下提前写好用户名和密码 之后直接mysql登录

image

image
image
image
image
image

知识小扩展:
image

存储引擎

我们可以简单地理解为存储引擎就是针对相同的数据采用的不同的存取策略

show  engines  # 查看所有的存储引擎

# 需要掌握的存储引擎

1.MyISAM
	MySQL5.5及之前版本默认的存储引擎
   	存取数据的速度非常快,但是功能较少,安全性较低
    
2.InnoDB(重中之重,5.6采用的存储引擎)
	MySQL5.5之后版本默认的存储引擎
   	存取数据的速度没有MyISAM快,但是支持事务、行锁、外键等诸多功能,安全性较高(图快没用,安全至上)
    
3.Memory
	基于'内存'的存储引擎
    存取数据速度极快,但是断电立刻丢失
    
4.BlackHole
	黑洞,任何写进去的数据都会立刻丢失,类似于垃圾站
-----------------------------------------------------------------------------
ps:MySQL中默认为大小写不敏感的(忽略大小写)    
  # 不同存储引擎之间底层文件的区别
create database db2;
use db2;
show tables;   # 创建表就其实就是在data文件夹下创建了库
create table t1(id int) engine=innodb
create table t2(id int) engine=innodb
create table t3(id int) engine=innodb
create table t4(id int) engine=innodb

ps:windows cmd终端 鼠标右键的意思就是粘贴
----------------------------------------------------------------------
不同的引擎出现的文件不一样
1.InoDB
	.frm   表结构
   .ibd   表数据、表索引(加快数据查询)

2.MyISAM  速度更快一点(每一个都是分开的,分工明确,所以就会更快点)
	.frm   表结构
   .MYD   表数据
	.MYI   表索引

3.Memory
	.frm   表结构
    
4.BlackHole  
	.frm   表结构

向表中插入数据:
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);

image

创建表的完整语法

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

字段类型之整型

都是用来存储整型的,但是数字范围不一样

1.tinyint          1bytes
2.smallint			  2bytes
3.int             4bytes
4.bigint           8bytes

ps:电话号码不用int类型,字节不够,可以用bigint或者varchar
------------------------------------------------------------------
1.验证整形是否自带负号()
	create table t6(id tinyint);
   insert into t6 values(-129),(256);
	ps:发现自动填写为两个边界值 数据失真 没有实际意义
     上述所有的整型类型默认都会带有负号
	
2.自定义移除负号
	"""unsigned  约束条件之一,意思是不需要负号"""
    create table t7(id tinyint unsigned);
    insert into t7 values(-129),(256);
"""
插入的数据值超出了数据类型的范围,不应该让其插入并自动修改,没有意义
数据库应该直接报错(这个特性原本是有的,只是被我们改了>>>:配置文件

方式一:采用命令的方式临时修改
	set session sql_mode='strict_trans_tables'  当前客户端操作界面有效(一旦退出就失效了)
	set global sql_mode='STRICT_TRANS_TABLES’  服务端不重启永久有效(重启就会加载配置文件。配置文件里面没有,就没办法修改)
方式二:配置文件永久修改
	[mysqld]
		sql_mode='STRICT_TRANS_TABLES'
"""

image
image
image
image
image
image

字段类型之浮点型

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

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

验证精确度问题
	create table t8(id float(255,30));
	create table t9(id double(255,30));
	create table t10(id decimal(65,30));
   insert into t8 values(1.11111111111111111111111111111); 
	insert into t9 values(1.11111111111111111111111111111);
	insert into t10 values(1.11111111111111111111111111111); 
    
    总结精确度大小:
		float < double < decimal
"""
一般情况下float足够使用了
如果想追求完美的精确度,可以使用字符串来代替
"""

image

字段类型之字符类型

	char     '定长'
    	char(4)
        最大只能存储四个字符,如果超过范围则直接报错
        如果不超出范围 则用空格填充至四个字符
   varchar   '变长'
		varchar(4)
			最大只能存储四个字符,如果超过范围则直接报错
			如果不超出范围 ,则有几位就存几位
 	验证两者的区别
		create table t11(id int, name char(4));
		create table t12(id int, name varchar(4));
        
    1.结果验证 超出范围两者都会报错
    	注意sql_mode='strict_trans_tables'
    2.验证定长和变长特性
    	char_length()  # 统计字段数据的长度
        select char_length(name) from t11;
    
   """
   默认情况下,char在存储的时候针对没有满足固定位数的字符会自动填充空格
   然后在读取的时候又会自动将填充的空格移除,如果想取消该机制 需要 sql_mode
   			set global sql_mode='strict_trans_tables,pad_char_to_full_length';
   	上述命令是替换 不是新增  所以之前的配置也要写上 
        pad_char_to_full_lenth 意思是让他不要自动处理空格
   	
   """
	3.char 与 varchar
    	char 
        优点:整存整取,速度快
            
        缺点:浪费存储空间
       varchar:
		  有点:节省存储空间
            
		  缺点:存取数据的速度慢于char
            
     """
     char(4)
     	a son jacktom lili
     varchar(4)
     	1bytes+a1bytes+son1bytes+jack1bytes+tom1bytes+lili
     """
            
     存储人的姓名>>>:varchar更合适
        
        
     结论:两者使用频率都很高,现在默认很多时候是varchar
    

image

数字的含义

数字大部分情况下都是用来限制字段的存储长度  但是整型除外!!!
	数字不是用来限制存储的长度,而是展示的长度(所以整型后面的数字加或不加没什么太大的区别)
    
	create table t13(id int(3));
	create table t14(id int(3) zerofill);
	
    总结:以后涉及到整型字段的定义,类型后面不需要加括号写数字,除非有业务需求必须固定位数
      eg:
         00000000013
			00123123031

字段类型之枚举与集合

枚举
	多选一
    	eg:性别(男 女 其他)
create table t15(
	id int,
 	name varchar(32),
	gender enum('male','female','others')
);

集合
	多选多(包含多选一)
    	eg:(唱 跳 rap)
create table t16(
	id int,
	name varchar(32),
	hobbies set('read','run','music','rap')
);            
 

字段类型之日期类型

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

create table t17(
	id int,
   name varcchar(32),
   birth data,
   reg_time datatime,
   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 表名 values()      # 默认按照创建表的字段顺序添加
insert into 表名(表名) values()  # 可以自定义字段顺序
"""
1.unsigned  无负号
	id int unsigned
    
2.zerofill  零填充
	id int zerofill
    
3.not null  非空
	name varchar(32) not null
	(传值的时候可以传一个空字符串)
    
4.default  默认值
	id int default 123
    
5.unique  唯一值
	id int unique     单列唯一
 	host varchar(32)
	port int
	unique(host,post)  联合唯一
posted @ 2022-08-15 19:39  W-Y-N  阅读(35)  评论(0)    收藏  举报