数据基本数据类型

内容概要

  • 字符编码与配置文件
  • 数据库存储引擎
  • 创建表的完整语法
  • MySQL字段基本数据类型
  • MySQL字段常见约束条件

字符编码与配置文件

  1. \s查看MySQL相关信息

    当前用户、版本、编码、端口号

    MySQL5.6及之前的版本年吗需要人为统一 之后的版本已经全部默认

    编码不一致

    我们需要修改配置文件

    打开my-default.ini

    复制后重命名为my.ini

    修改为

    在运行MySQL

    """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 yu utf-8是有区别的 MySQL中只有utf8
    修改了配置文件中关于[mysqld]的配置 需要重新启动服务端
    

数据库引擎

  • 存储引擎

    数据库针对数据采取多种存取方式

  • 查看常见引擎的方式

    show engines;

  • 需要了解的四个存储引擎

    • MyISAM

      MySQL5.5 之前默认的存储引擎

      存取数据的速度快 但是功能较少 安全性低

    • InnoDB

      MySQL5.5之后默认的存储引擎

      支持事务、行锁、外键等操作 存取速度没有MyISAM快 但是安全性更高

    • Memory

      基于内存存取数据 仅用于零食表数据存取

    • BlackHole

      任何写进去的数据都会立刻消失

  • 事物

    • 思考:我去银行给朋友汇款,我卡上有1000元,朋友卡上500元,我给彭转账50元(无手续费),如果我的钱刚扣,而朋友的钱没有加上时网断了,怎么办

    • 事物的ACID特性

      • 原子性(Atomocoty):原子意为最小的粒子,或者说不能再分的事物。数据库事务的不可再分的原则即为原子性。

        组成事务的所有查询必须:要么全部执行,要么全部取消(就像上面的银行例子)。

      • 一致性(Consistency):直属局的规则,在事务前后应保持一致

      • 隔离性(Isolation):简单点说,某个事务的操作对其他是事务不可见

      • 持久性(Durabilty):当食物提交完成后,其影响应该保留下来,不能撤销

  • 了解不同存储引擎底层文件个数

    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)enginr=blackhole;
    

    """
    1.innodb两个文件
    	.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);
    

    ​ blackhole 引擎存什么都会没有

    ​ memory 引擎是存储到内存 关闭服务在打开服务 也会没有

创建表的完整语法

create table 表名(
	字段名  字段类型(数字) 约束条件,
	字段名  字段类型(数字) 约束条件,
	字段名  字段类型(数字) 约束条件
);
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件也可以写多个 空格隔开即可
4.最后一行结尾不能加逗号
ps:编写SQL语句报错之后不要慌 仔细查看提示会很快解决
 

字段类型之整型

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

验证整型默认是否携带正负号
	create table t5(id tinyint);
	inset into t5 values(-129),(128); 
   提前结果 -128和127 默认带正负号

我们也可以取消正负号
	create table t6(id tinyint unsigned);
 	insert into t6 values(-129),(128),(1000);

我添加的数据是-129259 但是存的数据失真的但是数据库也没有报错,他应该的报错的但是没有

是因为数据库没有进入严格模式

他是默认严格模式但是我们修改的配置文件,所以没有进入

严格模式

当我们在使用数据库的时候 如果数据不符合规范 应该直接报错而不是擅自修改数据 这样会导致数据失真(没有实际意义)

正常都应该报错 但是我们之前不小心改了配置文件

show variables like '%mode%';

1.临时修改
	set session sql_mode = 'strict_trans_tables';
	当前客户端有效
	set global sql_mode = 'strict_trans_tables';
	写完之后要重启一下服务端
2.永久修改
	直接修改配置文件

这次写直接报错 达到了我们想要的效果

字段类型之浮点型

float(60,30)
	总共存储60位 小数点后面占30
double(60,30)
	总共存储60位 小数点后面占30
decimla(60,30)
	总共存储60位 小数点后面30位
create table t6(id float(60,30));
create table t7(id double(60,30));
create table t8(id decimla(60,30));

insert into t7 values(1.1111111111111111111);
insert into t8 valuse(1.11111111111111111111);
insert into t9 values(1.11111111111111111111);

三者的核心区别在于精确度不同

float  < double  < decimal

其实float已经够我们正常使用了 到时候不行用字符串

字段类型之字符类型

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, 'jsaon2');

insert into t10 values(1, 'J');
insert into t11 values(1,'K');

"""查看字段存储的数据长度"""
select char_length(name) from t10;
select char_length(name) from t11;

​ 怎么回事t10不应该是4个字符怎么是1个字符,因为数据库给你做处理他在硬盘上存储还是4个字符,他取出来的时候直知道他给你加了空格,自己又把空格去掉了所以显示的是一个字符

让他不这么做需要加东西

set global sql_mode='strict_trans_tables,pad_char_to_full_length';
需要重启服务端  如果不行 就在重启一下客户端

​ char 与 varchar

​ char

​ 优势:整存整取 速度快

​ 劣势: 浪费内存空间

​ varchar

​ 优势:节省内存空间

​ 劣势:存取较char慢

因为varchar存数据会先发一个字节的报头告诉这个数据几个字节 读的时候也会先读报头在读数据 所以速度慢

"""
char 与 varchar的使用需要结合具体的应用场景

"""

数字的含义

数字在很多地方是用来表示限制存储数据的长度
但是在整型中数字确不是用来限制存储长度

crearte table t12(id int(3));
insert into =t12 values(12345);

create table t13(id int(5) zerofill);
inser into t13 values(123),(12344554);
create table t14(id int);
desc t14
"""
以后写整型不需要添加数字
"""

"""
默认的都有所以写不写都一样

"""

字段类型之枚举与集合

  • 枚举

    多选一

    create table t15(id int,
                 name varchar(32),
                 gender enum('male','female','others'))charset utf8;
    insert into t15 values(1,'jason','猛男');
    insert into t15 values(2,'tony','male');
    insert into t15 values(3,'oscar','female')
    

  • 集合

    多选多(多选一)

    create table 16(id int,
               name varchar(32),
               hobbies set('篮球','足球','桌球'))charset utf8;
    insert into t15 values(1,'jason','篮球,足球');
    insert into t15 values(2, 'oscar','哈哈');
    

字段类型之日期类型

datatime    年月日时分秒
data       年月日
time       时分秒
year       年

create table t17(id int,
           name varchat(32),
           register_time datetime,
           birthday date,
           study_time time,
           work_time year);
inset into t17 values(1,'jason','2000-11-11 11:11:11','1998-01-21','11:11:11','2000')

ps:以后涉及到日期相关的字段一般都是系统自动获取。

posted @ 2022-11-23 20:22  可否  阅读(62)  评论(0)    收藏  举报