MySQL插入外键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL插入外键相关的知识,希望对你有一定的参考价值。

创建外键
mysql> CREATE TABLE `study_record` (
    ->   `id` int(11) NOT NULL,
    ->   `day` int NOT NULL,
    ->   `status` char(32) NOT NULL,
    ->   `stu_id` int(11) NOT NULL,
    ->   PRIMARY KEY (`id`),
    ->   KEY `fk_student_key` (`stu_id`),
    ->   CONSTRAINT `fk_student_key` FOREIGN KEY (`stu_id`) REFERENCES `student` (`id`)
    -> );
Query OK, 0 rows affected (0.05 sec)

mysql> alter table study_record modify id int auto_increment;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into study_record (day,status,stu_id) values(1,'Yes',4);
Query OK, 1 row affected (0.00 sec)

mysql> insert into study_record (day,status,stu_id) values(1,'Yes',1);
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> select * from study_record;
+----+-----+--------+--------+
| id | day | status | stu_id |
+----+-----+--------+--------+
|  1 |   1 | Yes    |      4 |
|  2 |   1 | Yes    |      1 |
+----+-----+--------+--------+
2 rows in set (0.00 sec)

mysql> insert into study_record (day,status,stu_id) values(2,'No',1);
Query OK, 1 row affected (0.01 sec)

mysql> select * from study_record;
+----+-----+--------+--------+
| id | day | status | stu_id |
+----+-----+--------+--------+
|  1 |   1 | Yes    |      4 |
|  2 |   1 | Yes    |      1 |
|  3 |   2 | No     |      1 |
+----+-----+--------+--------+
3 rows in set (0.00 sec)


mysql> select * from study_record;
+----+-----+--------+--------+
| id | day | status | stu_id |
+----+-----+--------+--------+
|  1 |   1 | Yes    |      4 |
|  2 |   1 | Yes    |      1 |
|  3 |   2 | No     |      1 |
+----+-----+--------+--------+
3 rows in set (0.00 sec)

mysql> delete from study_record where id=3;
Query OK, 1 row affected (0.02 sec)

mysql> select * from study_record;
+----+-----+--------+--------+
| id | day | status | stu_id |
+----+-----+--------+--------+
|  1 |   1 | Yes    |      4 |
|  2 |   1 | Yes    |      1 |
+----+-----+--------+--------+
2 rows in set (0.00 sec)

mysql> 


多表查询:

mysql> create table A(
    -> a int not null);
Query OK, 0 rows affected (0.04 sec)

mysql> create table B( b int not null);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into A (a) values(1);
Query OK, 1 row affected (0.01 sec)

mysql> insert into A (a) values(2);
Query OK, 1 row affected (0.00 sec)

mysql> insert into A (a) values(3);
Query OK, 1 row affected (0.00 sec)

mysql> insert into A (a) values(4);
Query OK, 1 row affected (0.00 sec)

mysql> insert into B (b) values(3);
Query OK, 1 row affected (0.02 sec)

mysql> insert into B (b) values(4);
Query OK, 1 row affected (0.00 sec)

mysql> insert into B (b) values(5);
Query OK, 1 row affected (0.00 sec)

mysql> insert into B (b) values(6);
Query OK, 1 row affected (0.00 sec)

mysql> insert into B (b) values(7);
Query OK, 1 row affected (0.00 sec)

mysql> select * from A;
+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
+---+
4 rows in set (0.00 sec)

mysql> select * from B;
+---+
| b |
+---+
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
+---+
5 rows in set (0.00 sec)

Inner join语法 其实就是只显示2个表的交集
mysql> select * from A inner join B on A.a = B.b;
+---+---+
| a | b |
+---+---+
| 3 | 3 |
| 4 | 4 |
+---+---+
2 rows in set (0.00 sec)
第二种语法
mysql> select A.*,B.* from A,B where A.a=B.b;
+---+---+
| a | b |
+---+---+
| 3 | 3 |
| 4 | 4 |
+---+---+
2 rows in set (0.00 sec)

left join 语法求差级
mysql> select * from A left join B on A.a = B.b;
+---+------+
| a | b    |
+---+------+
| 3 |    3 |
| 4 |    4 |
| 1 | NULL |
| 2 | NULL |
+---+------+
4 rows in set (0.00 sec)

mysql> select * from B left join A on A.a = B.b;
+---+------+
| b | a    |
+---+------+
| 3 |    3 |
| 4 |    4 |
| 5 | NULL |
| 6 | NULL |
| 7 | NULL |
+---+------+
5 rows in set (0.00 sec)

right join
mysql> select * from A right join B on A.a = B.b;
+------+---+
| a    | b |
+------+---+
|    3 | 3 |
|    4 | 4 |
| NULL | 5 |
| NULL | 6 |
| NULL | 7 |
+------+---+
5 rows in set (0.01 sec)


full  join 求并集 
mysql 并不直接支持full join,but 总是难不到我们
mysql> select * from A left join B on A.a=B.b union select * from A right join B on A.a=B.b;
+------+------+
| a    | b    |
+------+------+
|    3 |    3 |
|    4 |    4 |
|    1 | NULL |
|    2 | NULL |
| NULL |    5 |
| NULL |    6 |
| NULL |    7 |
+------+------+
7 rows in set (0.01 sec)

mysql>


以上是关于MySQL插入外键的主要内容,如果未能解决你的问题,请参考以下文章

MySQL插入数据因外键约束失败?

MySQL插入外键

在数据库上插入实体+外键的正确方法(使用:Mysql,JPA)

批量 MySQL 插入,一个主记录,一个带有外键的详细记录

在mysql表中插入数据的查询包含外键

在mysql中创建两个用外键链接的表,插入、删除和更新