• day42


    昨日回顾:
    
        一. 数据库的介绍
             管理数据的软件
        二. 数据库的 分类:
                a.关系型数据库
                    有约束
                b.非关系型数据库
                    没有约束
                    
        三. MySQl 的安装:
                a. exe msi文件 点击下一步下一步
                
                b. 压缩包 
                    bin 
                        mysqld : 启动mysql服务的
                        mysql  : 连接mysql
                    环境变量
        四. 数据库(文件夹)
                数据表 (文件)
                    数据行(文件行)
        
        五. 数据库:
                增:
                    create database 数据库名;
                删:    
                    drop database 数据库名;
                查:
                    show databases;
            
            数据表:
                创建:
                    create table 表名(
                        id  int auto_increment primary key 
                        列名1  列类型 [not null/ null default '' ],
                        列名2  列类型 [not null/ null default '' ],
                        列名n  列类型 [not null/ null default '' ]
                    )engine=Innodb charset=utf8;
                
                    列类型:
                        数值类型:
                            tinyint
                            samllint
                            mediumint
                            int
                            bigint
                        
                            有符号 / 无符号 (unsigned)
                        
                        
                        字符串类型:
                            
                            char varchar  text 
                                        
                        时间日期类型:
                            datetime 年月日时分秒
                
                删除:
                    drop table 表名;
                查询:
                    show tables;
                
                修改:
                    alter table 表名 change/modify 旧列名 新列声明;
                    
                    alter table 表名 add 新列声明;
                    
                    alter table 表名 drop 旧列名;
                
                
            数据行:
                
                增:
                    insert  into 表名 (列1,列2, 列n) values (值1, 值2, ..., 值n);
                
                删除:
                    delete from 表名 where id=12;;  
                    truncate 表名;
                
                修改:
                    update 表名 set name='xxxx';
                    update 表名 set name='xxxx' where id=12;
                    update 表名 set name='xxxx',age=12 where id=12;
                
                查询:
                    select  * from 表名; 
                    select name, age from 表名;
            
            
        六.外键 (一对多)
            
            作用:
                1. 约束
                2. 节省空间
            
            create table department (
                id  int auto_increment primary key, 
                depart_name varchar(32)  not null  default '',
                num int  not null default 0
            )engine=Innodb charset=utf8;
                
            create table userinfo (    
                id  int auto_increment primary key, 
                name varchar(32) not null default '',
                depart_id int not null  default 1,
                
                # constraint 外键名(fk_userinfo_depart) foreign key (列名(depart_id)) references 表名(department)(关联的列名(id)),
                # constraint fk_userinfo_depart foreign key (depart_id) references department(id)
            )engine=Innodb charset=utf8;
            
            
            ps:
                1. 不能将创建外键的语句单独拿出来
                   
                   alter table userinfo add constraint fk_userinfo_depart foreign key (depart_id) references department(id);
                   alter table userinfo drop foreign key 外键名称(fk_userinfo_depart );
                
                2. 外键关联的时候, 必须关联的是表的主键ID
                
                3. 练习的时候, 将语句写在文本中, 然后考过去执行
                
                4. 主键索引 : 加速查找 + 不能为空 + 不能重复
                
                
        今日内容:
            
            一. 外键的变种: (*********************************************************)
                    
                    1. 唯一索引:
                        
                        create table t5(
                            id int,
                            num int,
                            unique(num)
                        )engine=Innodb charset=utf8;
                        
                        作用:    
                            num列的值不能重复
                            加速查找
                            
                        create table t6(
                            id int,
                            num int,
                            unique(id, num)
                        )engine=Innodb charset=utf8;
                        
                        联合唯一索引作用:    
                            num列和id列的值不能重复
                            加速查找
                        
                        create table t6(
                            id int,
                            num int,
                            unique(id, num......)
                        )engine=Innodb charset=utf8;
            
            
                    2. 一对多:
                            
                            部门表:
                                id       depart_name
                                 1          公关部
                                 2          公共部
                                 3          保安部
                            
                            员工表:
                                id    name  age   depart_id(外键)
                                1     lxxx  12      2
                                2     xxxx  13      1
                                3     xxxx  13      2
                                
                    3. 一对一:
                            
                            用户表:
                                id    name     age  
                                1      zekai    23  
                                2      eagon    34
                                3      lxxx     45
                                4      owen     83
            
                            博客表:
                                id            url          user_id  (外键 + 唯一约束)
                                1       /linhaifeng       2
                                2       /zekai              1
                                3       /lxxx             3
                                4       /lxxx             4
                    
            
                    4.  多对多:
                            
                            用户表:
                                id    name    phone 
                                1    root1    1234
                                2    root2    1235
                                3    root3    1236
                                4    root4    1237
                                5    root5    1238
                                6    root6    1239
                                7    root7    1240
                                8    root8    1241
                                
                            主机表:
                            
                                id    hostname    
                                1    c1.com    
                                2    c2.com    
                                3    c3.com    
                                4    c4.com    
                                5    c5.com    
    
                            为了方便查询, 用户下面有多少台主机以及某一个主机上有多少个用户, 我们需要新建第三张表:
                                user2host:
                                
                                    id    userid    hostid
                                        1    1    1
                                        2    1    2
                                        3    1    3
                                        4    2    4
                                        5    2    5
                                        6    3    2
                                        7    3    4    
                            创建的时候, userid 和 hostid 必须是外键, 然后联合唯一索引 unique(userid, hostid)
                            
                            Django orm 也会设计
                            
            
            
            二. 数据行的操作:
                    
                    增:
                        insert into 表名 (列名1, 列名2,) values(值1, 值2);
                        insert into 表名 (列名1, 列名2,) values(值1, 值2),(值1,值2),(值n,值n);
                        
                        insert into 表名 (列名1, 列名2,) select 列名1, 列名2 from 表名;
                        
                    删除:
                        delete from 表名; 
                        
                        delete from 表名 where id > 10
                        delete from 表名 where id < 10
                        delete from 表名 where id <= 10
                        delete from 表名 where id >= 10
                        delete from 表名 where id != 10 
                        delete from 表名 where id = 10 and name='xxx';  and : 并且 两个条件都必须要成立
                        delete from 表名 where id = 10 or name='xxx';   or :  或者 只要满足一个条件成立
                    修改:
                        update 表名  set name='zekai', age=23 where id > 10;
                        
                    查询:
                        
                        基本:
                            select * from 表名;
                            select name , age from 表名;
                        
                        高级:
                            
                            a. where 条件查询:
                                select * from 表名 where  id=10;
                                select * from 表名 where  id >10 and id<15;
                                select * from 表名 where  id > 10;
                                != : 不等与
                                >= <= 
                                
                                
                                between and: 闭区间 
                                    select * from t4 where id between 9 and 12;
                                
                                in: 在某一个集合中
                                    select * from t4 where id in (9,10,11....);
                                    
                                    
                                    select * from t4 where id in (select id from t3 where id between 2 and 4)
                                    
                                    是可以这样使用的, 但是不建议大家使用;
                            
                            b. 通配符:
                                alex
                                
                                select * from 表 where name like 'ale%'  - ale开头的所有(多个字符串)
                                select * from 表 where name like 'ale_'  - ale开头的所有(一个字符)
    
                            c.     限制取几条:
                                    
                                    select * from 表名 limit 索引偏移量, 取出多少条数据;
                                    
                                    
                                    select * from t3 limit 0, 10;  第一页
                                    select * from t3 limit 10, 10;  第二页
                                    
                                    page = input('page:')
                                    
                                        page    索引偏移量      数据量(offset)
                                          1         0              10
                                          2         10             10
                                          3         20             10
                                          4         30             10
                                          
                                          page   (page-1)*offset   offset
                                    
                                    分页核心SQL:
                                    
                                        select * from t3 limit (page-1)*offset, offset;
                            
                            d.  排序:
                                    
                                    order by
                                    
                                    降序:
                                        select * from t4 order by 列名 desc; descending
                                    
                                    升序:
                                        select * from t4 order by 列名 asc; ascending
                            
                                    
                                    多列:
                                        
                                        create table t7(
                                        
                                            id int auto_increment primary key,
                                            num int not null default 0,
                                            age int not null default 0
                                        )charset=utf8;
                                        
                                        insert into t7 (num, age) values (2, 12),(3,13),(4, 12);
                                    
                                        select * from t4 order by num desc, name asc;
                                        
                                        如果前一列的值相等的话, 会按照后一列的值进行进一步的排序.
                            
                            e.  分组
                                    
                                    select age, 聚合函数(count(num)/sum(num)/max(num)/min(num)/avg(num)) from 表名 group by 列名;
                                    
                                    
                                    select age, avg(num) from t7 group by age;
                                     
                                    select age, count(num) from t7 group by age;
                                    
                                    select age, count(num) as cnt from t7 group by age;  显示别名 as
                                
                                    having的二次删选:
                                        select age, count(num) as cnt from t7 group by age  having cnt>1;
                                        
                                    where 和 having的区别:
                                        1). having与where类似,可筛选数据
                                        2). where针对表中的列发挥作用,查询数据
                                        3). having针对查询结果中的列发挥作用,二次筛选数据, 和group by配合使用
                            
                            f.  连表操作
                                    select * from userinfo, department; (笛卡尔积)
                                    
                                    select * from userinfo, department where userinfo.depart_id=department.id;
                                
                                    左连接:
                                    
                                        select * from userinfo left join department on userinfo.depart_id=department.id;
                                        左边的表全部显示, 右边没有用到不显示
                                    
                                    右连接:
                                        
                                        select * from userinfo right join department on userinfo.depart_id=department.id;
                                        右边的表全部显示, 左边没关联的用null表示
                                    
                                    内连接:
                                        左右两边的数据都会显示
                                    
                                    ps: 
                                        a.只需要记住左连接 left join
                                        
                                        b.可以连接多张表 通过某一个特定的条件
                                        
                        注意查询的顺序:
                            select name,sum(score) from 表 where id > 10 group by score having age> 12  order by age desc limit 2, 10 
  • 相关阅读:
    HDU 2669 Romantic【扩展欧几里德】
    POJ 1061 青蛙的约会【扩展欧几里德】
    求逆元
    扩展欧几里德算法
    HDU 3400 Line belt【三分套三分】
    HDU 2298 Toxophily 【二分+三分】
    006服务监控看板Hystrix Dashboard
    005hystrix.stream信息聚合Turbine
    003客户端负载均衡Ribbon & 短路器Hystrix
    004声明式服务调用Feign & 断路器Hystrix
  • 原文地址:https://www.cnblogs.com/WBaiC1/p/11020030.html
Copyright © 2020-2023  润新知