1 : 基础语法
--------- 对实体集 的操作 ------------
select 查询
create 创建
drop 删除
alter 修改
----------- 对表的操作 --------------
insert 插入
update 更新
delete 删除
----------- 授权及取消授权 --------------
grant 授权
revoke 取消授权
-------------- 退出登录 -----------------
quit/exit
create database 数据库名[数据库选项] 两个编码格式,校验规则
重点 注意: 如果要使用中文 一定要设置
set names gbk; 告诉服务器客户端编码
show databases 查看当前有哪些数据库
show create database 数据库名 查看数据库的创建语句
drop database 数据库 删除数据库(一定要慎重)
alter database 数据库名 charset gbk 修改数据库编码格式(服务器) 数据库名不可改变
create table 表名(字段名 字段类型)[表选项] 字符编码 数据库引擎 创建数据库
show tables 查看数据表
show create table 数据库表名 查看创建数据表名
desc 表名 查看表结构
drop table 表名 删除表(慎重)
如果我们删除一个不存在的表格会报错 因此 我们 通常会 drop table 表名 加上 if exists 表名
rename table OldName to NewName 修表名
**************** 修改定义 ****************
alter table 表名 add | drop | change | modify
例: alter table 表名 add 字段名 字段类型 增加一列
alter table 表名 drop 字段名 删除一列
alter table 表名 change 旧字段名 新字段名(字段类型..) 重命名字段
alter table 表名 modify 字段名 新类型; 修改字段类型
alter table 表名 charset 编码格式 修改表选项
************** 小规律 **************
create database/table 增加数据库/表
drop database/table 删除数据库/表
alter database/table 修改数据库/表
show databases/tables 显示有哪些数据库/表
show create database/table 显示创建语句
------------------------- 数据库操作 -------------------------
插入数据
insert into 表明(字段列表) values(值列表)
查询数据
select *|字段列表 from 表名 [where 条件] 字段列表以 "," 分割
删除数据
delete from 表名 [where 条件]
修改数据
update 表名 set 字段=值,....... where 条件
查看服务器校对规则
show collation
****** 存储引擎 ******
create table 表名 (字段 字段类型) engin = inndb|myisam
------------------- 数据库 存储类型 ------------------
数值型(整型,浮点型) 字符串类型,日期时间类型
数值类型 :
tiny 微小
small 小
medium 中型
unsigned 无符号属性
float
double
decimal (货币类型)
后面可拼接 MD 例: float(M,D) M表示总位数,D表示小数位数
时间类型
Datatime 显示形式和下面的基本一致
timestamp 显示形式基本同上面一直
存储范围不一样timestamp 存储的是整形,但是插入显示方式一样
注意: 一般开发过程中 只创建一个时间戳字段,如果不插入数据,会自动填充遮天数据插入的时间
date 年月日
time 时分秒
year 年
字符串格式
char 最大长度 255
varchar 大一些 实际长度可变 可用 M 定义允许长度
text 可以存储比较长的字符串,不能设置默认值
enum 枚举 只能选中一个值 enum(值1,值2....)
set 集合 类似多选
set(值1,值2.....)
选择 第一个值为 1 0000 0001
第二个值位 2 0000 0010
第三个值为 4 0000 0100
set 最多可以有 64 种情况
.............
-------------------- 列属性(约约束) --------------------
null 默认列约束 允许字段为空
not null 表示不允许字段为空 直接加在 字段类型后面即可
desc 表名 可以查看 列约束
default 默认值
通常配合 not null 一起使用 给not null字段一个默认值
primary key 主键
unique key 唯一键
与主键的区别 唯一键可以有多个 主键不能为null 唯一键可以为 null
auto_increment 自增长 通常配合主键使用 注意 : 字段必须为整形
comment 注释 : 一般加载字段类型后面
*********************** 外键 ***********************
foreign key(本表字段) references 外表名(外表字段) [选项]
cascade : 同步操作
父键对应字段更新删除的时候,子表的外键字段也进行相应的更新或删除
set null : 设置为 null
当父表的对应键字段删除 或者 更新的时候子表的外键字段就设置为null
restrict : 拒绝主表更新或者删除
注意 : 外键约束只有 innoDB 存储引擎才支持
主表更新
foreign key(子表字段) references 父表(父表字段) on update[选项]
主表删除
foreign key(子表字段) references 父表(父表字段) on delete[选项]
添加外键
alter table 表名 add foreign key(子表字段名) references 父表名(父表字段_[选项];
删除外键
想要获取外键名 必须通过 show create table 表名获取
alter table 表名 drop foregin key 外键名
--------------------------------- 数据操作详细 ---------------------------------
插入数据标准语法
insert into 表名(字段列表) values(值列表)
蠕虫复制
insert into 表名(字段列表) select(字段列表) from 表名
如果发生主键重复可以采用
直接更新
insert into 表名(字段列表) values (值列表)on duplicate key update 字段=值[,字段=值];
或 直接删除原记录再插入
replace into 表名(字段列表) values (值列表);
删除数据
满足条件删除
delete from 表名 [条件]
truncate 清空
只能清空操作,不能使用where判断,自增长字段重置为 1
---------------------------------- 查询详解 ----------------------------------
五子句顺序
select *|字段列表 from 表名
where 子句
group by 子句
having 子句
boder by 子句
limit 子句
顺序不可改变
select 选项 all / distinct
all : 所有 默认的就是 all
distinct : 去重
例 : select distinct name from 表名
select 别名
select 字段名称 as 别名 from 数据表
例 : select name as 名字 from student;
展示出来的结果 name 就有名字 替换了
where 中的运算符
between A and B : 在A 和 B 之间
in : 值的集合 in(2,4,8) 满足条件 2 或4 或8 的
select *from student where age in(22,23,24) 查询满足 年龄 为 22 或 23 或 24 学生的信息
not in : 与上方 in 相反 找 值集合外的
&& 相当于 and
|| 相当于 or
! 相当于 not
where 查询条件不知有 = 还有上面 这些可以作为查询条件 运算符使用
like 模糊查询
通配符
% : 任意多个字符匹配
_ : 使用单个字符进行匹配
group by 子句 : 通过分组获取数据
聚合函数 : 通常与 group by 一起使用 主要用于对一组值的计算(group 不要正好进行分组)
avg() : 返回平均值 , 空值会被忽略
count() : 返回指定组中的项目数量
max() : 返回指定组中的最大值
min() : 返回指定组中的最小值
sum() : 返回指定组中的数据的和
小括号中填写什么字段,获取获取对应的值
例:select name sex,max(age) from student where 1 group by sex;
上例 以性别分组 获取 每组最大名字
having 子句 : 含义可以理解成为和 where 一样(分组之后在进行筛选只能使用having子句)
二者比较 : where 子句是把磁盘上的数据筛选到内存
having 子句是把内存中的数据再次进行筛选
where 子句不能使用统计函数
例 : select 字段 from 表名 group by sex having avg(age)> 35
order by 子句 : 排序
语法 : order by 字段 [desc|asc]
desc : 降序 asc 升序
多字段 : order by 字段1[desc|asc],字段2[desc|asc],......
先按照字段 1 进行排序 然后在按照字段 2 进行排序
limit : 限制
语法 : limit page page 含义 返回多少条记录
limit start , endpage start 从第几条开始 endpage 返回多好条
例句 select *from table_name limit 20,10; 从第二十条个开始 返回十条记录
************************** 联合查询 ******************************
union : (我感觉没什么卵用)
语法:select union [选项] select 子句 union [选项]
选项就两个 一个是 all 另一个是 distinct 这个是默认选项
all : 不去重 distinct : 去重
注意:联合查询字段顺序,数目必须一致
使用联合查询的时候如果有 order by 必须要用小括号括起来
corss join : (我感觉没什么卵用2)
语法 : select *|字段列表 from 表名 cross join 表名;
返回结果的条数 = 表名记录数 * 表名记录条数
结论 : 没什么卵用
inner join : (意义重大) 可以简写成 join
select *|字段列表 from 表 inner join 表 inner join 表 on 条件
inner 可以省略 只写join 系统默认就是内连接
on 连接条件 不能省略
可以给表通过 as 去别名
注意:如果获取的字段信息,如果两个表中字段名有重复的,必须以 表名.字段的形式来获取指定的数据
left outer : 左外连接
语法 : select *|字段列表 from 表 left outer join 表 on 条件
左表为主,坐标中无法连接的记录同样返回,由表中对应的字段使用 null 填充
有外连接 同上 方向相反
子句查询 (个人感觉基本没用 太消耗性能了)
这个自己研究吧
******************** 数据还原和备份 *********************
数据表的备份
语句 : select *|字段列表 into outfile 路径(绝对路径) from 表名
注意 : 路径一定要用引号引起来,且路径是 反斜杠 / (Linux的斜杠)
load data infile 路径 into table 表名(字段列表)
sql 的备份
备份需要在cmd的环境中备份,cmd的环境变量是 mysqldump,
这个mysqldump 在对应的mysql/bin文件夹中
mysqldump –h –P –u –p 数据库名 表名 > 路径
注意: 数据库名后边没有表名,表示整个库都备份
路径不要加 引号,也是用反斜杠
后缀名为 .sql
还原
mysql –u –p 数据库名 < 路径
注意 : 这里的 备份还原是 window 下的
********************* 视图(重点) **********************
视图:一个虚拟的表,本身没数据,通过执行相应的select 语句完成获得相应的数据
创建视图 : create view 视图名 as select 子句
视图是虚拟的数据表,所有的操作都可以对应数据表操作.
show tables 可以查看到视图
desc 视图名 可以看到视图结构
show create view 视图名 查看视图创建语句
alter view 视图名 as select 子查询 修改视图
drop view 视图名 删除视图
作用: 1. 重用 sql 语句
2. 简化复杂 sql 语句 是表的组成部分而不是整个表
3. 保护数据,授予表特定部分的权限而不是整个表访问
4. 水平分表和垂直分表
水平分表:把一个大表分成若干个结构相同的小表,需要使用union连接数据
垂直分表:摆一个表的字段分成两个部分,常用的放在一个表里,不常用的字段放在另一个表里,需要时用join连接起来
视图算法(查询模式)
基础语法: create algorithm = undifined|merge|temptable view 视图名 as select 子句
默认算法 undifined
算法分类
1. UNDEFINED : 未定义算法,默认算法,让系统自动选择相应算法,或者指定算法为 undifined
2. MERGE : 合并算法,先组装
3. undifined : 系统默认算法,自动选择是用什么