MySql 语法

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 : 系统默认算法,自动选择是用什么

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • SQL SELECT 语句 一、查询SQL SELECT 语法 (1)SELECT 列名称 FROM 表名称 (2...
    有钱且幸福阅读 5,438评论 0 33
  • 1. SQL语句分类 DDL(Data Definition Language):数据定义语言,用来定义数据库对象...
    joshul阅读 950评论 1 2
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,032评论 0 19
  • 我和我喜欢的人轰轰烈烈过 比如他在我前面走路突然回头看了我一眼 比如在楼道里打闹别人起哄的时候 比如他故意拿篮球在...
    不绊阅读 155评论 0 0
  • 总在秋风冷雨夜 拉响这首乐曲 就像当初宿舍楼外 朦胧路灯下少年身影痴迷 每晚准时拉响 这首凄美小提琴曲 依稀有人默...
    王者_52be阅读 1,768评论 97 322