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 表名;

原文地址:https://www.cnblogs.com/du-z/p/11133406.html