• Python9-MySQL索引-外键-day43


    1.以ATM引出DBMS
    2、MySQL
    -服务端
    -客户端
    3、通信交流
    -授权
    -SQL语句
    -数据库
    create database db1 default charset=utf8;
    drop database db1;
    -数据表
    create table tb2;
    create table tb1(
    id int not null auto_increment primary key,
    name char(10),
    department_id int,
    constraint fk_user foreign key(department_id) reference tb2(tid)
    )engine=innodb default charset=utf-8;
    补充外键:

    什么时候用主键, 主键的用处?
    一张表只能有一个主键
    一个主键可以是多个列
    CREATE TABLE t5 (
    nid int(11) NOT NULL AUTO_INCREMENT,
    pid int(11) not NULL,
    name char(11),
    primary key(nid,pid)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;



    create table t6(
    id int auto_increment primary key,
    name char(10),
    id1 int,
    id2 int,
    CONSTRAINT fk_t5_t6 foreign key (id1,id2) REFERENCES t1(nid,pid)
    )engine=innodb default charset=utf8;
    -数据行
    insert into tb1(name,age) values('alex',19);
    delete from tb1;
    truncate talbe tb1;
    delete from tb1 where id >10;
    update tb1 set name = 'root' id >10;
    select * from tb1;
    select id,name from tb1;
    mysql> desc t5;
    +-------+---------+------+-----+---------+----------------+
    | Field | Type    | Null | Key | Default | Extra          |
    +-------+---------+------+-----+---------+----------------+
    | nid   | int(11) | NO   | PRI | NULL    | auto_increment |
    | pid   | int(11) | NO   | PRI | NULL    |                |
    | num   | int(11) | YES  |     | NULL    |                |
    +-------+---------+------+-----+---------+----------------+
    mysql> alter table t6 AUTO_INCREMENT=2;
    mysql> show create table t6 G;
    *************************** 1. row *********************
           Table: t6
    Create Table: CREATE TABLE `t6` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `num` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
    mysql> select * from t6;
    +----+------+
    | id | num  |
    +----+------+
    | 20 |   15 |
    +----+------+
    对于自增:
            desc t6;
            show create table t6 G;
             alter table t6 AUTO_INCREMENT=2;
    Mysql :自增步长
        基于会话级别:
    查看全局变量
    mysql> show session variables like 'auto_inc%';
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | auto_increment_increment | 1     |
    | auto_increment_offset    | 1     |
    +--------------------------+-------+
    设置会话步长
    mysql> set session auto_increment_increment=2;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> insert into t6(num) values(66);
    Query OK, 1 row affected (0.44 sec)
    
    mysql> select * from t6;
    +----+------+
    | id | num  |
    +----+------+
    | 20 |   15 |
    | 21 |   88 |
    | 23 |   66 |
    +----+------+
    起始值
    mysql> set session auto_increment_offset=2;
    
    
    基于全局级别步长:
    mysql> set global auto_increment_increment=200;
    mysql> show global variables like 'auto_inc%';
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | auto_increment_increment | 200   |
    | auto_increment_offset    | 1     |
    +--------------------------+-------+
    mysql> show session variables like 'auto_inc%';
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | auto_increment_increment | 200   |
    | auto_increment_offset    | 1     |
    +--------------------------+-------+
    起始值
    mysql> set global auto_increment_offset=22;
    唯一索引:约束不能重复(可以为空),加速查找;
    主键也不能重复,主键不能为空,加速查找;

    create table t1(
    id int ....,
    num int,
    xxx int
    unique uq1 (num,xxx)
    )
    一对一
    create table userinfo1(
            id int auto_increment primary key,
            name char(10),
            gender char(10),
            email varchar(64)
    )engine=innodb default charset=utf8;
    
    create table admin(
        id int not null auto_increment primary key,
        username varchar(64) not null,
        password VARCHAR(64) not null,
        user_id int not null,
        unique uq_u1 (user_id),
        CONSTRAINT fk_admin_u1 FOREIGN key (user_id) REFERENCES userinfo1(id)
    )engine=innodb default charset=utf8;
    
    多对多
    create table userinfo2(
            id int auto_increment primary key,
            name char(10),
            gender char(10),
            email varchar(64)
    )engine=innodb default charset=utf8;
    
    create table host(
        id int auto_increment primary key,
        hostname char(64)
    )engine=innodb default charset=utf8;
    
    
    create table user2host(
        id int auto_increment primary key,
        userid int not null,
        hostid int not null,
        unique uq_user_host (userid,hostid),
        CONSTRAINT fk_u2h_user FOREIGN key (userid) REFERENCES userinfo2(id),
        CONSTRAINT fk_u2h_host FOREIGN key (hostid) REFERENCES host(id)
    )engine=innodb default charset=utf8;
    MySQL语句数据行操作的补充
    增:
        insert into tb11(name,age) values('alex',12);
        insert into tb11(name,age) values('tim',12),('root',11);
        insert into tb12(name,age) select name,age from tb11;
    create table tb12(
                id int auto_increment primary key,
                name varchar(32),
                age int
            )engine=innodb default charset=utf8;
    删:
        delete from tb12;
        delete from tb12 where id=2;
        delete from tb12 where id=2 and name ='tim',
    改:
        update tb12 set name='tim' where id >12 and name = 'xx'
    查:
      select * from tb12;
      select id,name from tb12;
      select id,name from tb12 where id >10 or name ='xxx';
      select name,age  as cname from tb12;
      select name,age,111 from tb12;
      select * from tb12 where id not in (1,4,5);
      select * from tb12 where id between 1 and 201;
      select * from tb12 where id in (select id from tb11)
    
    通配符:
        select * from tb12 where name like '%a'
        select * from tb12 where name like 'a_'
    
    分页:
        select * from tb12 limit 2;
        select * from tb12 limit 1,3;
        select * from tb12 limit 2 offset 20;
    排序:
        select * from tb12 order by id desc;  大到小
        select * from tb12 order by id asc;     小到大
        select * from tb12 order by id asc limit 2;
        select * from tb12 order by age desc,id desc;
    # select mac(id),part_id from uerinfo5 group by part_id;
    # count
    # max
    # min
    # sum
    # avg
    # 对于聚合函数的结果进行二次筛选,必须用having
    # select count(id),part_id from userinfor5  group by part_id where haveing count(id) >1;
    # select count(id),part_id from userinfo5 where id >0 group by part_id haveing count(id) >1;
    连表
    select * from userinfo5 where userinfo5.part_id = department5.id;
    select * from userinfo5 left join department5 on userinfo.part_id = department5.id;
    userinfo5 左边全部显示
    
    select * from userinfo5 right join department5 on userinfo.part_id = department5.id;
    department5右边全部显示
    select * from userinfo5 innder join department5 on userinfo.part_id = department5.id;
    将出现null时一行隐藏
  • 相关阅读:
    JAVA 8的新特性
    JAVA中map的分类和各自的特性
    设计模式之工厂方法模式(附实例代码下载)
    为什么重写equals还要重写hashcode??
    C# static的用法详解
    1-RadioButton控件的用法
    C#三种常用的读取XML文件的方法
    VS2017 中安装SVN
    pip安装selenium时,报错“You are using pip version 10.0.1, however version 18.0 is available.”的问题
    问题:unknown error: call function result missing 'value' 解决方法
  • 原文地址:https://www.cnblogs.com/zhangtengccie/p/10427767.html
Copyright © 2020-2023  润新知