数据库进阶操作

数据库进阶操作

今日内容概要

  • 字符编码与配置文件
  • 数据库存储引擎
  • 创建表的完整语法
  • 字段类型之整型
  • 严格模式
  • 字段类型之浮点型
  • 字段类型之字符类型
  • 数字的含义
  • 字段类型之枚举与集合
  • 字段类型之日期类型

今日内容详细

字符编码与配置文件

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

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

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

数据库存储引擎

存储引擎
	数据库好着呢的数据采取的多种存取方式
    
查看常见存储引擎的方式
	show engines;
    
需要了解的四个存储引擎
	MyISAM
    	MySQL5.5之前默认的存储引擎
        存取数据的速度快 但是功能较少 安全性较低
        
    InnoDB
    	MySQL5.5之后默认的存储引擎
        支持事务(备份,恢复...)、行锁、外键等操作 存取速度没有MyISAM快 但是安全性更高
        
    Memory
    	基于内存存取数据 仅用于临时表数据存取
        
    BlackHole
    	任何写进去的数据都会立刻丢失(回收站类似)

了解不同存储引擎低层文件个数
create database db2;
use db2;
create table t1(id int,name varchar(16)) engine=innodb;
create table t2(id int,name varchar(16)) engine=myisam;
create table t3(id int,name varchar(16)) engine=memory;
create table t4(id int,name varchar(16)) engine=blackgole;
'''
1.innodb两个文件
	.frm	表结构
	.ibd	表数据(表索引)
2.myisam三个文件
	.frm	表结构
	.MYD	表数据
	.MYI	表索引
3.memory一个文件
	.frm	表结构
4.blackhole一个文件
	.frm	表结构
'''
insert into t1 varchar(1,'jason');
inster into t2 varchar(2,'kevin');
insert into t3 varchar(3,'jack');
insert into t4 varchar(4,'jerry');

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)

验证整型默认是否携带正负号
	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);

严格模式

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

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

字段类型之浮点型

float(20,10)
	总共存储20位数 小数点后面占10
double(20.10)
	总共存储20位数 小数点后面占10
decimal(20,10)
	总共存储20位数 小数点后面占10
    
create table t7(id float(60,20));
create table t8(id double(60,20));
create table t9(id decimal(60,20));
insert into t7 values(1.1111111111111111111);
insert into t8 values(1.1111111111111111111);
insert into t9 values(1.1111111111111111111);

三者的核心区别在于精确度不同
	float	<	double	<	decimal

字段类型之字符类型

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, 'jason1');
insert into t11 values(1, 'jason2');

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

set global
sql_mode='strict_trans_table,pad_char_to_full_length';


char VS varchar
char
	优势:整存整取 速度快
    劣势:浪费存储空间
varchar
	优势:节省存储空间
    劣势:存取数据的速度较char慢
jacktonyjaso	整存整取,固定长度
varchar就是加了个报头类似,先拿取报头固定长度根据报头解析出来的长度取数据,所以会慢
"""
char与varchar的使用需要结合具体应用场景
"""

数字的含义

数字在很多地方都是用来表示限制存储数据的长度
	但是在整型中数字却不是用来限制存储长度
    
create table t12(id int(3));  不是用来限制长度
create table t12 values(12345);

create table t13(id int(5) zerofill);  而是用来控制展示的长度
insert into t13 values(123),(123456789);

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

字段类型之枚举与集合

枚举
	多选一
    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-11-11','22:22:22','234');
ps:以后设计到日期相关字段一般都是系统自动获取 无需我们刻意操作

posted @ 2022-11-23 19:57  lsumin  阅读(20)  评论(0编辑  收藏  举报