表关系以及记录操作
2.两张表之间的关系
两张表之间的关系种类
-
多对一
出版社press(id,)<------>书book(press_id) foreign key(press_id) references press(id) -
多对多
作者author<------>书book 这个时候要建立第三方表记录 -
一对一
信天翁male<-------> 信天翁female
那么问题来了,如何找出一个两张表到底啥关系呢?
分析表关系方法
步骤如下图
# 流程图代码(博客园的markdown不支持流程图所以只好截图上传了)
graph TB
a[i.左边表多条-对应-右边一条]-->b{判断是否成立}
b-->|yes|c[多对多]
b-->|no|d[一对一]
b-->|yes|e[多对一]
b-->|no|f[多对一]
l[右边多条-对应-左边一条]-->m{判断是否成立}
m-->|yes|c
m-->|no|d
m-->|no|e
m-->|yes|f
- 先分析
- 先站在左表的角度去找是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id)。
- 是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)
- 总结
- 多对一:如果只有步骤i成立,则是左表多对一右表;如果只有步骤ii成立,则是右表多对一左表。
在多的那张表中设置外键。 - 多对多:如果步骤i和ii同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系.
- 一对一:如果i和ii都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可。
- 多对一:如果只有步骤i成立,则是左表多对一右表;如果只有步骤ii成立,则是右表多对一左表。
3.记录的增删改查
在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括
操作方式 | 对应语言 |
---|---|
插入数据 | INSERT |
更新数据 | UPDATE |
删除数据 | DELET |
查询数据 | SELECT |
插入数据INSERT
- 插入完整数据(顺序插入)
-- 语法一:
INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);
-- 语法二:
INSERT INTO 表名 VALUES (值1,值2,值3…值n);
- 指定字段插入数据
-- 语法:
INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);
- 插入多条记录
-- 语法:
INSERT INTO 表名 VALUES
(值1,值2,值3…值n),
(值1,值2,值3…值n),
(值1,值2,值3…值n);
- 插入查询结果!
--语法:
INSERT INTO 表名(字段1,字段2,字段3…字段n)
SELECT (字段1,字段2,字段3…字段n) FROM 表2
WHERE …;
更新数据UPDATE
--语法:
UPDATE 表名 SET
字段1=值1,
字段2=值2,
WHERE CONDITION;
-- 示例:
UPDATE mysql.user SET password=password(‘123’)
where user=’root’ and host=’localhost’;
删除数据DELETE
-- 语法:
DELETE FROM 表名
WHERE CONITION;
-- 示例:
DELETE FROM mysql.user
WHERE password=’’;
查询数据
查询语句过于庞大,单独作为一个文章
单表查询http://www.cnblogs.com/liuchengdage/articles/8923251.html
多表查询http://www.cnblogs.com/liuchengdage/articles/8930735.html