MYSQL数据库

字符编码与配置文件

复制代码
# 1.查看MYSQL相关信息    \s
    当前用户,版本,编码,端口号
    mysql5.6前编码需要人为统一,之后默认是统一的
    """
    想要永久修改编码配置,需要操作配置文件
    """

# 2.默认的配置文件是my-dafault.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功能比utf8强大,可以存储表情
         2.utf8与utf-8是有区别的
         3.MYSQL中只有utf8
         4.我们在修改了配置文件中关于客户端[mysqld]的配置,需要重启服务器
 

"""
我们可以在配置文件中写入账户名和密码,之后再使用mysql登录进去就好
            [mysql]
                user='root'
                password=123
"""  
复制代码

数据库存储引擎

复制代码
1.存储引擎 :                           数据库针对数据采取的多种存取方式
2.查看常见存储引擎方式 :          show engines;
3.四个存储引擎:      
     -1.MyISAM          MySQL5.5之前默认的存储引擎
          特点:        存取数据速度快,功能较少,安全性较低                           
     -2.InnoDB           MYSQL5.5之后默认的存储引擎
          特点:        支持事务,行锁,外键等操作,存取熟读没有MyISAM快,但是安全性更高
     -3.Memory         
          特点:        基于内存存取数据,仅用于临时表数据存取
     -4.BlackHole
          特点:         任何写入进去的数据都会立即丢失

4.了解不同存储引擎底层的文件个数
    """
     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) engine=blackhole;

     insert into t1 values(1);
     insert into t2 values(1);
     insert into t3 values(1);
     insert into t4 values(1);
    # 再mysql中可以忽略大小写
    """
    -1.innodb两个文件
      .frm    表结构
      .ibd    表数据(表索引)
    -2.myisam三个文件
      .frm    表结构
      .MYD    表数据
      .MYI    表索引
    -3.memory一个文件
      .frm    表结构
    -4.blackhole一个文件
      .frm    表结构    
复制代码

创建表的完整语法

复制代码
# 语法:
create table 表名(
        字段名 字段类型(数字) 约束条件,
    字段名 字段类型(数字) 约束条件,
     字段名 字段类型(数字) 约束条件
);


# 注意事项:
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件也可以写多个 空格隔开即可
4.最后一行结尾不能加逗号

ps:编写sql语句报错,根据提示定位分析
复制代码

MySQL字段基本数据类型

整型

复制代码
1.tinyint         1bytes            正负号(占1bit) 
2.smallint        2bytes            正负号(占1bit)
3.int             4bytes            正负号(占1bit)
4.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);
结果:
      0和255      

复制代码
# 类型后面的数字在很多地方都是用来表示限制存储数据的长度(整型除外)
    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);

"""写整型的时候无需添加括号和数字"""
复制代码
复制代码
复制代码

浮点型

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

# 验证精准度
1.验证float:
创建表:    create table t4(id float(255,30));
存入数据:  insert into t4 values(1.1111111111111111111111111111111111);
查看数据:  select * from t4;
-结果:1.111111164093017600000000000000

2.验证double:
创建表:     create table t5(id double(255,30));
存入数据:  insert into t5 values(1.1111111111111111111111111111111111);
查看数据:  select * from t5;
-结果:1.111111111111111200000000000000

3.验证decimal:
创建表:    create table t11(id decimal(65,30));
存入数据:  insert into t11 values(1.1111111111111111111111111111111111);
查看数据:  select * from t11;
-结果: 1.111111111111111111111111111111
"""
三者的区别基于就是精度不同
     float    <    double  <     decimal
"""
复制代码

字符类型

复制代码
1. char    定长    char()括号里是几,就最大能存储几个字符,超出范围报错
                                不超出范围,用空格填充到四个字符
2. varchar 变长    varchar()括号里是几,就最大能存储几个字符,超出范围报错
                                不超出范围,能有几位就存几位
验证区别:
超出范围二者都会报错,使用char_length()可以统计数据的长度
注意sql_mode='strict_trans_tables'
     ps:两者感觉上并没有区别,默认情况下char存储的时候,没有满足长度会自动填充空格,读取时又会取消空格,所以看起来没区别
        <取消该机制需要使用sql_mode> 下面目录是替换,不是新增,之前的配置也要写:
        set global sql_mode='strict_trans_tables,pad_char_to_full_length';

复制代码
# char与varchar哪个更好呢
     char整存整取,速度快,但是浪费存储空间
     varchar节省存储空间,但是速度比char慢
# 1.char(4):
       a   son jacktom lili      # 空格占位
# 2.varchar(4):
       1bytes+a1bytes+son1bytes+jack1bytes+tom1bytes+lili
  ps:存取数据都需要操作报头(耗时)
"""
二者使用都很频繁,很多时候默认为varchar

"""
复制代码
复制代码

枚举与集合

复制代码
# 1.枚举enum
- 多选一
  例:性别(男,女,其他)          我们只能选择一次性别
    create table t15(
        id int,
        name varchar(32),
        gender enum('male','female','others')  
);

- 结果:只能选择枚举出来里面的一个,不在选择里面的写入会报错

# 2.集合set - 多选多(包含多选一) 例:爱好(唱,跳,rap,篮球) 我们可以选择多个爱好 create table t17( id int, name varchar(32), hobbies set('sing','jump','rap','basketball') ); - 结果:可以选择里面的多个或一个,不在选择里面的写入会报错
复制代码

日期类型

复制代码
date         年月日
datetime     年月日时分秒
time         时分秒
year         年

# 1.例:  
- 创建表:
    create table t18(
        id int,
        name varchar(32),
        birth date,              
        reg_time datetime,       
        study_time time,        
        join_time year       
        );
- 添加数据:
    insert into t18 values(1,'tom','2011-11-11','2000-11-11 11:11:11','11:11:11','1995');
- 查看数据:
    select * from t18;
复制代码

实操:

 

 结果:

 

 

严格模式

复制代码
# 当我们在是使用数据库存储数据的时候,数据不符合规范,应该直接报错,不可以擅自修改数据(数据失真,没有意义),

    如果没有报错就是我们之前修改配置文件的问题:
        show variables like '%mode%';
    可以通过修改来改回来
        1.临时修改
        set session sql_mode='strict_trans_tables';
                 在当前客户端有效
         set global sql_mode='strict_trans_tables';
                 在当前服务端有效
        2.永久修改
        直接修改配置文件
复制代码

 

posted @   橘子菌菌n  阅读(177)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示