mysql主键和存储引擎

7.5、主键约束(primary key,简称PK)非常重要五颗星*****

    主键约束的相关术语?
        主键约束:就是一种约束。
        主键字段:该字段上添加了主键约束,这样的字段叫做:主键字段
        主键值:主键字段中的每一个值都叫做:主键值。
    
    什么是主键?有啥用?
        主键值是每一行记录的唯一标识。
        主键值是每一行记录的身份证号!!!
    
    记住:任何一张表都应该有主键,没有主键,表无效!!

    主键的特征:not null + unique(主键值不能是NULL,同时也不能重复!)

    怎么给一张表添加主键约束呢?
        drop table if exists t_vip;
        // 1个字段做主键,叫做:单一主键
        create table t_vip(
            id int primary key,  //列级约束
            name varchar(255)
        );
        insert into t_vip(id,name) values(1,'zhangsan');
        insert into t_vip(id,name) values(2,'lisi');

        //错误:不能重复
        insert into t_vip(id,name) values(2,'wangwu');
        ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'

        //错误:不能为NULL
        insert into t_vip(name) values('zhaoliu');
        ERROR 1364 (HY000): Field 'id' doesn't have a default value
    
    可以这样添加主键吗,使用表级约束?
        drop table if exists t_vip;
        create table t_vip(
            id int,
            name varchar(255),
            primary key(id)  // 表级约束
        );
        insert into t_vip(id,name) values(1,'zhangsan');

        //错误
        insert into t_vip(id,name) values(1,'lisi');
        ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    
    表级约束主要是给多个字段联合起来添加约束?
        drop table if exists t_vip;
        // id和name联合起来做主键:复合主键!!!!
        create table t_vip(
            id int,
            name varchar(255),
            email varchar(255),
            primary key(id,name)
        );
        insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');
        insert into t_vip(id,name,email) values(1,'lisi','lisi@123.com');

        //错误:不能重复
        insert into t_vip(id,name,email) values(1,'lisi','lisi@123.com');
        ERROR 1062 (23000): Duplicate entry '1-lisi' for key 'PRIMARY'

        在实际开发中不建议使用:复合主键。建议使用单一主键!
        因为主键值存在的意义就是这行记录的身份证号,只要意义达到即可,单一主键可以做到。
        复合主键比较复杂,不建议使用!!!
    
    一个表中主键约束能加两个吗?
        drop table if exists t_vip;
        create table t_vip(
            id int primary key,
            name varchar(255) primary key
        );
        ERROR 1068 (42000): Multiple primary key defined
        结论:一张表,主键约束只能添加1个。(主键只能有1个。)
    
    主键值建议使用:
        int
        bigint
        char
        等类型。

        不建议使用:varchar来做主键。主键值一般都是数字,一般都是定长的!

    主键除了:单一主键和复合主键之外,还可以这样进行分类?
        自然主键:主键值是一个自然数,和业务没关系。
        业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值。这就是业务主键!

        在实际开发中使用业务主键多,还是使用自然主键多一些?
            自然主键使用比较多,因为主键只要做到不重复就行,不需要有意义。
            业务主键不好,因为主键一旦和业务挂钩,那么当业务发生变动的时候,
            可能会影响到主键值,所以业务主键不建议使用。尽量使用自然主键。

    在mysql当中,有一种机制,可以帮助我们自动维护一个主键值?
        drop table if exists t_vip;
        create table t_vip(
            id int primary key auto_increment, //auto_increment表示自增,从1开始,以1递增!
            name varchar(255)
        );
        insert into t_vip(name) values('zhangsan');
        insert into t_vip(name) values('zhangsan');
        insert into t_vip(name) values('zhangsan');
        insert into t_vip(name) values('zhangsan');
        insert into t_vip(name) values('zhangsan');
        insert into t_vip(name) values('zhangsan');
        insert into t_vip(name) values('zhangsan');
        insert into t_vip(name) values('zhangsan');
        select * from t_vip;

        +----+----------+
        | id | name     |
        +----+----------+
        |  1 | zhangsan |
        |  2 | zhangsan |
        |  3 | zhangsan |
        |  4 | zhangsan |
        |  5 | zhangsan |
        |  6 | zhangsan |
        |  7 | zhangsan |
        |  8 | zhangsan |
        +----+----------+

注意: insert into t_vip(name) values('zhangsan');

不能省略除主键列外,要添加列的列名。

 insert into t_vip values('zhangsan');//错误

8、存储引擎(了解内容)

8.1、什么是存储引擎,有什么用呢?
    存储引擎是MySQL中特有的一个术语,其它数据库中没有。(Oracle中有,但是不叫这个名字)
    存储引擎这个名字高端大气上档次。
    实际上存储引擎是一个表存储/组织数据的方式。
    不同的存储引擎,表存储数据的方式不同。
    
InnoDB存储引擎?
    这是mysql默认的存储引擎,同时也是一个重量级的存储引擎。
    InnoDB支持事务,支持数据库崩溃后自动恢复机制。
    InnoDB存储引擎最主要的特点是:非常安全。

    它管理的表具有下列主要特征:
        – 每个 InnoDB 表在数据库目录中以.frm 格式文件表示
        – InnoDB 表空间 tablespace 被用于存储表的内容(表空间是一个逻辑名称。表空间存储数据+索引。)

        – 提供一组用来记录事务性活动的日志文件
        – 用 COMMIT(提交)、SAVEPOINT 及ROLLBACK(回滚)支持事务处理
        – 提供全 ACID 兼容
        – 在 MySQL 服务器崩溃后提供自动恢复
        – 多版本(MVCC)和行级锁定
        – 支持外键及引用的完整性,包括级联删除和更新
    
    InnoDB最大的特点就是支持事务:
        以保证数据的安全。效率不是很高,并且也不能压缩,不能转换为只读,
        不能很好的节省存储空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值