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 |
+----+--------------+------+------+--------+--------+------+--------------+--------+
视图
- 视图的本质:就是对查询的封装
- 视图数据不能增,删,改
- 以 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
-
如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从表),也叫子实体(子表)
-
对关系字段进行约束,当为从表中的关系字段填写值时,会到关联的主表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并报错
## (因为外键需要对应)对表做些改动
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 表名;