Mysql学习笔记
以下内容图片来自黑马程序员(黑马打钱)
SQL语法
-
DDL数据库操作
查询
查询所有数据库 show databases; 查询当前数据库 select database();创建
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];删除
drop database [if exists] 数据库名;使用
use 数据库名;查询当前数据库所有表
show tables;查询表结构
desc 表名;查询制定表的建表语句
show create table 表名;创建表
create table 表名( 字段1 字段1类型[comment 字段1注释], 字段2 字段2类型[comment 字段2注释], 字段3 字段3类型[comment 字段3注释], ... 字段n 字段n类型[comment 字段n注释] )[comment 表注释];数据类型
数值类型

精度代表位数 标度代表小数点位数 123.45 M = 5, D = 2 double(5, 2);字符类型

char(10) vachar(10) char 无论字符多大都会占用10字符空间 性能好 varchar 低于10字符会只存储和所存储字符大小一样的空间 性能较差
修改
alter table 表名 add 字段名 类型(长度) [comment 注释][约束];修改数据类型
alter table 表名 modify 字段名 数据类型(长度);修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度)[comment 注释][约束];删除字段
alter table 表名 drop 字段名;修改表名
alter table 表名 rename to 新表名;删除表
drop table [if exists] 表名;删除指定表,并重新创建该表
truncate table 表名; -
DML
添加数据
给指定字段添加数据
insert into 表名(字段名1,字段名2,……) values(值1,值2);给全部字段添加数据
insert into 表名 values(值1,值2,……);批量添加数据
insert into 表名(字段名1,字段名2,……) values (值1,值2,……),(值1,值2,……),(值1,值2,……);insert into 表名 values (值1,值2,……),(值1,值2,……),(值1,值2,……);插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
字符串和日期型数据应该包含在引号中。
插入的数据大小,应该在字段的规定范围内。
修改数据
update 表名 set 字段名1 = 值1, 字段名2 = 值2, ……[where 条件];删除数据
delete from 表名[where 条件];delete语句的条件可以有也可以没有,如果没有条件,则会删除整张表的所有数据。
delete语句不能删除某一个字段的值(可以使用update)
-
DQL
select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组字段列表 order by 排序字段列表 limit 分页参数基本查询
查询多个字段
select 字段1, 字段2, 字段3…… from 表名;设置别名
select 字段1[as 别名], 字段2[as 别名]…… from 表名;去除重复记录
select distinct 字段列表 from 表名;where条件查询

聚合函数

select 聚合函数(字段列表) from 表名;null值不参与聚合函数运算。
分组查询
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];where 与 having 的区别
执行时机不同:where是分组之前进行过滤,不满足where条件不进行分组,而having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
执行顺序:where > 聚合函数 > having
分组之后查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
排序查询
select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2……;排序方式
asc升序 desc降序
如果是多字段排序,当第一个字段相同时,才会根据第二个字段排序。
分页查询
select 字段列表 from 表名 limit 起始索引, 查询记录数;起始索引从0开始,起始索引 = (查询页码 - 1)* 每页的显示数
如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10
执行顺序
from -> where -> group by/having -> select -> order by -> limit
-
DCL
查询用户
use mysql; select * from user;创建用户
create user '用户名'@'主机名' identified by '密码';修改用户密码
alter user '用户名'@'主机名' identified with mysql_navtive_password by '新密码';删除用户
drop user '用户名'@'主机名';权限控制

查询权限
show grants for '用户名'@'主机名';授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
函数
-
字符串函数

字符串索引从1开始。 -
数值函数

-
日期函数

-
流程控制函数

-
约束

-
外键约束
添加外键
create table 表名( 字段名 数据类型, ……, [constraint] [外键名称] foreign key(外键字段名) references 主表(主表列名) ); alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);删除外键
alter table 表名 drop foreign key 外键名称;删除/更新行为

alter table 表名 add constraint 外键名称 foreign key(外键字段) references 主表名(主表字段名) on update cascade on delete cascade; -
连接查询
隐式内连接
select 字段列表 from 表1, 表2 where 条件...;显式内连接
select 字段列表 from 表1 [inner] join 表2 on 连接条件...;左外连接
select 字段列表 from 表1 left [outer] join 表2 on 条件...;右外连接
select 字段列表 from 表1 right [outer] join 表2 on 条件...;自连接
select 字段列表 from 表A 别名A join 表A 别名B on 条件...;联合查询
select 字段列表 from 表A... union [all] select 字段列表 from 表B...union all会把所有结果查询出来
union会对查询结果进行去重
子查询

列子查询

事务
-
查看/设置事务提交方式
select @@autocommit; set @@autocommit = 0; -
提交事务
commit; -
回滚事务
rollback; -
事务隔离

2万+

被折叠的 条评论
为什么被折叠?



