zoukankan      html  css  js  c++  java
  • MariaDB数据库----查(实例演示)

    MariaDB数据--查

    基础查询

    查询

    • 添加数据
    MariaDB [test]> insert into huluwa values 
        -> (1 ,'葫芦爷爷',73,1.75,'boy','yes'),
        -> (2,'大娃',7,1.72,'boy','yes'),
        -> (3,'二娃',6,1.63,'girl','yes');
    Query OK, 3 rows affected (0.026 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    MariaDB [test]> insert into huluwa(id,name,age,lost) values 
        -> (4,'三娃',5,'no'),
        -> (5,'四娃',4,'no');
    Query OK, 2 rows affected (0.004 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    MariaDB [test]> insert into huluwa values 
        -> (6,'五娃',3,1.38,'boy','no'),
        -> (7,'六娃',2,1.82,'boy','no'),
        -> (8,'七娃',3,1.83,'girl','no');
    Query OK, 3 rows affected (0.385 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    
    • 查询所有数据; 耗内存 (葫芦娃数据)
    MariaDB [test1]> -- select * from 表名
    MariaDB [test1]> select * from huluwa;
    +----+--------------+------+------+--------+------+
    | id | name         | age  | high | gender | lost |
    +----+--------------+------+------+--------+------+
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    | yes  |
    |  2 | 大娃         |    7 | 1.72 | boy    | yes  |
    |  3 | 二娃         |    6 | 1.63 | girl   | yes  |
    |  4 | 三娃         |    5 | NULL | unknow | no   |
    |  5 | 四娃         |    4 | NULL | unknow | no   |
    |  6 | 五娃         |    3 | 1.38 | boy    | no   |
    |  7 | 六娃         |    2 | 1.82 | boy    | no   |
    |  8 | 七娃         |    3 | 1.83 | girl   | no   |
    +----+--------------+------+------+--------+------+
    
    
    • 一定条件查询(查看丢了的葫芦娃)
    MariaDB [test1]> select * from huluwa  where lost='yes';
    +----+--------------+------+------+--------+------+
    | id | name         | age  | high | gender | lost |
    +----+--------------+------+------+--------+------+
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    | yes  |
    |  2 | 大娃         |    7 | 1.72 | boy    | yes  |
    |  3 | 二娃         |    6 | 1.63 | girl   | yes  |
    +----+--------------+------+------+--------+------+
    
    • 给字段起别名--as
    MariaDB [test1]> select gender as '性别',lost as '丢了没?',name from huluwa;
    +--------+--------------+--------------+
    | 性别   | 丢了没?     | name         |
    +--------+--------------+--------------+
    | boy    | yes          | 葫芦爷爷     |
    | boy    | yes          | 大娃         |
    | girl   | yes          | 二娃         |
    | unknow | no           | 三娃         |
    | unknow | no           | 四娃         |
    | boy    | no           | 五娃         |
    | boy    | no           | 六娃         |
    | girl   | no           | 七娃         |
    +--------+--------------+--------------+
    
    • 通过表名字查询
    MariaDB [test1]> select huluwa.name from huluwa;
    +--------------+
    | name         |
    +--------------+
    | 葫芦爷爷     |
    | 大娃         |
    | 二娃         |
    | 三娃         |
    | 四娃         |
    | 五娃         |
    | 六娃         |
    | 七娃         |
    +--------------+
    
    
    • 消除重复行 distinct
    MariaDB [test1]> select distinct age from huluwa;
    +------+
    | age  |
    +------+
    |   73 |
    |    7 |
    |    6 |
    |    5 |
    |    4 |
    |    3 |
    |    2 |
    +------+
    
    
    • 条件查询---between
    MariaDB [test1]> select * from huluwa where age between 3 and 6;
    +----+--------+------+------+--------+------+
    | id | name   | age  | high | gender | lost |
    +----+--------+------+------+--------+------+
    |  3 | 二娃   |    6 | 1.63 | girl   | yes  |
    |  4 | 三娃   |    5 | NULL | unknow | no   |
    |  5 | 四娃   |    4 | NULL | unknow | no   |
    |  6 | 五娃   |    3 | 1.38 | boy    | no   |
    |  8 | 七娃   |    3 | 1.83 | girl   | no   |
    +----+--------+------+------+--------+------+
    
    
    • 条件查询---not : 取反
    MariaDB [test1]> select * from huluwa where age not between 3 and 6;
    +----+--------------+------+------+--------+------+
    | id | name         | age  | high | gender | lost |
    +----+--------------+------+------+--------+------+
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    | yes  |
    |  2 | 大娃         |    7 | 1.72 | boy    | yes  |
    |  7 | 六娃         |    2 | 1.82 | boy    | no   |
    +----+--------------+------+------+--------+------+
    
    
    MariaDB [test1]> select * from huluwa where not (age > 3 and age < 6);
    +----+--------------+------+------+--------+------+
    | id | name         | age  | high | gender | lost |
    +----+--------------+------+------+--------+------+
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    | yes  |
    |  2 | 大娃         |    7 | 1.72 | boy    | yes  |
    |  3 | 二娃         |    6 | 1.63 | girl   | yes  |
    |  6 | 五娃         |    3 | 1.38 | boy    | no   |
    |  7 | 六娃         |    2 | 1.82 | boy    | no   |
    |  8 | 七娃         |    3 | 1.83 | girl   | no   |
    +----+--------------+------+------+--------+------+
    
    
    • 条件查询---and, or
    MariaDB [test1]> select name,gender,lost as '丢了没?' from huluwa where age > 3 and lost='no';
    +--------+--------+--------------+
    | name   | gender | 丢了没?     |
    +--------+--------+--------------+
    | 三娃   | unknow | no           |
    | 四娃   | unknow | no           |
    +--------+--------+--------------+
    
    
    MariaDB [test1]> select name,gender,lost as '丢了没?' from huluwa where age > 3 or lost='no';
    +--------------+--------+--------------+
    | name         | gender | 丢了没?     |
    +--------------+--------+--------------+
    | 葫芦爷爷     | boy    | yes          |
    | 大娃         | boy    | yes          |
    | 二娃         | girl   | yes          |
    | 三娃         | unknow | no           |
    | 四娃         | unknow | no           |
    | 五娃         | boy    | no           |
    | 六娃         | boy    | no           |
    | 七娃         | girl   | no           |
    +--------------+--------+--------------+
    
    

    模糊查询

    like
    % 代替一个或多个字符
    _ 下划线代替一个字符

    MariaDB [test1]> select * from huluwa where name like '%大%';
    +----+--------+------+------+--------+------+
    | id | name   | age  | high | gender | lost |
    +----+--------+------+------+--------+------+
    |  2 | 大娃   |    7 | 1.72 | boy    | yes  |
    +----+--------+------+------+--------+------+
    
    
    MariaDB [test1]> select * from huluwa where name like '____';
    +----+--------------+------+------+--------+------+
    | id | name         | age  | high | gender | lost |
    +----+--------------+------+------+--------+------+
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    | yes  |
    +----+--------------+------+------+--------+------+
    
    
    • 判断是否为空 --- is null
    MariaDB [test1]> select * from huluwa where high is null;
    +----+--------+------+------+--------+------+
    | id | name   | age  | high | gender | lost |
    +----+--------+------+------+--------+------+
    |  4 | 三娃   |    5 | NULL | unknow | no   |
    |  5 | 四娃   |    4 | NULL | unknow | no   |
    +----+--------+------+------+--------+------+
    
    
    • 判断是否为空 --- is not null
    MariaDB [test1]> select * from huluwa where high is not null;
    +----+--------------+------+------+--------+------+
    | id | name         | age  | high | gender | lost |
    +----+--------------+------+------+--------+------+
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    | yes  |
    |  2 | 大娃         |    7 | 1.72 | boy    | yes  |
    |  3 | 二娃         |    6 | 1.63 | girl   | yes  |
    |  6 | 五娃         |    3 | 1.38 | boy    | no   |
    |  7 | 六娃         |    2 | 1.82 | boy    | no   |
    |  8 | 七娃         |    3 | 1.83 | girl   | no   |
    +----+--------------+------+------+--------+------+
    
    

    排序

    -- order by 字段
    -- asc 升序
    -- desc 降序

    • 身高降序排序
    MariaDB [test1]> select * from huluwa order by high desc;
    +----+--------------+------+------+--------+------+
    | id | name         | age  | high | gender | lost |
    +----+--------------+------+------+--------+------+
    |  8 | 七娃         |    3 | 1.83 | girl   | no   |
    |  7 | 六娃         |    2 | 1.82 | boy    | no   |
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    | yes  |
    |  2 | 大娃         |    7 | 1.72 | boy    | yes  |
    |  3 | 二娃         |    6 | 1.63 | girl   | yes  |
    |  6 | 五娃         |    3 | 1.38 | boy    | no   |
    |  4 | 三娃         |    5 | NULL | unknow | no   |
    |  5 | 四娃         |    4 | NULL | unknow | no   |
    +----+--------------+------+------+--------+------+
    
    
    • 男孩身高排序
    MariaDB [test1]> select * from huluwa where gender='boy' order by high ;
    +----+--------------+------+------+--------+------+
    | id | name         | age  | high | gender | lost |
    +----+--------------+------+------+--------+------+
    |  6 | 五娃         |    3 | 1.38 | boy    | no   |
    |  2 | 大娃         |    7 | 1.72 | boy    | yes  |
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    | yes  |
    |  7 | 六娃         |    2 | 1.82 | boy    | no   |
    +----+--------------+------+------+--------+------+
    
    
    • 按年龄降序,年龄相同按身高降序;
    MariaDB [test1]> select * from huluwa order by age desc ,high desc ;
    +----+--------------+------+------+--------+------+
    | id | name         | age  | high | gender | lost |
    +----+--------------+------+------+--------+------+
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    | yes  |
    |  2 | 大娃         |    7 | 1.72 | boy    | yes  |
    |  3 | 二娃         |    6 | 1.63 | girl   | yes  |
    |  4 | 三娃         |    5 | NULL | unknow | no   |
    |  5 | 四娃         |    4 | NULL | unknow | no   |
    |  8 | 七娃         |    3 | 1.83 | girl   | no   |
    |  6 | 五娃         |    3 | 1.38 | boy    | no   |
    |  7 | 六娃         |    2 | 1.82 | boy    | no   |
    +----+--------------+------+------+--------+------+
    
    
    • 数字类型的列可以进行四则运算,无法转换为整数的以0计算
    select *,age*1.5 from huluwa ;
    
    • 也支持ifnull语句
    select *,age+ifnull(high,1) from huluwa ;
    

    聚合函数

    -- 总数
    -- count
    -- 查询男孩多少

    MariaDB [test1]> select count(*) as '男娃总人数' from huluwa where gender='boy';
    +-----------------+
    | 男娃总人数      |
    +-----------------+
    |               4 |
    +-----------------+
    
    

    -- 最大值
    -- max
    -- 最高身高

    MariaDB [test1]> select max(high) as '最高男孩' from huluwa where gender='boy';
    +--------------+
    | 最高男孩     |
    +--------------+
    |         1.82 |
    +--------------+
    
    

    -- 求和 sum
    -- 计算身高总和

    MariaDB [test1]> select sum(high) from huluwa;
    +-----------+
    | sum(high) |
    +-----------+
    |     10.13 |
    +-----------+
    
    

    -- 平均值 avg
    -- 计算平均身高 (round 保留两位小数)

    MariaDB [test1]> select round(avg(high),2) from huluwa;
    +--------------------+
    | round(avg(high),2) |
    +--------------------+
    |               1.69 |
    +--------------------+
    
    

    分组: group by

    • 按性别分组
    MariaDB [test1]> select gender from huluwa group by gender;
    +--------+
    | gender |
    +--------+
    | boy    |
    | girl   |
    | unknow |
    +--------+
    
    
    • 每组性别人数
    MariaDB [test1]> select gender ,count(*) as '人数' from huluwa group by gender;
    +--------+--------+
    | gender | 人数   |
    +--------+--------+
    | boy    |      4 |
    | girl   |      2 |
    | unknow |      2 |
    +--------+--------+
    
    
    • 组人数超过三人的组的组员人名(group_concat , having)
    MariaDB [test1]> select gender,group_concat(name) from huluwa group by gender having count(*) > 3;
    +--------+-----------------------------------+
    | gender | group_concat(name)                |
    +--------+-----------------------------------+
    | boy    | 葫芦爷爷,大娃,五娃,六娃           |
    +--------+-----------------------------------+
    
    

    分段查询

    示例1:查询第四行后面的两行(即:第五行和第六行)信息

    MariaDB [test1]> select * from huluwa limit 4,2;
    +----+--------+------+------+--------+------+
    | id | name   | age  | high | gender | lost |
    +----+--------+------+------+--------+------+
    |  5 | 四娃   |    4 | NULL | unknow | no   |
    |  6 | 五娃   |    3 | 1.38 | boy    | no   |
    +----+--------+------+------+--------+------+
    
    

    示例2:

    MariaDB [test1]> select * from huluwa where gender=1 limit 2,2;
    +----+--------+------+------+--------+------+
    | id | name   | age  | high | gender | lost |
    +----+--------+------+------+--------+------+
    |  6 | 五娃   |    3 | 1.38 | boy    | no   |
    |  7 | 六娃   |    2 | 1.82 | boy    | no   |
    +----+--------+------+------+--------+------+
    
    MariaDB [test1]> select * from huluwa where gender=1;
    +----+--------------+------+------+--------+------+
    | id | name         | age  | high | gender | lost |
    +----+--------------+------+------+--------+------+
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    | yes  |
    |  2 | 大娃         |    7 | 1.72 | boy    | yes  |
    |  6 | 五娃         |    3 | 1.38 | boy    | no   |
    |  7 | 六娃         |    2 | 1.82 | boy    | no   |
    +----+--------------+------+------+--------+------+
    4 rows in set (0.000 sec)
    

    连接查询

    • 自关联查询
    MariaDB [test1]> select * from heros;
    +-----+--------------+------+
    | aid | name         | pid  |
    +-----+--------------+------+
    |   1 | 动画片       | NULL |
    |   2 | 纪录片       | NULL |
    |   3 | 武侠片       | NULL |
    |   4 | 葫芦娃       |    1 |
    |   5 | 小虎还乡     |    1 |
    |   6 | 天龙八部     |    3 |
    +-----+--------------+------+
    
    
    • 自关联查询--内关联:inner join ... on
    MariaDB [test1]> select * from heros as movie inner join heros as human on movie.aid=human.pid;
    +-----+-----------+------+-----+--------------+------+
    | aid | name      | pid  | aid | name         | pid  |
    +-----+-----------+------+-----+--------------+------+
    |   1 | 动画片    | NULL |   4 | 葫芦娃       |    1 |
    |   1 | 动画片    | NULL |   5 | 小虎还乡     |    1 |
    |   3 | 武侠片    | NULL |   6 | 天龙八部     |    3 |
    +-----+-----------+------+-----+--------------+------+
    
    
    • 自关联+按需筛选---having

    注意:指定是哪个别名表的字段

    MariaDB [test1]> select * from heros as movie inner join heros as human on movie.aid=human.pid having movie.name='动画片';
    +-----+-----------+------+-----+--------------+------+
    | aid | name      | pid  | aid | name         | pid  |
    +-----+-----------+------+-----+--------------+------+
    |   1 | 动画片    | NULL |   4 | 葫芦娃       |    1 |
    |   1 | 动画片    | NULL |   5 | 小虎还乡     |    1 |
    +-----+-----------+------+-----+--------------+------+
    
    

    葫芦爷爷开了个学校教葫芦娃知识;

    ## 创建一个学校表(创建表)
    
    MariaDB [test1]> create table school(id int unsigned auto_increment primary key,name varchar(20),cla_id int unsigned);
    Query OK, 0 rows affected (0.009 sec)
    
    ## 开了三个班(插入表数据)
    
    MariaDB [test1]> insert into school values(0,'葫芦一班',1),(0,'葫芦二班',2),(0,'葫芦三班',3);
    Query OK, 3 rows affected (0.002 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    ## 查询下班级信息
    
    MariaDB [test1]> select * from school;
    +----+--------------+--------+
    | id | name         | cla_id |
    +----+--------------+--------+
    |  1 | 葫芦一班     |      1 |
    |  2 | 葫芦二班     |      2 |
    |  3 | 葫芦三班     |      3 |
    +----+--------------+--------+
    
    
    ## 查询葫芦娃信息
    
    MariaDB [test1]> select * from huluwa;
    +----+--------------+------+------+--------+
    | id | name         | age  | high | gender |
    +----+--------------+------+------+--------+
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    |
    |  2 | 大娃         |    7 | 1.72 | boy    |
    |  3 | 二娃         |    6 | 1.63 | girl   |
    |  4 | 三娃         |    5 | NULL | unknow |
    |  5 | 四娃         |    4 | NULL | unknow |
    |  6 | 五娃         |    3 | 1.38 | boy    |
    |  7 | 六娃         |    2 | 1.82 | boy    |
    |  8 | 七娃         |    3 | 1.83 | girl   |
    +----+--------------+------+------+--------+
    
    ## 给葫芦哇添加班级列(修改表结构--添加列)
    
    MariaDB [test1]> alter table huluwa add cla_id int;
    Query OK, 0 rows affected (0.003 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    
    ## 给葫芦娃分配班级(更新表数据)
    
    MariaDB [test1]> update huluwa set cla_id=1 where name='大娃';
    Query OK, 1 row affected (0.002 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    ...
    ...
    
    ##查看
    MariaDB [test1]> select * from huluwa;
    +----+--------------+------+------+--------+--------+
    | id | name         | age  | high | gender | cla_id |
    +----+--------------+------+------+--------+--------+
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    |   NULL |
    |  2 | 大娃         |    7 | 1.72 | boy    |      1 |
    |  3 | 二娃         |    6 | 1.63 | girl   |      2 |
    |  4 | 三娃         |    5 | NULL | unknow |      3 |
    |  5 | 四娃         |    4 | NULL | unknow |      4 |
    |  6 | 五娃         |    3 | 1.38 | boy    |      1 |
    |  7 | 六娃         |    2 | 1.82 | boy    |      2 |
    |  8 | 七娃         |    3 | 1.83 | girl   |      3 |
    +----+--------------+------+------+--------+--------+
    
    
    • 两表关联查询(内关联)
    MariaDB [test1]> select * from huluwa inner join school on school.cla_id=huluwa.cla_id;
    +----+--------+------+------+--------+--------+----+--------------+--------+
    | id | name   | age  | high | gender | cla_id | id | name         | cla_id |
    +----+--------+------+------+--------+--------+----+--------------+--------+
    |  2 | 大娃   |    7 | 1.72 | boy    |      1 |  1 | 葫芦一班     |      1 |
    |  3 | 二娃   |    6 | 1.63 | girl   |      2 |  2 | 葫芦二班     |      2 |
    |  4 | 三娃   |    5 | NULL | unknow |      3 |  3 | 葫芦三班     |      3 |
    |  6 | 五娃   |    3 | 1.38 | boy    |      1 |  1 | 葫芦一班     |      1 |
    |  7 | 六娃   |    2 | 1.82 | boy    |      2 |  2 | 葫芦二班     |      2 |
    |  8 | 七娃   |    3 | 1.83 | girl   |      3 |  3 | 葫芦三班     |      3 |
    +----+--------+------+------+--------+--------+----+--------------+--------+
    
    
    • 两表关联查询(左关联)
    MariaDB [test1]> select * from huluwa left join school on school.cla_id=huluwa.cla_id;
    +----+--------------+------+------+--------+--------+------+--------------+--------+
    | id | name         | age  | high | gender | cla_id | id   | name         | cla_id |
    +----+--------------+------+------+--------+--------+------+--------------+--------+
    |  2 | 大娃         |    7 | 1.72 | boy    |      1 |    1 | 葫芦一班     |      1 |
    |  6 | 五娃         |    3 | 1.38 | boy    |      1 |    1 | 葫芦一班     |      1 |
    |  3 | 二娃         |    6 | 1.63 | girl   |      2 |    2 | 葫芦二班     |      2 |
    |  7 | 六娃         |    2 | 1.82 | boy    |      2 |    2 | 葫芦二班     |      2 |
    |  4 | 三娃         |    5 | NULL | unknow |      3 |    3 | 葫芦三班     |      3 |
    |  8 | 七娃         |    3 | 1.83 | girl   |      3 |    3 | 葫芦三班     |      3 |
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    |   NULL | NULL | NULL         |   NULL |
    |  5 | 四娃         |    4 | NULL | unknow |      4 | NULL | NULL         |   NULL |
    +----+--------------+------+------+--------+--------+------+--------------+--------+
    
    
    • 左关联和右关联的区别
      left join (左联接) 返回包括左表中的所有记录和右表中关联字段相等的记录
      right join (右联接) 返回包括右表中的所有记录和左表中关联字段相等的记录
      inner join (内关联) 只返回两个表中关联字段相等的行
    • 按需查询(需求列之间加 , )
    MariaDB [test1]> select huluwa.name as '姓名', school.name as '班级' from huluwa left join school on school.cla_id=huluwa.cla_id;
    +--------------+--------------+
    | 姓名         | 班级         |
    +--------------+--------------+
    | 大娃         | 葫芦一班     |
    | 五娃         | 葫芦一班     |
    | 二娃         | 葫芦二班     |
    | 六娃         | 葫芦二班     |
    | 三娃         | 葫芦三班     |
    | 七娃         | 葫芦三班     |
    | 葫芦爷爷     | NULL         |
    | 四娃         | NULL         |
    +--------------+--------------+
    
    
    • 查询并按葫芦娃年龄排序:order by
    MariaDB [test1]> select * from huluwa left join school on school.cla_id=huluwa.cla_id order by huluwa.age;
    +----+--------------+------+------+--------+--------+------+--------------+--------+
    | id | name         | age  | high | gender | cla_id | id   | name         | cla_id |
    +----+--------------+------+------+--------+--------+------+--------------+--------+
    |  7 | 六娃         |    2 | 1.82 | boy    |      2 |    2 | 葫芦二班     |      2 |
    |  8 | 七娃         |    3 | 1.83 | girl   |      3 |    3 | 葫芦三班     |      3 |
    |  6 | 五娃         |    3 | 1.38 | boy    |      1 |    1 | 葫芦一班     |      1 |
    |  5 | 四娃         |    4 | NULL | unknow |      4 | NULL | NULL         |   NULL |
    |  4 | 三娃         |    5 | NULL | unknow |      3 |    3 | 葫芦三班     |      3 |
    |  3 | 二娃         |    6 | 1.63 | girl   |      2 |    2 | 葫芦二班     |      2 |
    |  2 | 大娃         |    7 | 1.72 | boy    |      1 |    1 | 葫芦一班     |      1 |
    |  1 | 葫芦爷爷     |   73 | 1.75 | boy    |   NULL | NULL | NULL         |   NULL |
    +----+--------------+------+------+--------+--------+------+--------------+--------+
    
    

    视图

    1. 视图的本质:就是对查询的封装
    2. 视图数据不能增,删,改
    3. 以 v_ 开头命名
    ## 创建视图
    
    MariaDB [test1]> create view 视图名 as select语句;
    
    MariaDB [test1]> create view v_class as select huluwa.name as '姓名', school.name as '班级' from huluwa left join school on school.cla_id=huluwa.cla_id;
    Query OK, 0 rows affected (0.004 sec)
    
    ##查看视图
    
    MariaDB [test1]> show tables;
    +-----------------+
    | Tables_in_test1 |
    +-----------------+
    | heros           |
    | huluwa          |
    | school          |
    | v_class         |
    +-----------------+
    
    
    ##删除视图
    
    MariaDB [test1]> drop view v_class;
    Query OK, 0 rows affected (0.000 sec)
    
    

    外键 foreign key

    1. 如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从表),也叫子实体(子表)

    2. 对关系字段进行约束,当为从表中的关系字段填写值时,会到关联的主表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并报错

    ## (因为外键需要对应)对表做些改动
    
    MariaDB [test1]> select * from huluwa;
    +----+--------+------+------+--------+--------+
    | id | name   | age  | high | gender | cla_id |
    +----+--------+------+------+--------+--------+
    |  2 | 大娃   |    7 | 1.72 | boy    |      1 |
    |  3 | 二娃   |    6 | 1.63 | girl   |      2 |
    |  4 | 三娃   |    5 | NULL | unknow |      3 |
    |  5 | 四娃   |    4 | NULL | unknow |      4 |
    |  6 | 五娃   |    3 | 1.38 | boy    |      1 |
    |  7 | 六娃   |    2 | 1.82 | boy    |      2 |
    |  8 | 七娃   |    3 | 1.83 | girl   |      3 |
    +----+--------+------+------+--------+--------+
    7 rows in set (0.001 sec)
    
    MariaDB [test1]> select * from school;
    +----+--------------+--------+
    | id | name         | cla_id |
    +----+--------------+--------+
    |  1 | 葫芦一班     |      1 |
    |  2 | 葫芦二班     |      2 |
    |  3 | 葫芦三班     |      3 |
    |  4 | 葫芦四班     |      4 |
    +----+--------------+--------+
    
    ## 查看表结构(关联键须同type)
    
    MariaDB [test1]> desc school;
    +--------+------------------+------+-----+---------+----------------+
    | Field  | Type             | Null | Key | Default | Extra          |
    +--------+------------------+------+-----+---------+----------------+
    | id     | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | name   | varchar(20)      | YES  |     | NULL    |                |
    | cla_id | int(10) unsigned | YES  |     | NULL    |                |
    +--------+------------------+------+-----+---------+----------------+
    3 rows in set (0.001 sec)
    
    MariaDB [test1]> alter table huluwa change cla_id cla_id int unsigned;
    Query OK, 7 rows affected (0.055 sec)              
    Records: 7  Duplicates: 0  Warnings: 0
    
    MariaDB [test1]> desc huluwa;
    +--------+-----------------------------+------+-----+---------+----------------+
    | Field  | Type                        | Null | Key | Default | Extra          |
    +--------+-----------------------------+------+-----+---------+----------------+
    | id     | int(10) unsigned            | NO   | PRI | NULL    | auto_increment |
    | name   | varchar(10)                 | YES  |     | NULL    |                |
    | age    | tinyint(3) unsigned         | YES  |     | NULL    |                |
    | high   | decimal(5,2)                | YES  |     | NULL    |                |
    | gender | enum('boy','girl','unknow') | YES  |     | unknow  |                |
    | cla_id | int(10) unsigned            | YES  |     | NULL    |                |
    +--------+-----------------------------+------+-----+---------+----------------+
    
    
    ## 给葫芦娃表添加外键
    
    -- 外键必须受约束于主键;即(school(id)中的id必须是主键)
    -- 外键和主键的结构需要一样,即(type相同)
    
    MariaDB [test1]> alter table huluwa add constraint fk foreign key(cla_id) references school(id);
    Query OK, 7 rows affected (0.052 sec)              
    Records: 7  Duplicates: 0  Warnings: 0
    
    
    ## 删除外键
    
    MariaDB [test1]> alter table huluwa drop foreign key fk;
    Query OK, 0 rows affected (0.002 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    
    ## 添加  级联删除的外键(删除父表内容,子表数据级联删除):on delete cascade
    
    MariaDB [test1]> alter table huluwa add constraint fk2 foreign key(cla_id) references school(id) on delete cascade;
    Query OK, 7 rows affected (0.058 sec)              
    Records: 7  Duplicates: 0  Warnings: 0
    
    
    ## 删除父表内容
    
    MariaDB [test1]> delete from school where id=1;
    Query OK, 1 row affected (0.002 sec)
    
    ## 查看
    
    MariaDB [test1]> select * from school;
    +----+--------------+--------+
    | id | name         | cla_id |
    +----+--------------+--------+
    |  2 | 葫芦二班     |      2 |
    |  3 | 葫芦三班     |      3 |
    |  4 | 葫芦四班     |      4 |
    +----+--------------+--------+
    3 rows in set (0.000 sec)
    
    MariaDB [test1]> select * from huluwa;
    +----+--------+------+------+--------+--------+
    | id | name   | age  | high | gender | cla_id |
    +----+--------+------+------+--------+--------+
    |  3 | 二娃   |    6 | 1.63 | girl   |      2 |
    |  4 | 三娃   |    5 | NULL | unknow |      3 |
    |  5 | 四娃   |    4 | NULL | unknow |      4 |
    |  7 | 六娃   |    2 | 1.82 | boy    |      2 |
    |  8 | 七娃   |    3 | 1.83 | girl   |      3 |
    +----+--------+------+------+--------+--------+
    
    
    ## 查看外键  
    
    -- show create table  表名
    

    索引

    • 索引作用:当数据库中数据量很大时,可以加快索引速度,但不是越多越好,数据y有大量变动的不适合添加索引;
    -- create index 索引名 on 表名(字段名)
    
    MariaDB [test1]> create index age_index on huluwa(age);
    Query OK, 0 rows affected (0.013 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    
    -- 查看索引
    
    show index from 表名;
    
    -- 删除索引
    
    drop index 索引名 on 表名;
    

  • 相关阅读:
    Go笔记-接口(interface)
    Go学习笔记-结构体中的方法
    Go学习笔记-数组和切片
    处理器的工作流程
    MySQL重温笔记-索引
    Mysql中为什么应该尽量避免使列默认值为NULL
    which、whereis、find的区别
    linux下查找大文件和大目录
    【转】Linux设置定时任务方法
    [转]python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别
  • 原文地址:https://www.cnblogs.com/du-z/p/11133406.html
Copyright © 2011-2022 走看看