MySQL数据模型
是由多张能够相互连接的二维表组成的数据库。
SQL分类(DDL,DML,DQL,DCL)
DDL:对数据库,表,列进行增删改查
操作数据库
查询数据库
查看所有数据库
show databases;
查看当前数据库
select database()
创建数据库
create database 名称;
create database if not exists 名称;
删除数据库
drop database 名称;
使用数据库
use 名称;
操作表
创建表
create table 名称 (
字段名1 数据类型1,
字段名1 数据类型
);
查询表
show tables;
desc 表名称;
修改表
修改表名
alter table 表名 rename to
添加一列
修改数据类型
修改列名和数据类型
删除列
删除表
drop table 名称;
drop table if exists 表名;
DML:对数据库进行增删改查
增
inster into 表名 () values ();
删
delete from 表名 where(条件)
改
update 表名 set (修改目的) where(条件)
DQL:用来查询数据库
查
基础查询
select * from 表名;
条件查询
select * from 表名 where (条件)
分组查询
select * from 表名 where (条件) group by (条件)
注意
执行的顺序:where>聚合函数>having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段毫无意义
排序查询 asc (升序排列默认值)desc(降序排序)
select * from 表名 where(条件)group by (条件)order by(条件)
注意
若果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
分页查询
select * from 表名 where(条件)group by(条件) order by(条件)limit (1,5)
例子
数据表:user
-- 查询年龄大于20岁
select * from user where age > 20;
-- 查询年龄等于20岁
select * from user where age = 20;
-- 查询年龄不等于20岁
select * from user where age is not 20;
-- 查询年龄大于等于20 小于等于30
select * from user where age between 20 and 30;
-- 查询年龄22岁,18岁,25岁的信息
select * from user where age in (22,18,25)
-- 查询英语成绩为null
select * from user where english is null;
-- 查询英语成绩不为null
select * from user where english is not null;
-- 查询姓马的有哪些? like
select * from user where name like "马%"
-- 查询姓名第二个字是化的人
select * from user where name like "_化%"
-- 查询姓名是3个字的人
select * from user where name like '___'
-- 查询姓名中包含德的人
select * from user where name like "%德%"
DCL:数据库权限操作
函数
聚合函数
count
max
min
avg
cont
字符串函数 (常用)
concat 负责字符串的连接
lower 字符串转化为小写
upper 字符串转化为大写
lpad(str, n,pad) 字符串左边进行添加
rpad (str, n,pad) 字符串右边进行添加
trim 去除字符串左边和右边的空格
substring (str,start,len)进行字符串截取
数值函数(常用)
ceil 向上取整
floor 向下取整
mod(x,y) 取模
rand() 得到0-1的随机数
round(x,y)求参数x的四舍五入的值,保留y位
日期函数(常用)
curdate() 当前日期
curtime() 当前时间
now() 当前日期和时间
day(date)
month(date)
year(date)
satediff() 两个日期之差
流程函数
if(value,true,false)
ifnull(value1,value2)
case when then ... end
约束
主键约束
非空约束
外键约束
唯一约束
默认约束
检查约束
着重分析外键约束
外键用来让两个表的数据之间建立联系,保证数据的一致性和完整性。
添加外键语句
alter table 表名 add constraint (外键名字)forign key (外键字段名称)refernces (主表列名称)
删除约束语句
alter table 表名 drop forign key (外键名字)
数据库设计
数据库设计
需求分析
逻辑实现
物理实现
维护分析(1进行新的需求添加。2进行sql优化)
表关系
一对一 (用户和用户详情)
实现方式
在任意一方加入外键,指向另一方的主键
一对多 (部门和员工)
实现方式
多的一方建立外键,指向另一个表的主键
多对多 (商品和订单)
实现方式
中间建立第三章表,中间表至少关联连个外键,分别是另外连个表的主键
多表查询
经典错误 (以下默认利用表一 s1 表二 s2)
select * from s1,s2 ;
错误原因 :
产生笛卡尔积。有s1和s2两个集合,取到s1,s2所有组合的情况。
正确写法 :
select * from s1,s2 where s1.id = s2.id;
内连接: 内连接是取到两张表的交集 [inner]可以省略
---隐式内连接
select * from s1,s2 where s1.id = s2.id;
---显示内连接
select * from s1 jion s2 on s1.id = s2.id;
外连接 【outer】可以省略
---左外连接
select * from s1 left join s2 on s1.id = s2.id;
---右外连接
select * from s1 right join s2 on si.id = s2.id;
自连接(sql语句,可能不符合实际常识,表明含义即可)
select * from s1 as a join s2 as b where a.id =b.id;
子查询
概念:查询中嵌套查询,称为 嵌套查询或者子查询。
子查询根据查询结果不同,作用不同
单行单列 :作为条件值,使用 = , !=,>,<等进行条件判定
多行单列 :作为条件值 使用 in 等关键字
多行多列 : 作为虚拟表
联合查询
union : 进行结果去重
union all : 全部结果直接合并返回
事务
数据库的事务是一种机制,一个操作序列,包含了数据库操作命令。
10万+





