MySQL 存储引擎 字段类型 约束条件

? 1.存储引擎
? - 存储引擎是用于根据不同的机制处理不同的数据。
? - 查看mysql中所有引擎:
? - show engines;

    - myisam: 5.5以前老的版本使用的存储引擎
    - blackhole: 类似于队列中的数据,存进去消失

    - innodb: 默认使用存储引擎
        - 支持事务
        - 行锁
        - 外键

    - memory: 通电数据存在,断电丢失
        create table t1(id int)engine=innodb;
        create table t2(id int)engine=myisam;
        create table t3(id int)engine=blackhole;
        create table t4(id int)engine=memory;

        - 提前学习 redis: 面试问的比较多;

        - 插入数据验证引擎的作用:
            insert into t1 values(1);
            insert into t2 values(2);
            insert into t3 values(3);  ##结果隐藏了
            insert into t4 values(4);

2.创建表完整的语法
    # 约束条件: 可有可无
    # 宽度: 限制某些数据类型的存储大小
    create table 表名(
        字段名1 字段类型(宽度) 约束条件,
        字段名2 字段类型(宽度) 约束条件
    );

    # 初始约束条件: not null
    create table teacher(
        id int not null,  # 约束插入记录时id不能为空
        name varchar(16),
        age int
    );

    insert into teacher values(null, 'tank', 17);
    insert into teacher values(1, 'tank', 17);

    注意:
        1.创建表的字段名不能重复;
        create table test(
            id int,
            id int
        );

        2.最后一个字段不能在末尾加 , 号
        create table test(
            id int,
            age int,
        );

        3.字段名必须要有字段类型与宽度
        create table test(
            id int,
            name char
        );
        insert into test values(1, 'tank');

        alter table test modify name char(4);
        insert into test values(2, 'sean');

2.字段类型
    1) 确定表结构
    2) 字段与字段类型

    - 整型:
        - tinyint: 默认范围 -128, 127
            create table t5(
                id tinyint,
                name varchar(16)
            );
            5.6.40
            insert into t5 values(-128, 'tank'), (127, 'jason');
            insert into t5 values(-129, 'tank');
            insert into t5 values(128, 'jason');
            insert into t5 values(12, 'sean');

        - int: 默认范围是(-2147483648, 2147483647)

            应用场景: id号、年龄...

            create table t6(
                id int
            );

            # int 默认宽度11---> 默认展示宽度
            insert into t6 values(-2147483649);
            insert into t6 78values(2147483648);
            insert into t6 values(100);

            create table t7(
                id int(3)
            );

            # 若插入超过设定宽度,则正常显示
            insert into t7 values(123456);

            # 若插入不足够4位,则以空格补全
            insert into t7 values(1);

        - bigint

    - 浮点型:

        应用场景: 工资、身高、体重...

        - float
        - double
        - decimal

        # 范围255是最大长度(不包括.小数), 30代表是小数的位数   ##255代表的是数字的总长度,不包括小数点 整数最多是225位
        create table t8(x float(255, 30));
        create table t9(x double(255, 30));
        create table t10(x decimal(65, 30));

        # 插入数据
        # 三种浮点型: 区别在于精确度不一样
        insert into t8 values(1.111111111111111111111111111111);
        insert into t9 values(1.1111111111111111111111111111);
        insert into t10 values(1.1111111111111111111111111111);
        >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>打印的结果
        +----------------------------------+
        | x                                |
        +----------------------------------+
        | 1.111111164093017600000000000000 |
        +----------------------------------+
          1.111111111111111200000000000000
          1.111111111111111111111111111111
            以上可以看出 精确度 :decimal > double > float

?
? - 字符类型
? - char(16): 定长字符
?

            char: 手机号、身份证号、银行卡号等...

            - 插入16个字符:

            create table t11(
                id int,
                name char(4)  # 4
            );

            insert into t11 values(1, 'tank');

            # utf8 中文3个bytes   gbk 中文2个bytes
            insert into t11 values(2, '大鸡哥大鸡哥');

            优点:
                存取速度快
            缺点:
                浪费空间。
                insert into t11 values(1, 't');  # t+三个空格

            egon + sean + tank

        - varchar(16): 不定长字符
            - 存几个字符,就是几个字符的大小,每个字符前都要+1bytes ##这个1个的bytes是另外加的 不在设定的字符长度内
            - 插入16个字符 ---> 1bytes+

            优点:
                节省空间。

            create table t12(id int, name varchar(4));
            insert into t12 values(1, 'egon');  # 1bytes + egon
            insert into t12 values(2, 'tank');  # 1bytes + tank
            insert into t12 values(3, 'sean');  # 1bytes + sean

            insert into t12 values(4, 't');  # 1bytes + t
            1bytes + egon  、 1bytes + tank、 1bytes + sean

    - 日期类型
        - date: 2019-12-11
        - datetime: 2019-12-11 11:11:11
        - time: 11:11:11
        - year: 2019
        - timestamp: 时间戳

        create table student(
            id int,
            name varchar(4),
            birth date,
            register datetime,
            work_time year,
            t_time time,
            update_time timestamp
        );

        insert into student values(1, '张全蛋', '2019-11-11', '2019-11-11 11:11:11','2019', '11:11:11', null);
        insert into student values(2, 'HCY', '1000-11-11', '1980-11-11 11:11:11','2019', '11:11:11', null);

        update student set name='HCY2号' where id=2;

        python 插入时间数据时,转成str类型。

    - 枚举与集合
        - enum: 可以 多选一
            create table t13(
                id int,
                name varchar(4),
                gender enum('male', 'female', 'others')
            );
            # insert into 表名(字段名) values(字段名对应的值);
            insert into t13(id, name, gender) values(1, 'tank', 'male');

            # 严格模式下,选择枚举以外的值会报错
            insert into t13(id, name, gender) values(2, 'gd', '人Y');

        - set: 可 多选一 或 多选多
            create table t14(
                id int,
                name varchar(4),
                gender enum('male', 'female', 'others'),
                hobbies set('read', 'sing', '生蚝', 'HSNM', '架子鼓')
            );

            # 多选一
            insert into t14 values(1, '大鸡J', 'others', 'HSNM');
            # 多选多
            insert into t14 values(2, 'tank', 'male', 'read,架子鼓,sing,生蚝');

            # 多选多的顺序可不一
            insert into t14 values(2, 'tank', 'male', 'read,架子鼓,sing,生蚝');

3.约束条件

    - not null + unique:
        create table user1(
            id int not null,
            name varchar(4)
        );

        insert into user1(id, name) values(null, 'tank');
        insert into user1(id, name) values(1, 'tank');

    - unique 将某个字段设置为唯一的值

        # not null + unique
        create table user2(
            id int not null unique,
            name varchar(4)
        );

        insert into user2(id, name) values(1, 'tank'), (2, 'sean');

    - primary key + auto_increment: 主键+自增

        - primary key -----》 not null + unique
            - pk就是表中的索引: 可以通过索引快速查找某些数据。
                - 提高查询效率

            # 将id设置为主键,非空切唯一
            create table user3(
                id int primary key,
                name varchar(4)
            );

            insert into user3(id, name) values(1, 'tank');
            insert into user3(id, name) values(2, 'tank');

        - auto_increment:
            # 将id设置为自增
            create table user4(
                id int primary key auto_increment,
                name varchar(4)
            );

            # 自增默认从0开始
            insert into user4(name) values('tank');
            insert into user4(name) values('sean');
            insert into user4(name) values('egon');
            insert into user4(name) values('大鸡哥');

            # 若想自增从指定值开始,可插入第一条数据时先指定id的值;
            insert into user4(id, name) values(10, 'tank');
            insert into user4(name) values('sean');  # 11
            insert into user4(name) values('egon');  # 12
            insert into user4(name) values('大鸡哥');  # 13

            +----+-----------+
            | id | name      |
            +----+-----------+
            |  1 | tank      |
            |  2 | sean      |

            |  3 | egon      |
            |  4 | 大鸡哥    |
            | 10 | tank      |
            | 11 | sean      |
            | 12 | egon      |
            | 13 | 大鸡哥    |
            +----+-----------+

    - unsigned
        - 无符号
            create table user5(
                id int unsigned
            );
            # 报错
            insert into user5 values(-100);
            insert into user5 values(0);
            insert into user5 values(100);

        - 有符号
            create table user6(
                id int
            );

            insert into user6 values(-100);

    - zerofill
        使用0填充空格
        create table user7(
                id int zerofill
        );

        insert into user7 values(100);
     -default
     默认
     create table user_1(pwd varchar(20) default'1000000')
     insert into user_1 values('1000000')

    - 删除记录
        create table user8(
            id int primary key auto_increment,
            name varchar(4)
        );

        insert into user8(name) values('tank');
        insert into user8(name) values('大大大'), ('egon');

        - delete:
            # 清空user8表中的所有记录
            delete from user8;

        - truncate:
            # 清空user8表中的所以记录,并且id重置为0
            truncate table user8;

原文地址:https://www.cnblogs.com/bs2019/p/12037300.html

时间: 2024-10-03 23:15:45

MySQL 存储引擎 字段类型 约束条件的相关文章

mysql 存储引擎,字段类型,索引介绍

一:常用的存储引擎:1,myisam:    我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:     1>tb_demo.frm,存储表定义:     2>tb_demo.MYD,存储数据:     3>tb_demo.MYI, 存储索引.   特点: 查询快,写入慢,支持表锁,支持符合全文索引    适合管理邮件,web服务器的日志数据,选择密集结构表的时候用,插入密集结构   表的时候用2,innodb     1>更新密集的表.InnoDB存储引擎

02: MySQL 索引类型 、 MySQL 存储引擎

day02一.mysql索引二.MySQL存储引擎+++++++++++++++++++++++++++++++++++一.mysql索引1.1 索引介绍 : 相当于 "书的目录" 5000页1~200 目录信息拼音排序部首排序笔画排序 201~5000 正文 1.2 索引的优点与缺点?优点 加快查询的速度缺点 占用物理存储空间,减慢写的速度. 姓名 性别 班级 年龄jimjimNULL 1.3 使用普通索引index:(在表中的字段上创建索引)使用规则?查看 desc 表名: key

Mysql字段操作—增加字段、删除字段、修改字段名、修改字段类型(约束条件) 【转】

1.增加字段:    alter table   tablename    add   new_field_id   type   not null default '0';     例:     alter table mmanapp_mmanmedia add appid_id integer not null default 372; 增加主键: alter table  tabelname   add   new_field_id   type    default 0 not null

MySQL索引创建与删除,MySQL存储引擎的配置

MySQL索引创建与删除 1.1 问题 本案例要求熟悉MySQL索引的类型及操作方法,主要练习以下任务: 普通索引.唯一索引.主键索引的创建/删除 自增主键索引的创建/删除 建立员工表yg.工资表gz,数据内容如表-1.表-2所示,设置外键实现同步更新与同步删除 表-1 员工表yg的数据 表-2 工资表gz的数据 1.2 步骤 实现此案例需要按照如下步骤进行. 步骤一:索引的创建与删除 创建表的时候指定INDEX索引字段 创建库home: mysql> create database home;

mysql存储引擎

mysql的物理文件组成包括错误日志,查询日志,慢查询日志,事务日志,二进制日志. 日志文件中记录mysql数据库运行期间发生的变化,记录mysql数据库的客户端连接状况,sql语句的执行情况和错误信息. mysql的逻辑结构可以看成是二层架构,第一层叫做SQL layes,数据库系统处理底层数据库之前的所有工作都在这一层完成,包括权限判断,sql解析,执行计划优化,query cache的处理等.第二层就是存储引擎层,叫做storage engine layes,也是底层数据存取操作实现部分,

mysql 存储引擎 myisam innodb 区别

虽然MySQL里的存储引擎不只是MyISAM与InnoDB这两个,但常用的就是它俩了.可能有站长并未注意过MySQL的存储引擎,其实存储引擎也是数据库设计里的一大重要点,那么博客系统应该使用哪种存储引擎呢?下面我们分别来看两种存储引擎的区别. MySQL存储引擎MyISAM与InnoDB的区别 一.InnoDB支持事务,MyISAM不支持,这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了. 二.MyISAM适合查询以及插入为主的

MySQL存储引擎比较

MySQL常用的存储引擎为MyISAM.InnoDB.MEMORY.MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表. MyISAM是MySQL的默认存储引擎.MyISAM不支持事务.也不支持外键,但其访问速度快,对事务完整性没有要求. InnoDB存储引擎提供了具有提交.回滚和崩溃恢复能力的事务安全.但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引. MEMORY存储引擎使用存在内存中的内容来创建表.每个MEMORY表

MySQL存储引擎比较(转)

MySQL常用的存储引擎为MyISAM.InnoDB.MEMORY.MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表. MyISAM是MySQL的默认存储引擎.MyISAM不支持事务.也不支持外键,但其访问速度快,对事务完整性没有要求. InnoDB存储引擎提供了具有提交.回滚和崩溃恢复能力的事务安全.但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引. MEMORY存储引擎使用存在内存中的内容来创建表.每个MEMORY表

第 3 章 MySQL 存储引擎简介

3.1MySQL 存储引擎概述 到后来,MySQL 意识到需要更改架构,将前端的业务逻辑和后端数据存储以清晰的层次结构拆分开的同时,对ISAM 做了功能上面的扩展和代码的重构,这就是MyISAM存储引擎的由来. MySQL 的插件式存储引擎主要包括MyISAM,Innodb,NDB Cluster,Maria,Falcon, Memory,Archive,Merge,Federated 等,其中最著名而且使用最为广泛的MyISAM 和Innodb两种存储引擎.MyISAM 是MySQL 最早的I