前言

针对本笔记有以下必看内容,请优先阅读

关于有关指令的格式
必填项目<参考填写内容或解释>选填项目{参考填写内容或解释}|该空解释指令^指令解释

例如 mysql {-h<127.0.0.1^默认|IP或域名>} {-P<3306^默认|端口>} -u<root^超级账号|账号> -p{密码}

  • mysql -h127.0.0.1 -P3306 -uroot -p123456
  • mysql -uroot -p123456
  • mysql -uroot -p

启动与连接·CMD

启动服务 net start mysql80
停止服务 net stop mysql80
登录服务器 mysql -u<账号> -p{密码}
完整的登录指令 mysql {-h<127.0.0.1|IP或域名>} {-P<3306|端口>} -u<账号> -p{密码}

示例·登录本地数据库

net start mysql80
mysql -uroot -p123456

服务器交互

查看服务器信息 \s
显示服务器支持的所有字符集列表 show character set;

数据库交互

查看
查看数据库 show databases;
查看数据库创建信息 show create database <数据库名> {\G^格式化}; 可以查看字符集和校验规则

创建
创建数据库 create database {if not exists} <数据库名> {default character set utf8 default collate utf8_general_ci};

删除
删除数据库 drop database {if exists^如果有则} <数据库名>;

切换
切换数据库 use <数据库名>

修改
修改数据库字符集 alter database <数据库名> default character set <utf8mb4|数据字符集> default collate <utf8mb4_general_ci|数据排序字符集>;

数据表交互

查看
查看所有表 show tables;
查看表结构 desc <表名>;
查看表中所有数据 select * from <表名>;

创建
创建数据表

create table <表名>(
<字段名> <字段类型> {约束},
<字段名> <字段类型> {约束},
...
);

字段类型
数值:int float double decimal(8,2)8位数,2位小数;默认10,0
字符串:char(4) varchar(20) text
二进制类型:binary(4) varbinary(10) blob
日期时间:date time datetime year timestamp
集合类型:enum("男","女") set("a","b","c","d")

约束
主键:primary key 能唯一标识记录(数据/元组)/唯一且非空
是否允许空值:not null / null
默认值:default <具体默认值>
唯一:unique
索引index/key:index <索引名>(<字段名> {asc^升序·默认/<desc>^降序})

自动增加:auto_increment 通常写于主键后面
自动增加列的数据类型是整数类型(例如TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT)。
自动增加列必须是唯一索引的一部分,通常是主键。

删除
删除数据表 drop table {if exists^如果有则} <数据表名>;

修改
修改数据表名 alter table <数据表名> rename to <新表名>;

字段操作

添加
添加字段
alter table <数据表名> add <新字段名> <新字段类型> <first^在开头添加/{after}^在结尾添加> <原有字段名>;
<first^在开头添加/{after}^在结尾添加> <原有字段名>可在其他修改字段的语句中用于移动字段
对已存在的表创建索引
create {unique^唯一索引/fulltext^全文索引/spatial^空间索引|不写默认普通索引} index <索引名> on <数据表名> (<字段名> {数据长度} {asc^升序·默认/<desc>^降序})

删除
删除字段
alter table <数据表名> drop <字段名>;

修改
修改字段名
alter table <数据表名> change <原字段名> <新字段名> <新字段类型>;
修改字段的类型
alter table <数据表名> modify <字段名> <新字段类型>;

添加数据

insert into <数据表名>{(字段1,字段2,...)} values <(数据1){,数据2,...}>;
可以在字段允许为空或者有默认值的时候指定部分字段进行数据添加
添加的数据数量必须与对应的字段数相等

查询select

请注意查询不涉及修改数据表的内容,示例代码如下
select <字段名1>{,字段名2,......} from <表名> {查询参数};

查询指定的整张表 select * from <表名>; *代表全部字段

基础查询

筛选字段 where
select <字段名1>{,字段名2,......} from <表名> where <字段名>=<需要匹配的数据内容>;

模糊查询
% 通配符:表示任意数量(包括零个)的字符
例如:查找所有以 "A" 开头的字符串 "A%"
_ 通配符:表示任意单个字符
查找所有第二个字符是 "B" 的字符串 "_B%"
查找所有第三个字符是 "B" 并且总共有5个字符的字符串 "__B___"
... where name like <模糊查询匹配内容> ...

分组字段 group
select <字段名1>{,字段名2,......} from <表名> group by <字段名> having <分组后筛选,例如where、order by>;

排序字段 order by
select <字段名1>{,字段名2,......} from <表名> order by <字段名> {asc^升序·默认/<desc>^降序};
通常与聚合函数(如 COUNT(), SUM(), AVG(), MAX(), MIN() 等)一起使用。
示例1·例:对学生按系部进行分组查询
select * from s group by sdept;

示例1·例:平均分在80分以上的同学学号
select sno,avg(grade) from sc group by sno having avg(grade)>80;

查询指定范围的数据 limit
查询从表头开始指定记录数的数据
select <字段名1>{,字段名2,......} from <表名> limit <记录数>;
查询选定范围的数据
select <字段名1>{,字段名2,......} from <表名> limit <起始点>,<记录数>;
计算机从0开始计数,例:从第三个数据位置查五个数据则为2,5

函数查询

数学函数 format() 求绝对值,四舍五入,求余数等与数值相关的
求平均分 avg()
select format(avg(<字段名1>){,小数保留位数}) from <表名>;
示例1·例:求1001课程的平均分,结果保留2位小数
select format(avg(grade),2) from sc where cno=1001;

字符函数 substring() 求字符串长度,连接字符串,替换,反转字符串等与字符串处理相关的
查询指定长度的数据
select substring(<字段名1>,<起始点>,<字符数>) from <表名>;
示例1·例:查询学生的姓(假设姓都是第一个汉字)
select substring(sname,1,1) from s;

日期和时间函数 adddate() 获取当前日期或时间,时间转成秒等与时间相关的
查询指定天后的日期
select adddate(curdate(),<指定天数>);

条件与判断 if() 按条件判断进行分支执行
select if(<判断条件>,<True执行>,<False执行>) from <表名>;
示例1·例:如果是男同学显示1,不是男显示0
select if(ssex="男",1,0) from s;

示例1·例:显示所有姓氏
select if(substring(sname,1,2) in ("上官","欧阳","司马"),substring(sname,1,2),substring(sname,1,1)) from s;

加密函数 md5或sha加密
select md5(<字段名1>) from <表名>;
select sha(<字段名1>) from <表名>;

取别名

如有设置别名,在查询显示时则显示对应别名
为表取别名
select <字段名1>{,字段名2,......} from <表名> <别名>;
为字段取别名
select <字段名1 别名>{,字段名2 别名,......} from <表名>;

示例

示例1

#设教学数据库Education有三个关系:
drop database if exists Education;
create database Education;
use Education
#学生关系S(sno,sname,sage,ssex,sdept);
#学号,姓名,年龄,性别,系部
create table S
(sno int,
 sname varchar(20),
 sage int,
 ssex enum('男','女'),
 sdept varchar(30)
);
#添加数据:
insert into S values
(1,'张三',18,'男','计算机系'),
(2,'李四',19,'女','信息系'),
(3,'王五',20,'男','数学系'),
(4,'赵六',21,'女','信息系'),
(5,'上官进',22,'男','数学系'),
(6,'刘仟',null,'男','美术系'),
(7,'张五',24,'女','计算机系'),
(8,'刘启',23,'女','化学系'),
(9,'上官久',18,'男','信息系'),
(10,'张四',null,'男','计算机系');
#学习关系SC(sno,cno,grade);
#学号,课程号,成绩
create table SC
(sno int,
 cno int,
 grade float
);
#添加数据:
insert into SC values(1 , 1001 , 80);
insert into SC values(1 , 1002 , 90);
insert into SC values(1 , 1003 , 99);
insert into SC values(2 , 1001 , 70);
insert into SC values(2 , 1002 , 60);
insert into SC values(2 , 1003 , 80);
insert into SC values(3 , 1001, 80);
insert into SC values(3 , 1002, 80);
insert into SC values(3 , 1003, 80);
insert into SC values(4 , 1001, 50);
insert into SC values(4 , 1002, 30);
insert into SC values(4, 1003 , 20);
insert into SC values(5 , 1001 , 76);
insert into SC values(5 ,1002 , 87);
insert into SC values(5 ,1003 , null);
insert into SC values(6 , 1001 , 31);
insert into SC values(6 , 1002 , null);
insert into SC values(6 , 1003 , 34);
insert into SC values(7 , 1001 , 89);
insert into SC values(7 , 1002 , 66);
insert into SC values(7 , 1003 , 89);
insert into SC values(8 , 1001 , 77);
insert into SC values(8 , 1002 , 89);
insert into SC values(8 , 1003 , null);
insert into SC values(9 , 1001 , null);
insert into SC values(9 , 1002 , 55);
insert into SC values(9 , 1003 , 89);
insert into SC values(10 , 1001 , null);
insert into SC values(10 , 1002 , null);
insert into SC values(10 , 1003 , 46);
#课程关系C(cno,cname,cdept,tname);
#课程号,课程名,开课系部,先修课程
create table C
(cno int,
 cname varchar(20),
 cdept varchar(30),
 tname varchar(20)
);
#添加数据:
insert into C (cno,cname,cdept,tname)values
(1001,'MYSQL','计算机系','DB_Design'),
(1002,'DB_Design','信息系','C_Language'),
(1003,'DBxDescription','数学系',null);

一名既不Kirakira也不让人Dokidoki的普通人~