从dos中登录mysql
mysql -h地址 -u账号 -p密码
DDL(database)
create | alter | drop | show | use
库操作
create database 库名;
drop database 库名;
alter database 库名 character set 字符集(utf8)
表操作(table)
create | alter | drop | desc
create table 表名 ( 列名 类型(长度)... );
DML(数据的增删改)
insert into 表名 (列) value (值);
insert into 表名 (列) values (值),(值),(值);
update 表名 set 列=值,列=值 where 列=值;
delete from 表名 where 列=值;
truncate 表名
DQL
select * from 表名 where 条件;
DCL
约束
主键约束:primary key auto_increment
外键约束
默认约束:default
唯一约束:unique
非空约束:not null
数据类型
int | float | double | char | varchar | date | time
datetime | timestamp(时间戳)
增删改查(CRUD)
create | retrieve | update | delete
表与表之间是存在关系的,这种我们叫做表关系,一般使用外键去维护。
外键是两表或多表之间建立一个关系,我们将这种关系叫做外键关系。例如:订单 - 用户
笛卡尔积
给x,y两个集合,如果需要展示这两个集合的数据,理论上应该一一对应。 但是对于数据库而言,这种结果是没有任何意义的。
所以在表设计的过程中,需要我们避免笛卡尔积结果集。可以在数据表中指定外键关联,通过外键关联作为条件来检索数据,可以避免笛卡尔积结果集。
多对一 / 一对多
用户可以创建多个订单 可以说 用户和订单是一对多关系。多个订单可以同时对用一个用户。 订单和用户的多对一。
外键的作用就是维护数据的完整性
在一对多或多对一的关系中,外键添加到多的一方。
第一个括号里写的是自己表中的新建的列名,第二个括号中写的是对方表中主键。
多表操作的时候,不再按照每张表单独查询得到结果再去另一张表中查询(太麻烦)。
使用是连接查询
内连接
隐式内连接查询
特点:使用where 关键字进行条件拼接
显示内连接查询
使用关键字:inner join on (和where功能一样,写法不同)
左外连接
左外连接指多表操作时,以左边的表数据为主,如果右表中没数据使用null补位
以左为尊 关键字: left join on
右外连接
右外连接指多表操作时,以右边的表数据为主,如果左表中没数据使用null补位
以右为尊 关键字: right join on
使用中间表的好处是即不破坏原来表的结构,有能够清晰的表述出当前的一个完整的逻辑关系。
人(person) 身份证(id_card)
实现方式:
人(主表)的主键pid 在身份证表中做外键,且这个外键是身份证表的主键。
主表中不受限制,可以填写任何数据。
从表中可以没数据,一旦有数据从表ID必须是主表中存在ID
外键的两种添加方式
第一种创建表的时候添加外键
foreign key(列名) references 主表(主键)
第二种添加方式
alter table 表名 add constraint foreign key(列名) references 主表(主键)
表关系: 多对一、多对多 、一对一
多对一的外键需要添加到多的一方。
多对多的外键添加到中间表中(无主键)分别创建外键关联
一对一主表的主键是从表的外键,且从表的外键指定到从表的主键上。
连接查询:内连接 、 左外连接 、 右外连接
隐式内连接:where
显示内连接:inner join * on
左外连接:left join on
右外连接:right join on
条件查询(综合)
基本条查询 = | != <> | > < >= <= between and | is null |
is not null | in | not in
模糊查询 like % _
%匹配符号
_占位符
排序查询 order by 列名 asc|desc 前面不要加where
去重复关键字: distinct
分组查询 group by 列名 having
聚合函数
max | min | avg | sum | count
limit
一个参数的是取前几条数据
两个参数做分页。
子查询
一个SQL的结果当做了另一个SQL的条件。 子查询使用()包起来即可。