美文网首页
文章阅读笔记

文章阅读笔记

作者: 码农小杨 | 来源:发表于2017-09-23 09:47 被阅读0次

    1,MySQL支持大型数据库,最高可在一个表中容纳 5千多万行。每张表的默认文件大小限制为 4GB,不过如果操作系统支持,你可以将其理论限制增加到 800 万 TB。

    2,MySQL中列的自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)

    create table tb_name(
        nid int not null auto_increment primary key,
        num int null
    )ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    create table tb_name(
        nid int not null auto_increment,
        num int null,
        index(nid)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    1. 对于自增列,必须是索引(含主键)。
    2. 对于自增可以设置步长和起始值
    show session variables like 'auto_inc%';
    set session auto_increment_increment=2;
    set session auto_increment_offset=10;
    
    shwo global variables like 'auto_inc%';
    set global auto_increment_increment=2;
    set global auto_increment_offset=10;
    

    3,MySQL中的主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。

    create table tb1(
        nid int not null auto_increment primary key,
        num int null
    )
    

    create table tb1(
        nid int not null,
        num int not null,
        primary key(nid,num)
    )
    

    4,MySQL中的清空表

    -- 如果清空的表又自增列,那么在清空之后会继续上次自增的值继续自增
    delete from tb_name;
    -- 如果清空的表又自增列,那么在清空之后再次添加数据自增的值会从新开始计算
    truncate table tb_name;
    

    5,MySQL中的修改表

    -- 添加列
    alter table 表名 add 列名 类型;
    
    -- 删除列
    alter table 表名 drop column 列名;
    
    -- 修改列
    alter table 表名 modify column 列名 类型;  -- 类型
    alter table 表名 change 原列名 新列名 类型; -- 列名,类型
    
    -- 添加主键
    alter table 表名 add primary key(列名);
    
    -- 删除主键
    alter table 表名 drop primary key;
    alter table 表名  modify  列名 int, drop primary key;
    
    -- 添加外键
    alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
    
    -- 删除外键
    alter table 表名 drop foreign key 外键名称;
    
    -- 修改默认值
    ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
    
    -- 删除默认值
    ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
    

    6,MySQL中的枚举:ENUM('value1','value2',...)

    CREATE TABLE shirts (
        name VARCHAR(40),
        size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
    );
    
    INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),
      ('polo shirt','small');
    
    mysql> SELECT name, size FROM shirts WHERE size = 'medium';
    +---------+--------+
    | name    | size   |
    +---------+--------+
    | t-shirt | medium |
    +---------+--------+
    1 row in set (0.00 sec)
    
    UPDATE shirts SET size = 'small' WHERE size = 'large';
    
    COMMIT;
    

    7,MySQL中的集合:SET('value1','value2',...)

    mysql> CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
    Query OK, 5 rows affected (0.01 sec)
    Records: 5  Duplicates: 0  Warnings: 0
    
    mysql> SELECT col FROM myset;
    +------+
    | col  |
    +------+
    | a,d  |
    | a,d  |
    | a,d  |
    | a,d  |
    | a,d  |
    +------+
    5 rows in set (0.00 sec)
    

    8,MySQL Full Join的实现
    把左右两个表的数据都取出来,不管是否匹配
    MySQL Full Join的实现 因为MySQL不支持FULL JOIN,下面是替代方法

    select * from A left join B on A.id = B.id (where 条件)
    union --all可选
    select * from A right join B on A.id = B.id (where条件);
    

    相关文章

      网友评论

          本文标题:文章阅读笔记

          本文链接:https://www.haomeiwen.com/subject/drdxfxtx.html