文章目录
- 写在前面
- 数据库基本操作
- Mysql数据类型
-
- 整数类型
-
- 指定宽度
- `zerofill` 和 `unsigned`
- `auto_increment`
- 浮点数和定点数类型
- 日期和时间类型
- 字符串类型
- Mysql运算符
- DDL-数据定义语言(create,alter,drop)
-
- 创建数据表
- 查看数据表
- 修改数据表
- 删除数据表
- DML-数据操纵语言(select,delete,update,insert)
-
- 记录
-
- 插入记录
- 更新记录
- 查看记录
- 删除记录
- 排序 `order by`
- 限制记录数 `limit`:分页
- 聚合:`函数:count():记录数 / sum(总和); / max():最大值 / min():最小值`
- `group by`分组:
- `having` 对分组结果二次过滤:
- `with rollup` 对分组结果二次汇总
- 子查询
- `union`记录联合
- DCL-数据控制语言 (grant, revoke)
-
- 添加权限
- 回收权限
写在前面 服务开启停止
#管理员身份下
cmd
net start/stop mysql
数据库链接
mysql -h 127.0.0.1 -u root -p #-h 127.0.0.1默认
常用参数
-A 不预读数据库信息,提高连接和切换数据库速度,使用--disable-auto-rehash代替
--default-character-set使用的默认字符集
-e 执行命令并退出
-h 主机地址
-p 连接到服务器时使用的密码
-P 连接的端口号
相关文件夹
【Mysql|Mysql数据库 基本语法】bin目录下保存了MySQL常用的命令工具以及管理工具、data目录是MySQL默认用来保存数据文件以及日志文件的地方、docs目录下是MySQL的帮助文档、include目录和lib目录是MySQL所依赖的头文件以及库文件、share目录下保存目录文件以及日志文件。
数据库基本操作 创建数据库
create database name;
创建数据库后查看该数据库基本信息MySQL命令:
show create database name;
删除数据库
drop database name;
切换数据库
use name;
查看当前使用的数据库 MySQL命令:
select database();
Mysql数据类型 整数类型
文章图片
指定宽度
create table t1 (id int , id int(5))
//INT(4)与INT(5),括号中的字符表示显示宽度,整数列的显示宽度与MySQL需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,它们在数据库里面存储的都是4个字节的长度。
zerofill
和 unsigned
zerofill采用零填充,不足5位采用0填充,配合数据宽度
create table t2 (id int , id2 int(5) zerofill);
create table t3 (id int , id2 int(5) unsigned);
auto_increment
只用于整数类型
产生唯一标识
值从1开始,逐行增加
一个表中最多只能存在一个自增列
自增列应该定义为not null
自增列应该这只为 primary key 或者 unique
id int not null auto_increment primary key
浮点数和定点数类型 浮点数类型
文章图片
定点数类型
文章图片
float , double , decimal 特点:
1.(m,d)表示方式:m指的是整数位,d指的是小数位(又称作精度和标度)
2.float/double四舍五入丢失精度,decimal会截断数据并输出warning
3.如果不指定精度,float/double采用操作系统默认,decimal则是(10,0)
位类型
文章图片
1 存放位字段值
2 指定存放多位二进制的长度,默认为1(范围:1~64)
3 读取需要bin()/hex(),普通的select读取结果为null
4 插入的值会转化为二进制码,如果长度运行则正常处理,否则插入失败
create table t6 (id bit(1));
select bin(id) from t6;
日期和时间类型
文章图片
当前系统日期
timestamp:返回yyyy-mm-dd hh:mm:ss 宽度19timestamp:不适合存放久远日期,超出范围则会采用零值填充//不同格式的显示零值格式
d date, t time,dt datetime
+------------+----------+---------------------+
| d| t| dt|
+------------+----------+---------------------+
| 2016-11-25 | 14:52:44 | 2016-11-25 14:52:44 |
+------------+----------+---------------------+//默认值的体现
id1 timestamp
+---------------------+
| id1|
+---------------------+
| 2016-11-25 14:55:45 |
+---------------------+//timestamp字段只能有一个"CURRENT_TIMESTAMP"
+-------+-----------+------+-----+---------------------+-----------------------------+
| Field | Type| Null | Key | Default| Extra|
+-------+-----------+------+-----+---------------------+-----------------------------+
| id1| timestamp | NO|| CURRENT_TIMESTAMP| on update CURRENT_TIMESTAMP |
| id2| timestamp | NO|| 0000-00-00 00:00:00 ||
+-------+-----------+------+-----+---------------------+-----------------------------+//timestamp和时区相关:SYSTEM 指的是和主机时区保持一致
show variables like "%_zone";
+------------------+--------+
| Variable_name| Value|
+------------------+--------+
| system_time_zone | CST|
| time_zone| SYSTEM |
+------------------+--------+//修改时区
set time_zone="+9:00"/在 [mysqld] 之下加 default-time-zone=timezone
年份
year:默认为4位格式.1901~2155和0000. 2位的已经不推荐,高版本已经不支持了.
timestamp和datetime区别:
1、timestamp支持范围小(1970-01-01 08:00:01到2038年某个点)
2、表中第一个timestamp字段,会默认采用当前系统时间.如果更新其他字段,该字段没有赋值的话,则该字段会自动更新.如果指定字段不满足规格,则采用零值填充
3、timestamp查询和插入都会受到当地时区影响datetime支持范围宽度大(1000-01-01 00:00:00到9999-12-31 23:23:59)
字符串类型
文章图片
char和varchar的区别:
- char定长,效率高,在创建字段的时候就已经指定,一般用于固定长度的表单提交数据存储
- char在检索的时候回去掉尾部的空格
- varchar是动态长度
- varchar在检索的时候回保留尾部的空格
- varchar将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度>255时需要2个字节)
- 字符类型若为gbk,每个字符最多占2个字节,字符类型若为utf8,每个字符最多占3个字节
- 枚举在集合中取值,只能取一个
- 如果值不存在则采用第一个值为默认
- 如果插入NULL不会出错,会将NULL写入表
- 成员个数在1255占用1个字节,在25565535占用2个字节,节约资源
create table `t8` (
`gender` enum('m','f') default null
) engine=innodb default charset=utf8
集合类型
- 集合类型和枚举很像,但是支持多值选择
- 最多可以保存64个成员,每8个成员占1个字节
- 重复值只会插入一次,如果查出集合范围则插入为null
create table t9 (col set ('a','b','c','d'));
Mysql运算符 算数运算符
文章图片
比较运算符
文章图片
文章图片
NULL值不能参与"=","!=","<==>","<>"等场景比较
select * from t1 where id is null;
select * from t1 where id is not null;
between 比较为闭区间
a between min and max ==> a >=min and a<=max
select * from stu where id between 1 and 3;
in 在集合中匹配
select * from stu where id in (1,2,3);
like 这个在大量数据的情况下慎重选择 会影响查询性能
select id2 from t1 where id2 like "%03%";
regexp 这个在大量数据的情况下慎重选择,会影响查询性能。
select * from t1 where id2 regexp '0001';
逻辑运算符
文章图片
位运算符
文章图片
DDL-数据定义语言(create,alter,drop) 数据库创建成功后可在该数据库中创建数据表(简称为表)存储数据。请注意:在操作数据表之前应使用“USE 数据库名; ”指定操作是在哪个数据库中进行先关操作,否则会抛出“No database selected”错误。
语法如下:
create table 表名(
字段1 字段类型,
字段2 字段类型,
…
字段n 字段类型
);
创建数据表
create table student(
id int,
name varchar(20),
gender varchar(10),
birthday date
);
文章图片
查看数据表 示例:查看当前数据库中所有表 MySQL命令:
show tables;
效果展示
文章图片
示例:查表的基本信息 MySQL命令:
show create table student;
文章图片
示例:查看表的字段信息 MySQL命令:
desc student;
效果展示
文章图片
修改数据表 示例:修改表名 MySQL命令:
alter table student rename to stu;
示例:修改字段名 MySQL命令:
alter table stu change name sname varchar(10);
#把 name变成 sname varchar(10);
示例:修改字段数据类型 MySQL命令:
alter table stu modify sname int;
示例:增加字段 MySQL命令:
alter table stu add address varchar(50);
示例:删除字段 MySQL命令:
alter table stu drop address;
实例:字段增加修改 add/change/modify/ 添加顺序:
1 add 增加在表尾.
2 change/modify 不该表字段位置.
3 修改字段可以带上以下参数进行位置调整(frist/after column_name);
alter table emp change age age int(2) after ename;
alter table emp change age age int(3) first;
删除数据表 示例:删除数据表 MySQL命令:
drop table stu;
DML-数据操纵语言(select,delete,update,insert) 记录 插入记录
//指定字段,
//自增,默认值等字段可以不用列出来,没有默认值的为自动设置为NULL
insert into stu (id,sname,birthday,address) values (001,'Jack','2000-01-01','China');
//可以不指定字段,但要一一对应
insert into stu values (001,'Jack','2000-01-01','China');
//批量插入记录
insert into stu values (001,'Jack','2000-01-01','China'),(002,'Mike','2013-01-01','America');
更新记录
update stu set birthday="2000-02-02" where same="Jack";
查看记录
//查看所有字段
select * from stu;
//查询不重复记录
//结果只返回所有不重复的sname
select distinct(sname) from stu ;
//结果返回所有不重复的sname的其他所有值,例如生日编号等
select distinct(sname),stu.* from stu ;
//条件查询
//比较运算符: > < >= <= <> != ...
//逻辑运算符: and or ...
select * from stu where id=001 or id=002;
删除记录
//请仔细检查where条件,慎重
delete from stu where sname='Jack';
排序
order by
// desc降序,asc升序(默认)
select * from stu order by id ;
select * from stu order by id asc;
select * from stu order by id desc,birthday desc;
限制记录数
limit
:分页//只显示一条
select * from stu limit 1;
//每页10条进行分页,从第五条之后开始显示
select * from stu limit 5,10;
select * from stu order by id desc,birthday desc limit 1;
聚合:
函数:count():记录数 / sum(总和);
/ max():最大值 / min():最小值
select count(id) from stu ;
select sum(id) from stu ;
select max(id) from stu ;
select min(id) from stu ;
group by
分组://分组统计
//按照学生id对 学生id 分组显示
select id from stu group by id;
//按照 每个学生的id的数量 分组显示
select count(id) as count from stu group by id;
select count(id) as count,id from stu group by id;
#执行不出来?select count(id) as count,stu.* from stu group by id;
having
对分组结果二次过滤:select count(id) as count,id from stu group by id having id >= 2;
with rollup
对分组结果二次汇总select count(id),stu.* from stu group by id,sname with rollup;
子查询
//=, !=
select * from emp where deptno = (select deptno from dept where deptname="技术部");
select * from emp where deptno != (select deptno from dept where deptname="技术部");
//in, not in
//当需要使用里面的结果集的时候必须用in();
select * from emp where deptno in (select deptno from dept where deptname="技术部");
select * from emp where deptno not in (select deptno from dept where deptname="技术部");
//exists , not exists
//当需要判断后面的查询结果是否存在时使用exists();
select * from emp where exists (select deptno from dept where deptno > 5);
select * from emp where not exists (select deptno from dept where deptno > 5);
union
记录联合// union:返回去重之后的结果
select sname from stu union select sname from stu;
// union all:返回所有结果#相当于一次查询俩列
select sname from stu union all select id from stu;
DCL-数据控制语言 (grant, revoke) 添加权限
grant select,insert on test.* to 'db_user_1'@'localhost'identified by '123456';
flush privileges;
回收权限
revoke insert on test.* from 'db_user_1'@'localhost';
参考:
在此非常感谢以下技术博文
来源:简书 战神悟空-Mysql 基础
推荐阅读
- Mysql数据库基本语法(一)
- MySQL基础与优化|MySQL基本操作之查询
- Oracle|【Oracle】记一次shutdown immediate卡住问题记录
- MySQL|【MySQL】mysql常用命令
- Java毕业设计项目实战篇|基于javaweb+springboot的美食菜谱分享平台系统设计和实现(java+springboot+mysql+ssm)
- MYSQL|mysql5.7安装和配置教程(图文超详细版)
- 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群
- java|看《韩顺平Java》视频的笔记
- java|java 登录注册小程序