MySql教程

MySQL基础(二)

本文主要是介绍MySQL基础(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

存储引擎

1.概念:存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制
2.查看存储引擎的方式
    show engines;
3.mysql支持的存储引擎
    MyISAM
        MySQL5.5之前默认的存储引擎
            不支持事务、行级锁和外键,针对数据的操作较于InnoDB不够安全
            但是数据的存取速度较于InnoDB更快
    InnoDB
        MySQL5.5之后默认的存储引擎
            支持事务、行级锁和外键,针对数据的操作更加安全
    memory
        基于内存存取数据
            速度最快但是断电立刻丢失
    blackhole
        写入其中的数据都会立刻消失,类似于垃圾处理站
4.存储引擎创建表的不同点
    create table t1(id int) engine=myisam;
    create table t2(id int) engine=innodb;
    cerate table t3(id int) engine=memory;
    create table t4(id int) engine=blackhole;
    '''
    MyISAM会创建三个文件
        .frm    表结构文件
        .MYD    表数据文件
        .MYI    表索引文件(索引是用来加快数据查询的)
    InnoDB会创建两个文件
        .frm    表结构文件
        .ibd    表数据和表索引文件
    memory
        .frm    表结构文件
    blackhole
        .frm    表结构文件
    '''

MySQL基本数据类型

1.整型
    tinyint     smallint    int     bigint
    不同的int类型能够存储的数字范围是不一样的
        是否存在负数(正负号需要占一个比特位)
    # 移除正负号
        create table t6(id tinyint unsigned);
2.浮点型
    float   double  decimal
    float(255,30)   # 总共255位 小数位占30位
    double(255,30)  # 总共255位 小数位占30位
    decimal(65,30)  # 总共65位 小数位占30位
    # 三者的精确度不一样
        float < double < decimal
3.字符类型
    char(4)
        定长类型,最多只能存四个字符,多了报错少了自动空格填充至四个
    varchar(4)
        变长类型,最多只能存四个字符,多了报错少了有几个则存几个
    # 针对5.6版本超出范围不会报错,而是自动帮你截取并保存(此行为不合理)
    方式1:修改配置文件(永久)
    方式2:命令修改(暂时)
        show variables like '%mode%'
        set session     # 当前窗口有效
        set global      # 当前服务端有效
            set global sql_mode='strict_trans_tables'
            修改完毕后退出客户端重新进入即可
            再次执行上述命令,会直接报错
    # char_length() 统计某个字段数据的长度
    '''底层确实会填充,但是取出来的时候又会自动去除'''
        set global sql_mode='strict_trans_tables,pad_char_to_full_length'

char与varchar的对比

char
    优势:整存整取 速度快
    劣势:浪费存储空间
varchar
    优势:节省存储空间
    劣势:存取数据的速度较char慢
补充:在创建字段的时候可以加上相应的注释
    create table t9(id int comment '序号',name char(4) comment '姓名');

整形中括号内数字的作用

create table t10(id int(3));
insert into t10 values(4444444);
'''
在整型中括号内的数字并不是用来限制存储的长度,而是用来控制展示的长度
在定义整型字段的时候,不需要自己添加数字,使用默认的就可以
'''
create table t11(id int(3) zerofill);   # 宽度为3,不足用0补足
insert into t11 values(4);  # 004
# 整型比较的特殊,是唯一一个不是用来限制存储长度的类型

枚举与集合类型

枚举enum()
    多选一
    create table user(id int,name varchar(32),gender enum('male','female'));
    insert into user values(1,'ldb','male');
集合set()
    多选多(包含了多选一)
    create table userinfo(id int,name char(16),hoby set('basketball','football','reading'));
    insert into userinfo values(1,'ldb','basketball,reading');

日期类型

date        年月日
datetime    年月日时分秒
time        时分秒
year        年份
    create table client(id int,name varchar(32),reg_time date,birth datetime,study_time time,join_time year);
    insert into client values(1,'ldb','2000-11-11','2000-1-21 11:11:11','11:11:11',1997);

创建表的完整语法

create table 表名(字段名1 字段类型(数字) 约束条件,...);
'''
1.字段名和字段类型是必须的
2.数字和约束条件是可选的,并且约束条件可以有多个 空格隔开即可
3.最后一个语句的结尾不要加逗号
'''

约束条件

unsigned    # 让数字没有正负号
zerofill    # 多余的使用数字0填充
not null    # 非空
'''
新增数据的方式
    方式1:按照字段顺序一一传值
        insert into user values(值1,值2,...);
    方式2:自定义传值顺序
        insert into user(name,id) values('ldb',1);
在MySQL中不传数据,会使用关键字NULL填充意思就是空
'''
    create table t3(id int,name varchar(32) not null);
default     # 默认值
    create table t4(id int,name varchar(32) default 'ldb');
unique      # 唯一值
    # 单列唯一
        create table t5(id int,name varchar(32) unique);
    # 联合唯一
        create table t6(id int,host varchar(32),port int,unique(host,port));
primary key     # 主键
    '''
    从约束层面上来说,相当于是not null+unique(非空且唯一)
    在此基础上还可以加快数据的查询
    
    InnoDB存储引擎规定了一张表必须有且只有一个主键
        因为InnoDB是通过主键的方式来构造的
        如果没有设置主键
            情况1:没有主键和其它约束条件
                InnoDB会采用隐藏的字段作为主键,不能加快数据的查询
            情况2:没有主键但是有非空且唯一的字段,自动将该字段升级为主键
                create table t7(id int,age int not null unique,pwd int not null unique);
                create table user(id int primary key,name varchar(32));
    '''
auto_increment      # 自增
    '''
    由于主键类似于数据的唯一标识,并且主键一般都是数字类型
    在添加数据的时候不可能记住接下来的序号是多少
    '''
    create table user1(id int primary key auto_increment,name varchar(32));

自增的特性

自增不会因为删除操作而回退
    delete from无法影响自增
如果想要重置需要使用truncate关键字
    truncate 表名     # 清空表数据并且重置主键

 

这篇关于MySQL基础(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!