• MySQL-(2)


    内容概览

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

    字符编码与配置文件

    my-default.ini:Windows下MySQL默认的配置文件
    拷贝配置文件并重命名为my.ini,修改此文件即可
    \s:查看数据库基本信息,如果发现客户端与服务端的编码不统一,那么输入中文会造成乱码,所以我们需要统一修改为utf8
    添加字符编码相关的配置:

    [mysqld]
        character-set-server=utf8
        collation-server=utf8_general_ci
    [client]
        default-character-set=utf8
    [mysql]
        default-character-set=utf8  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果配置文件涉及到了服务端相关的配置修改,那么需要重启服务端才能生效
    由于每次启动mysql都会加载配置,那么我们可以偷懒将用户密码配置在配置文件中,以后就可以使用mysql直接登录

    存储引擎

    可以简单的理解为使用不同的存储策略存储数据
    查看所有的存储引擎:show engines;
    需要掌握的存储引擎:

    1. MyISAM
      MySQL5.5及其之前版本默认使用的存储引擎
      存取数据的速度快,但是功能较少,安全性低
    2. InnoDB
      MySQL5.5以后版本默认使用的存储引擎
      存取数据的速度没有MyISAM快,但是支持事务,行锁,外键等诸多功能
    3. Memory
      基于内存的存储引擎,存取数据速度快,但是断电数据丢失
    4. BlackHole
      黑洞,任何写进去的数据立刻丢失
    # MySQL中默认是大小写不敏感的(不区分大小写)
    create table t1(id int) engine=innodb;
    	# .frm 表结构
    	# .ibd 表数据、表索引(加快数据查询)
    create table t2(id int) engine=myisam;
    	# .frm 表结构
    	# .MYD 表数据
    	# .MYI 表索引(加快数据查询)
    create table t3(id int) engine=memory;
    	# .frm 表结构
    	# 表数据在内存中
    create table t4(id int) engine=blackhole;
    	# .frm 表结构
    insert into t1 values(1);
    select * from t1;  # 1
    insert into t2 values(1);
    select * from t2;  # 1
    insert into t3 values(1);
    select * from t3;  # 1,重启服务端丢失
    insert into t4 values(1);
    select * from t4;  # 没有数据
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    创建表的完整语法

    create table 表名(
    	字段名1 字段类型(数字) 约束条件,
    	字段名2 字段类型(数字) 约束条件,
    	字段名3 字段类型(数字) 约束条件
    ) engine=存储引擎;
    # 字段名与字段类型必须填写至少一个
    # 数字与约束条件可以不写
    # 约束条件可以写多个,使用空格隔开
    # 最后一个字段的末尾不能够有逗号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    字段类型之整型

    tinyint 1bytes
    smallint 2bytes
    int 4bytes
    bigint 8bytes
    1bytes等于8bit,可以保存0~255,但是默认要使用一位保存正负状态,所以是-128~127

    create table t1(id tinyint);
    insert into t1 values(256),(-129);
    select * from t1;  # 127 -128
    # 发现超过范围的数值都自动填写为最接近的边界值
    # 使用约束条件移除正负号,使数字的范围为0~255
    create table t2(id tinyint unsigned);
    insert into t2 values(-129),(256);
    select * from t2;  # 0 255
    # nusigned 约束条件之一,意思是不需要符号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    如果插入数据超过范围自动修改,可以使用修改配置文件让其超出范围报错

    [mysqld]
    	sql_mode='STRICT_TRANS_TABLES'
    
    • 1
    • 2

    也可以使用命令临时修改

    set session sql_mode='strict_trans_tables'  # 当前客户端操作界面有效
    set global sql_mode='STRICT_TRANS_TABLE'  # 服务端重启前有效
    
    • 1
    • 2

    字符段之浮点型

    float
    double
    decimal
    这三个都可以存储浮点型数据,但是精确度各不一样

    create table t1(num float(255,30));  # float括号内第一个表示一共多少位数,第二个表示小数使用多少位
    create table t2(num double(255,30));
    create table t3(num decimal(65,30));
    insert into t1 values(1.11111111111111111111111111);
    insert into t2 values(1.11111111111111111111111111);
    insert into t3 values(1.11111111111111111111111111);
    select * from t1;  # 1.111111164093017600000000000000
    select * from t2;  # 1.111111111111111200000000000000
    select * from t3;  # 1.111111111111111111111111110000
    # 一般情况下使用float就足够了,如果想要完全的精确,可以使用字符类型来替代
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    字符段之字符类型

    char:定长
    varchar:变长

    char(4):最大只能存储4个字符,超出范围直接报错;如果字符不够则使用空格填充至4个字符
    varchar(4):最大只能存储4个字符,超出范围直接报错;如果字符不够不会填充,有几个字符就存储几个字符

    create table t1(name char(4));
    create table t2(name varchar(4));
    
    insert into t1 values('abcde');
    insert into t1 values('abcd');
    insert into t2 values('abcde');
    insert into t2 values('abcd');
    # 超出范围都会报错
    insert into t1 values('a');
    insert into t2 values('a');
    select char_length(name) from t1;
    select char_length(name) from t2;
    # 使用char_length()查看字符长度,发现两个存储的长度都是1
    # 因为默认情况下,char在存储时会针对不满足固定字符的填充空格,读取的时候会将末尾的空格移除
    insert into t1 values('a  ');
    select char_length(name) from t1;  # 1
    # 如果想要取消该机制需要sql_mode
    set global sql_mode='strict_trans_tables,pad_char_to_full_length';
    # 是替换而不是新增,所以要将之前的配置也写上
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    char:整存整取,速度快,但是浪费存储空间
    varchar:节省存储空间,但是存取速度慢

    数字的含义

    数字大多数情况下都是用来限制字段的存储长度,整型除外
    整型是用来表示展示的长度

    create table t1(id int(5));
    # 不能太明显的看出来,使用约束条件填充0
    create table t2(id int(5) zerofill);
    insert into t2(123);
    select * from t2;  # 00123
    # 以后涉及到整型字段的定义,一般不需要在括号内写数字,除非是业务需求
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    字段类型之枚举与集合

    # 枚举:设定几个数值,之后选择其中之一填写
    create table t1(gender enum('male','female','other'));
    # 集合:设定几个数值,之后选择其中数值填写
    create table t2(hobbies set('a','b','c'));
    
    • 1
    • 2
    • 3
    • 4

    字段类型之日期类型

    date		年月日
    time		时分秒
    datetime	年月日时分秒
    year		年份
    create table t1(
    	birthday date,
    	study_time time,
    	reg_time datetime,
    	join_time year
    );
    # 传入指定的数据
    insert into t1 values('2000-11-11','11:11:11','2000-11-11 11:11:11','1996');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    字段约束条件

    1. unsigend  # 无符号
    create table t1(id int unsigend);
    
    2. zerofill  # 以零填充
    create table t2(id int(5) zerofill);
    
    3. not null  # 非空,指定一个字符段必须填写(空字符也算填写了)
    create table t3(id int,name varchar(32) not null);
    insert into t3(id) values(1);  # 当指定字符段添加数据时,其余字符段值为null,约束为非空后必须填写该字符段
    
    4. default  # 默认值
    create table t4(id int,name varchar(32) default 'jason');
    isnert into t4(id) values(1);  # 当指定字符段填写时,其余字符段为null,使用默认值设置为其他
    
    5. unique  # 唯一值
    create table t5(id int unique);  # 单列唯一,设定的字符段不能出现重复的数据
    insert into t5 values(1);
    insert into t5 values(1);  # 报错
    
    create table t6(host varchar(32),port int,unique(host,port));  # 联合唯一,括号内的加起来不能重复,单独可以重复
    create table t6 values('127.0.0.1',8080);
    create table t6 values('127.0.0.1',8081);
    create table t6 values('127.0.0.2',8080);
    create table t6 values('127.0.0.1',8080);  # 两个都相同,报错
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    【git】新电脑(Windows)中Git配置SSH公钥
    【前端面试】-- 必知必会的promise题
    Code128条码的值对应表
    CListCtrl设置只显示单列 2023/9/5 下午4:07:05
    快速入门Flask微服务架构
    什么是智能合约
    C++ 函数的分文件编写
    C语言学习笔记day2
    Midjourney视觉垫图
    Android-树形选择列表
  • 原文地址:https://blog.csdn.net/AL_QX/article/details/126346924