MySql
- DDL(数据库操纵语言):操作库和表结构
- DML(数据操纵语言):对表中的记录进行更新(增、删、改)
- DQL(数据查询语言):对表中的数据或者它的子集进行查询
MySQL支持数据类型
1.数值类型
-
tinyint
-
smallint
-
int
-
bigint
-
float(m,n): m表示总位数,n表示小数位数
-
doutble(m,n)
-
decimal:用于精确计算的固定点数,需要指定精度和小数位数
-
char:定长字符串
-
varchar:变长字符串
-
date:用与存储日期,格式为 YYYY-MM-DD
-
time:存储时间,格式为 HH:MM:SS
-
datetime:日期和时间,格式为 YYYY-MM-DD HH:MM:SS
-
year:存储年,格式为YYYY
-
其他
-
blob:二进制
-
clob:大量字符
-
约束
-
默认约束:default 默认值,不给该字符赋值,该字段的值为默认值
-
非空约束:not null,该字段的值不能为null
-
主键约束:primary key,该字段非空并且唯一
-
唯一键:unique,该字段唯一,但是可以为空
-
外键:foreign key,该字段不是当前表的属性,用于连接另一张表,
外键肯定是另一张表的主键 -
自增:auto_incerment,搭配数值类型的主键使用,不设置主键值时,每次自增1
DDL(数据库操纵语言):操作库和表结构
首先打开命令窗口,输入下面命令进入mysql
mysql -u 用户名 -p用户密码
查
-
查看自己有哪些库
show databases;
-
使用库
use 库名;
-
查表
show tables;
添加库/添加表 删除库/删除表
中括号为可选选项
-
新建库
create database 库名;
-
添加表
create table 表名(字段名 类型 [约束],...)
-
删库
drop database 库名;
-
删表
drop table 表名;
DML(数据操纵语言):对表中的记录进行更新(增、删、改)
CRUD:create,read,update,delete
-
insert:新增
INSERT INTO 表名 VALUES(字段1值,字段2值); insert into person value(1,'张三','男',18,9991231); #例 # 指定字段增 insert into 表名 (字段名1,字段名2,...) value (值1,值2,...),(值1,值2,...)...;
-
复制
-
复制表结构
create table 表1 like 表2;
-
复制表结构以及表中记录
create table 表1 like select * from 表2; insert into 表1 select * from 表2;
-
-
update
update 表名 set 字段=新值 [where 条件];
-
delete
使用delete删除表时,删除数据保留表结构
dalete from 表名 [where 条件];
DQL(数据查询语言):对表中的数据或者它的子集进行查询
DQL是最常用的也是最重要的
where和havaing
where是在原表的基础上筛选,可以用于DML
having是在结果集上进筛选,只能用于查询操作,可以结合group by 使用
查询记录
查询所有字段
*表示所有字段
SELECT * FROM 表名;
查询指定的字段
SELECT 字段,字段2,....FROM表名;
查询时为字段起别名(可用as和空格)
SELECT字段AS别名,字段1 别名....FROM 表名
排序
默认升序,asc:升序,desc降序
根多个字段时,先按照第一个字段排序,如果第一个字段值相等,再按照第二个
… order by 字段,字段2, desc,字段3,…
order by 和 where一起用,where必须在order by前面
模糊查询 like
_ : 查询 任意一个字符
%:任意字符串(包括空字符串)
…where 字段 like‘%模糊条件’;
分页查询limit
获取前n条记录
....LIMIT n;
从s行开始(s是从0开始计数),获取n条记录,包含s
....LIMIT s,n;
s=(页码-1)* n
子查询
子查询是一个查询嵌套在另一个查询中的查询语句。它可以在主查询的 WHERE 子句、FROM 子句或 SELECT 子句中使用。
分组查询
group by,一般使用场景 1.统计
2.去重
聚合函数
1.sum(列名):求指定列的和
2.avg(列名):求指定列的平均值
3.max(列名):求指定列的最大值
4.min(列名):求指定列的最小值
5.count(列名):求指定列的行数
注意:NULL不参与聚合函数的统计
合并结果集
结果集合合并:union 前体是被合并部分的字段是一样的
union:合并期间会去掉重复的元素
union all:不会去掉重复的元素
多表联查
-
保证多张关联表之间数据的完整性,外键
-
表和表之间的关系:
-
一对一:根据A中的一条记录,只能查出B中的一条记录;根据B中的一条记录,只能查出A中的一条记录;
-
一对多:根据A中的一条记录,可以查出B中的多条记录;根据B中的一条记录,只能查出A中的一条记录;
-
多对多:根据A中的一条记录,可以查出B中的多条记录;根据B中的一条记录,可以查出A中的多条记录;
-
-
外键添加
一对一:
1.两种表的主键严格保持一致
2.在任意一张表中增加一列,作为外键,该外键用unique约束
一对多:
在多方中,添加一列,作为外键
多对多:
中间表:肯定包含A表主键和B表主键的两列外键所在的表称之为从表,与之关联的称之为主表
-
join:
1.cross join(交叉连接):左表中每条记录都有右表中的每条记录连接一次
2.inner join(内连接):左表中每条记录都有右表中的每条记录连接一次,保留符合on 条件的不符合条件的舍弃
3.left join(左连接):左表中全部记录,以及右表中符合on条件的记录
4.right join(右连接):右表中全部记录,以及左表中符合
约束模式
1.strict(严格模式):
1.从表中添加数据时,指定的外键在主表中必须存在
更新外键时,外键的新值在主表中也必须存在
2.主表中更新主键或者删除时,从表中如果有与它关联的记录,该操作就会失败
2.cascade(级联模式):更新主表中的主键时,主表中与之关联的外键也会随之更新
删除主表中的记录时,从表中与之关联的也会被删除
3.set NULL:更新/删除主表中的记录时,从表中与之关联的记录的外键会置为NULL
4.no action:等同于strict
补充mysql函数
IF(表达式,v1,v2)
IFNULL(表达式)
NULLIF(v1,v2):v1和v2相等,结果为NULL;否则结果为v1
ISNULL()
CASE WHEN THEN