Mysql
https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=6&spm_id_from=pageDriver&vd_source=7963e4096d2b51e52877519dc0202e3e
视频教学笔记
语法
1 可以单行或多行,以分号结尾
2 可以使用空格或缩进增强语句的可读性
3 不区分大小写,建议关键字使用大写
4 注释:单行为:-- 注释内容 或 #注释内容。 多行为:/* 注释内容*/
一、DDL(数据定义definition语言)
定义数据库、表、字段
注意:以下[…]括号里的为可选参数,可写可不写。
数据库:
查询全部数据库: show databases;
查询当前数据库: select database();
创建数据库: create database [if not exists]库名 [default charset 字符集] [collate 排序规则];
删除数据库: drop database [if exists]库名;
进入数据库: use 库名;
如:create database itcast;
注意:默认的字符集为utf8mb4(原因:utf8只有三个字节,有些字符需要四个字节)
数据表:
查询当前数据库的所有表: show tables;
查询表结构: desc 表名;
查询表的建表语句: show create table 表名;
创建表: create table 表名(
字段1 字段1类型[comment ‘注释’],
字段2 字段2类型[comment ‘注释’],
字段3 字段3类型[comment ‘注释’]
)[comment ‘表注释’];
删除表:drop table [if exists]表名;
删除表并重新创新该表:truncate table 表名;
注意:,和;的位置。
修改:
添加字段: alter table 表名 add 字段名 类型(长度)[comment 注释][约束];
修改字段类型:alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和类型:alter table 表名 change 旧字段名 新字段名 新类型(长度)[comment 注释][约束];
删除字段:alter table 表名 drop 字段名;
数据类型:
数值类型
整型:
tinyint 1byte(-129,127)
smallint 2B (-32768,32767)
mediuint 3B (-8388608,8388607)
int/intger 4B (-2147483648,2147483647)
bigint 8B (-2^63 2^63 -1)
浮点数:
float 4B 单精度
double 8B 双精度
decimal 精确描述小数,依赖精度和标度,精度就是小数点前后总共的位数,标度是小数点后面的位数
注意:以上都分signed 有符号数和 unsigned无符号数
字符串类型
char 0-255B 定长字符串 性能高 char(10) 确定用定长
varchar 0-65535B 变长字符串 需要计算所以性能较差 varchar(10) 不确定用变长
tinyblob
tinytext
blob 二进制数据(视频、音频、软件安装包等数据,一般存在文件服务器中,所以用的不多)
text 长文本数据
mediumblob
mediumtext
longblob
longtext
日期时间类型
date XXXX-XX-XX 日期
time XX:XX:XX 时间值
year XXXX 年份
datetime XXXX-XX-XX XX:XX:XX 混合日期和时间
timestamp XXXX-XX-XX XX:XX:XX 时间戳 不常用
图形化界面工具DateGrip
原因:以上添加删除操作在命令行中完成,效率低。公司里面用的Mysql图形化界面最多的是navicat。
DataGrip最好用,以下是界面。可以点点点也可以输入命令,输入命令时还有提示,非常方便。
二、DML(数据操作manipulation语言)
对表中的数据进行删减
insert: 插入数据,指定的字段需要和值的顺序一一对应;字符串和日期数据应包含在引号中;插入的数据大小,应该在字段的范围内。
给指定的字段添加数据
insert into 表名 (字段,字段)values (值,值);
给全部字段添加数据
insert into 表名 values (值,值);
批量添加数据
insert into 表名 (字段,字段) values (值,值),(值,值),(值,值);
insert into 表名 values(值,值),(值,值),(值,值);
update:修改数据,条件语句可有可无,没有会修改整张表的数据!
update 表名 set 字段=值,字段=值 [where 条件];
delete: 删除数据,条件语句可有可无,没有就删整个表的数据; 不能删除某一个字段的值,只能使用update。
delete from 表名 [where 条件];
三、DQL(数据查询query语言)
用来查询数据数据库中表的记录,
关键字:select
编写顺序为:select 字段 from 表名 where 条件 group by 分组字段 having 分组后的条件 order by 排序字段 limit 分页参数;
执行顺序:1 from哪个表
2 where条件
3 group by having 分组和分组之后条件的过滤
4 select 决定查看哪一列数据
5 order by 排序
6 limit 查看多少个记录
1 基本查询
select 字段 from 表名;
查询多个字段:select 字段,字段,字段 from 表名;
select * from 表名;
设置别名:
select 字段 [as] 别名,字段 [as] 别名 from 表名;
去掉重复记录:
select distinct 字段 from 表名;
2 条件查询
select 字段 from 表名 where 条件
条件:
比较运算符
> >= < <= = 【大于 大于等于 小于 小于等于 等于】
<> != 【不等于】
between…and… 【范围内,含最小和最大】
in(值,值,值) 【多选1】
like 占位符 【模糊匹配,_匹配单字符,%匹配任意个字符,占位符要加引号】
is null【空值】
逻辑运算符
and && 【并且】
or || 【或者】
not ! 【非 不是】
如:
3 分组查询
聚合函数 (count统计数量 max求最大值 min avg平均值 sum求和):把一列数据作为一个整体,进行纵向运算
Null值不参与聚合函数的运算。
select 聚合函数(字段列表)from 表名;
如:select count(*) from 表名;
select 字段 from 表名 where 条件 group by 分组的字段名 having 分组后的条件;
where是分组之前的过滤,having是分组后对结果进行过滤
where不能对聚合函数进行判断,而having可以。
执行顺序:where > 聚合函数 > having
分组之后,查询的字段一般为聚合函数和分组字段,其他字段无意义
select 字段,count(*) from 表名 group by 字段;
4 排序查询
select 字段 from 表名 order by 字段 排序方式,字段 排序方式;
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段排序。
排序方式:asc 升序(默认值)、desc 降序
如:select * from emp order by age asc;
5 分页查询
select 字段 from 表名 limit 起始索引,查询记录数;
起始索引从0开始,起始索引 = (查询页数-1)*每页显示记录数
分页查询的是数据库的方言,不同的数据库有不同的实现,Mysql中是limit
如果查询的是第一页数据,起始索引可以省略,可简写为limit 查询记录数。
如:
四、DCL(数据控制control语言)
管理:用户和访问权限
用户都存放在mysql的user表中的。
1 查询用户
use mysql;
select * from user;
2 创建用户
create user ‘用户名’@‘主机名’ identified by ‘密码’;
create user ‘用户名’@‘%’ identified by ‘密码’; #%指访问任意主机
3 修改用户密码
alter user ‘用户名’@‘主机名’ identified with mysql_native_password by ‘新密码’;
4 删除用户
drop user ‘用户名’@‘主机名’;
5 权限控制
all 所有权限
select 查询数据
insert 插入数据
update 修改数据
delete 删除数据
alter 修改表
drop 删除数据库、表、试图
create 创建数据库、表
查询权限:show grants for ‘用户名’@‘主机名’;
授予权限:grant 权限 on 数据库.表名 to ‘用户名’@‘主机名’;
撤销权限:revoke 权限 on 数据库.表名 from ‘用户名’@‘主机名’;