这篇文章主要介绍MySQL的一些操作性的知识。
数据库的操作
创建数据库
CREATE DATABASE mydatabase CHARACTER SET utf8;
删除数据库
DROP DATABASE 数据库名;
表的操作
创建表
CREATE TABLE 表名(
列名1 数据类型 约束,
列名2 数据类型 约束,
列名3 数据类型 约束
);
修改表
- 添加字段
ALTER TABLE 表名 add 字段名 字段类型;
- 修改字段
alter table 表名 CHANGE 旧列名 新列名 数据类型;
- 删除列
alter table 表名 drop 删除的列名;
- 修改表名(一般不建议)
rename table 表名 to 新表名;
- 修改表的字符集
alter table 表名 character set 字符集;
- 删除表
Drop table 表名;
表的数据操作
- 插入数据
INSERT into 表名(列名1, 列名2, 列名3) VALUES(值1, 值2, 值3
- 更新数据
UPDATE表名 SET 字段1 = 值1, 字段2 = 值2, WHERE 条件;
上面都是一些简单的操作,那么实际开发中最重要的还是数据的查询。接下来核心说数据库的查询。
数据的查询
单表查询
select 字段1,字段2 from 表名 where 条件;
.....这些简单以后再梳理补上。
多表查询
要做多表的查询,首先要清楚表之间的常见的关系。
-
一对多关系
- 一对多的关系 会在多表的一方添加一个字段 字段名称自定义(建议主表的名称_id)
- 字段类型一般和主表的主键的类型保持一致 我们称之为这个字段为
外键
。
在开发中为了保证数据的有效性跟完整性,添加约束(外检约束)
在多表的一方添加外检约束
Alter table 多表名称 add foreign key(外键名称) references 一表名称 (主键);
添加了外检约束特点:
1.主表中不能删除从表已经引用的数据
2.从表中不能添加主表中不存在的数据
提示:一般上线了才添加外检约束 否则测试不方便。
举例:
开发中常见的用户
跟订单
就是一对多的关系。
我们先创建两个表 user
跟 orders
。
create TABLE user(
id int PRIMARY key auto_increment,
username varchar(20)
);
create TABLE orders(
id int PRIMARY key auto_increment,
totalPrice DOUBLE,
user_id int -- 外键
);
接下来为了保证数据的完整性 我们需要对订单表中外键添加约束。
Alter table orders add foreign key(user_id) references user (id);
查询 每个用户的订单价格。
SELECT user.id, user.username, orders.totalPrice from user, orders where user.id = orders.user_id;
Snip20171112_11.png
-
多对多关系
- 一般引入一个中间表 在中间表存放两张表的主键,一般还会将这两个主键设置成中间表的联合主键。将多对多拆成了两个一对多。
为了保证数据的有效性 在中间表添加两个外检约束
- 一般引入一个中间表 在中间表存放两张表的主键,一般还会将这两个主键设置成中间表的联合主键。将多对多拆成了两个一对多。
-
内连接
-
满足条件就显示 不满足条件不显示。
格式一 显示的内连接select a.表*. b表.* from a [inner] join b on ab的连接条件;
格式二 隐式的内连接
select a.*. b.* from a,b where ab的连接条件;
-
-
外连接
-
左外连接
-
先展示join左边的a表的所有数据 然后根据条件关联查询 join右边的表 符合条件则展示出来。不符合就以null显示。
-
格式:
select a.*. b.* from a left [outer] join b on 连接条件;
-
-
右外连接
-
先展示join右边的表(a)表, 根据条件进行关联查询join左边的表(b)表,符合条件则展示出来。不符合就以null显示。
-
格式:
select a.*. b.* from b right join a on user.id=orders.user_id;
-
-
- 子查询
- 一个依赖依赖另一个条件的结果。将一张表的查询结果作为一个临时表。
网友评论