python之路34 MySQL 2 配置文件 字段类型

字符编码与配置文件

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

如果想要永久修改编码配置 需要操作配置文件
**2.默认的配置文件是my-default.ini**
     拷贝上述文件并重命名为my.ini
直接拷贝字符编码相关配置即可无需记忆
   [mysqld]
        character-set-server=utf8mb4
        collation-server=utf8mb4_general_ci
        sql_mode=STRICT_TRANS_TABLES (这一行是为了限制填入数据时因为有没有符号会改动数据  配置文件内有了这条语句不会自动修改数据)
    [client]
        default-character-set=utf8mb4
    [mysql]
        default-character-set=utf8mb4

image
image
image

ps:
   1.utf8mb4 能够存储表情 功能更强大
   2.utf8与utf-8是有区别的 MySQL中只有utf8
    
修改了配置文件中关于[mysqld]的配置 需要重启服务端

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

数据库存储引擎

存储引擎
    数据库针对数据采取的多种存取方式
    
查看常见存储引擎的方式
    show engines
需要了解的四个存储引擎
  MyISAM
    MySQL5.5之前默认的存储引擎
    存取数据的速度快  但是功能较少 安全性较低
  InnoDB
     MySQL5.5之后默认的存储引擎
     支持事务、行锁、外键等操作 存取速度没有MyISAM快 但是安全性更高
   Memory
     基于内存存取数据  仅用于临时表数据存取
   BlcakHole
      任何写入进去的数据都会立刻丢失
   
了解不同存储引擎底层文件个数
  create database 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) engine=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);
ps:MySQL默认忽略大小写

image
image

创建表的完整语法

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.永久修改
   直接修改配置文件

image
image
image

字段类型之浮点型

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

insert into t7 values(1.11111111111);
insert into t8 values(1.11111111111);
insert into t9 values(1.11111111111);


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

image

字段类型之字符类型

char
    定长
      char(4)  最多存储四个字符 超出就报错 不够四个空格填充至四个
varchar
    变长
       carchar(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_tables,pad_char_to_full_length';

char VS varchar
   char
      优势:整存整取 速度快
      劣势:浪费存储空间
   varchar
       优势:节省存储空间
       劣势:存取数据的速度较char慢
jacktonyjasonkevintomjerry
1bytes+jack1bytes+tony1bytes+jason1bytes+kevin1bytes+tom1bytes+jerry
"""
char与varchar的使用需要结合具体应用场景
"""        

image

数字的含义

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

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

create table t14(id int);

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

字段类型之枚举与集合

枚举
   多选一
     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');

image

集合
    多选多(多选一)
    create table t16(id int, name varchar(16), hobbies set('basketball','football','doublecolorball'));
    insert into t16 values(1,'jason','study');
    insert into t16 values(2,'tony','doublecolorball');
    insert into t16 values(3,'kevin','doublecolorball,football');

image

字段类型之日期类型

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-01-21','11:11:11','2000');
ps:以后涉及到日期相关字段一般都是系统自动回复 无需我们操作  数据库内有内置函数

image

posted @ 2022-11-23 17:14  缀月  阅读(180)  评论(0编辑  收藏  举报