四十五、MySQL数据库2

今日内容概要

  • 存储引擎
    • MySQL主要的存储引擎
  • 数据类型
    • 整型
    • 浮点型
    • 字符类型
    • 日期类型
    • 枚举与集合类型
  • 约束条件

今日内容详细

  • 存储引擎

  日常生活中文件格式有很多种,针对不同的文件格式会有不同的存储方式和处理机制(txt/pdf/mp3/mp4)

  针对不同的数据,应该也要有不同的处理机制来存储

  存储引擎就是不同的处理机制

  MySQL主要存储引擎

    • Innodb

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

        存储数据更加安全

    • MyIsam

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

        速度要比Innodb更快,但是我们更加注重的是数据的安全

    • memory

        内存引擎(数据全部存放在内存中),断电数据丢失

    • blackhole

        无论存什么数据,都立刻消失(黑洞)

"""
#查看所有引擎
show engines;

#创建库
create database day45;

#切换到day45库下
use day45;

#用不同的存储引擎在存储表的时候,有什么异同点
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;

#执行以上四条语句之后,会在day45中生成4张表
Innodb
t1.frm     #frm 表结构
t1.ibd      #ibd  表数据

Myisam
t2.frm      #frm  表结构
t2.MYD     #MYD  表数据
t2.MYI      #MYI    表索引    类似于书的目录,基于目录查找数据,速度更快

memory
t3.frm      #frm 表结构    数据在内存,无需文件存储表数据

blackhole
t4.frm      # frm 表结构


#插入几条数据
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(2);
insert into t4 values(1);

运行之后查看结果
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> select * from t2;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> select * from t3;
+------+
| id   |
+------+
|    1 |
+------+

mysql> select * from t4;
Empty set (0.00 sec)

1 row in set (0.00 sec)


由于t4是用blackhole模式创建的表,因此没有数据
t3中的数据是在内存中,如何验证?
    先quit退出与服务端的链接,并且重启mysql服务端,重新链接
    
    切换到day45下,然后执行select * from t3;
     此时显示:Empty set (0.00 sec)
"""
  • 创建表的完整语法

 

"""
#语法
create table 表名(
    字段名1 字段类型(宽度) 约束条件,
    字段名2 字段类型(宽度) 约束条件,
    字段名3 字段类型(宽度) 约束条件
);

注意
    1.在同一张表中,字段名不能重复
    2.宽度和约束条件可以不用写,但是字段名和字段类型是必须得写的
        约束条件写的话,也支持写多个
        字段名1(宽度) 约束条件1 约束条件2.......
        create table t5(id);  没有类型,报错
    3.最后一行不能有逗号
        create table t6(
            id int,
            name char(32),
        );    #报错,最后一行有逗号

补充
    #宽度
        一般情况下,指的是对存储数据的限制
        create table t7(name char);    #默认的宽度是1
        insert into t7 values(‘jason‘);
        insert into t7 values(null);
         #不同的版本会出现不同的结果
         5.6版本默认没有开启严格模式,规定只能存1个字符,你多给了几个字符,name我会自动帮你截取1个字符
         5.7版本或者以上开启了严格模式,那么规定只能存几个,你在插入数据的时候,就不能超出,一旦超出范围,会立刻报错:
ERROR 1406 (22001): Data too long for column ‘name‘ at row 1


严格模式到底开不开呢?
    MySQL5.7    之后的版本都是默认开启严格模式的

使用数据库的准则:
        能尽量少的让数据库干活,就不要给数据库增加额外的压力


#约束条件  null   not  null
create table t8(id int,name char not null);

mysql> desc t8;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| name  | char(1) | NO   |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)

insert into t8 values(1,null);

mysql> insert into t8 values(1,null);
ERROR 1048 (23000): Column ‘name‘ cannot be null

#宽度和约束条件,到底是什么关系?
    宽度是用来限制数据的存储
    约束条件是在宽度的基础上增加额外的约束
 
"""        

 

四十五、MySQL数据库2

上一篇:opaque struct——c/c++如何隐藏内部结构体的定义?


下一篇:Django——数据库连接配置