https://blog.csdn.net/weixin_44051608/article/details/85163823
一、启动MySQL
1、 win+R或者CMD中输入“services.msc”打开服务,在里面找到MYSQL服务进行控制
![2ac4bde90499152a44cc6b7c46ee446c.png](https://i-blog.csdnimg.cn/blog_migrate/f780a2588ae2c9d93716c62be8bcc7c1.jpeg)
2、cmd下我们输入 net stop mysql80 来禁用MYSQL服务
![7aa977bfd80d77e78f1d7be5ef70c586.png](https://i-blog.csdnimg.cn/blog_migrate/c315547c69106ecb5bb23359ebd8402a.png)
3、cmd下我们输入 net start mysql80 来启用MYSQL服务
![0e90bb7c23efd16598288408292ecadf.png](https://i-blog.csdnimg.cn/blog_migrate/b6853d7748a066a3747db4ab9c4a135d.png)
二、连接MySQL服务器
- 连接本地MySQL
mysql
![295516af3c3be53df314a393dcf98e1f.png](https://i-blog.csdnimg.cn/blog_migrate/0ccf70dd2d7fee9a2e91bbb7e2558fd0.jpeg)
2、指令集
连接好后我们输入 h 来查看一下命令集:
![fa34cef6863ab7d01df5876761af906c.png](https://i-blog.csdnimg.cn/blog_migrate/e067f5ace7252129ac6dd6190493f446.jpeg)
3、退出:
q
exit
quit
![eac8a58c7f7fc16a28ea9bab74150004.png](https://i-blog.csdnimg.cn/blog_migrate/a535d88d5b0c5aa91281a306992093ac.png)
![70b9d0e2aad6da05b805bc8b579c8fb2.png](https://i-blog.csdnimg.cn/blog_migrate/d03f946879edef0c41a71f844e735019.png)
4、连接远程MySQL
mysql -h127.0.0.1 -uroot -p
![11c4834b17374f3ab9e6b2130e1075ae.png](https://i-blog.csdnimg.cn/blog_migrate/7d96ccb2aa2579b62d265cd4ed99a865.png)
或者使用:
mysql --host=127.0.0.1 --user=root --password
![cd5574f6d0c01e7eb7708e9cb4a12b0b.png](https://i-blog.csdnimg.cn/blog_migrate/8c86b797599b5bdf7b88b14b217cd850.jpeg)
三、MySQL目录结构
1、安装目录
![34eae0f9938931c3e482a8a86f36feb3.png](https://i-blog.csdnimg.cn/blog_migrate/b2d4c60d6af4e4732db8935bbed79428.png)
2、数据目录
![397c1597712eda284a3997049dc0efbb.png](https://i-blog.csdnimg.cn/blog_migrate/2bc38fa435c38a2a19a1dae093da3ee2.jpeg)
![d47d2bfe28a79e50e29c489be89eef7c.png](https://i-blog.csdnimg.cn/blog_migrate/e9cd3f61cb08434b6cf41c946fac2f7e.jpeg)
数据库:文件夹
表:文件夹中的文件
数据记录:文件内存储的内容
四、SQL通用语法
1、SQL可以单行或多行书写,以分号结尾。遇到分号之前随意换行
![5ad07b177bd2962c09706b6dcb92731e.png](https://i-blog.csdnimg.cn/blog_migrate/71ed468125bdee2c939f766990673279.png)
2、使用空格或者Tab提高可读性
3、不区分大小写,但关键字推荐用大写
4、单行注释 :① -- (两个横杠一个空格)② # (mysql特有)
5、多行注释:/*。。。。*/
五、MySQL数据类型
1、数值类型
![cb8b6eba239faac838a13ebc54dc87ec.png](https://i-blog.csdnimg.cn/blog_migrate/1e244a3d9a85ecc04816d6d72ffa368e.jpeg)
double(5,2) 表示总共5位,小数点后2位;
2、日期和时间类型
![c08c1d3125f345c8c879968032bec282.png](https://i-blog.csdnimg.cn/blog_migrate/3af4d3b09a8dcedca073420941d3541b.jpeg)
如果使用TIMESTAMP类型,则如果不赋值或者赋值为NULL,则默认保存系统当前时间。
3、字符串类型
![e331b51710d698b660267b23d458051c.png](https://i-blog.csdnimg.cn/blog_migrate/dcb2922bafb6e3ffe83b02f59b76dfc6.jpeg)
varchar(20) 表示最大20个字符
六、SQL分类
1 DDL :用来定义数据库对象:数据库、表、列等;关键字:create drop alter
2 DML:用来对数据库表中的数据进行增删改;关键字:insert delete update
3 DQL:用来查询数据库表中的记录;关键字:select where
4 DCL:定于数据库的访问权限和安全级别及创建用户 关键字:GRANT REVOKE
![3189a7226ebe472ba1d3f7668b0fca86.png](https://i-blog.csdnimg.cn/blog_migrate/a584d7255acff2ee2ea017b41d28fdb6.jpeg)
七、DDL操作:数据库
1、创建
①、创建数据库 create database 数据库名;
![1b7cfb0153b7721851700f1b4304cc48.png](https://i-blog.csdnimg.cn/blog_migrate/f13c7cd620c6a9c4d4739b6ed80fe32a.png)
②、防止重复创建 create database if not exists 数据库名;
![5d28e4731cc986a926ed863c6103a6e1.png](https://i-blog.csdnimg.cn/blog_migrate/36334ad5a2096973dda65f2cd04b90db.png)
③、指定字符集创建 create database 数据库名 character set 字符集名;
![b24bf5e2667de26d316d2016ab078349.png](https://i-blog.csdnimg.cn/blog_migrate/a2c8e127912ef6f90b3d4c307bc872ab.png)
④、判断存在否并指定字符集:create database if not exists 数据库名 character set 字符集名;
![effcc45b811ba480d445d6fd991c0f23.png](https://i-blog.csdnimg.cn/blog_migrate/d635064ccfa91fa0384aed496f226858.png)
2、查询
①、show databases; 显示所有数据库
![9ba9d335510b56a2bfb6e28285a9b55d.png](https://i-blog.csdnimg.cn/blog_migrate/d45a32fc2c291f2842e43d7e11cc553a.png)
数据库对应文件夹:
![d1f9ed821aef25d517762fb5d059a783.png](https://i-blog.csdnimg.cn/blog_migrate/d48ff42eee06f2af9c200d64610b0f37.png)
其中information_schema数据库是特殊视图,并没有对应的物理文件。
mysql对应的是核心数据库
performance_schema对应的是性能数据库
以上数据库不要乱动。
②、查询创建某数据库时使用的语法(主要为了查看字符集)
show create database 数据库名;
![2978a46e169a1ef3a930f11619e602fc.png](https://i-blog.csdnimg.cn/blog_migrate/add191c908df9b6a99d3c468ad9a8e1f.png)
3、修改
①、修改字符集:alter database 数据库名 character set 字符集名;
![54178f7028367f5b870768da895ed2c3.png](https://i-blog.csdnimg.cn/blog_migrate/e91e88db08e0f8ef2aa90a0e1736e7a5.png)
4、删除
①、删除数据库:drop database 数据库名;
![697fdaaa140c37ab3fe4725f662f3d92.png](https://i-blog.csdnimg.cn/blog_migrate/5ab577379fafc6d8a0968b672d9b5a78.png)
②、先检查有没有再删除:drop database if exists 数据库名;
![df76a69c4b75ec7ba08021d5f58078f9.png](https://i-blog.csdnimg.cn/blog_migrate/b4a7b57d6ffbd360865c1ab44a16b3c8.png)
5、使用
① 查询当前正在使用的数据库名称:select database();
![8981af3b93166ce97fd1f4ef45dc9b82.png](https://i-blog.csdnimg.cn/blog_migrate/6fe129bf46a2252aa08546c298967024.png)
②、使用数据库: use 数据库名;
![9a387730db817f21be5ba598cf4388a8.png](https://i-blog.csdnimg.cn/blog_migrate/fa9420c80826dff92ece52c108a4ea4c.png)
八、DDL操作:表
1、创建
①、创建表:create table 表名(列名1 数据类型1,列名2 数据类型2,...,列名n 数据类型n);
![e9252a99f38a898b2551b11d3e8c1a23.png](https://i-blog.csdnimg.cn/blog_migrate/4bff86f8b1adfad85f23632f60c819b0.png)
完成后查一下:
![08fc2e4f53507e5a00da162b96b4a2f4.png](https://i-blog.csdnimg.cn/blog_migrate/e6a41bf1c06fbb86956e430082b7efd0.png)
2、查询
①、查询表集合: show tables;
![3f4c4c48e2cc98bf6ebbd2a0f292c21b.png](https://i-blog.csdnimg.cn/blog_migrate/7dec7512d2411171e71ee03f507f2353.png)
②、查询表结构: desc 表名;
![138b9b4d72e7ff6f719e8e589fdab549.png](https://i-blog.csdnimg.cn/blog_migrate/9aa0c305d6bbc51f6b0efce410f0e86c.png)
3、修改
①、修改表名
alter table 表名 rename to 新表名;
![640a308a858e136c3277f969873d64f1.png](https://i-blog.csdnimg.cn/blog_migrate/b31d5ca5bcb8a419a51dc349f2c31d23.png)
②、修改表的字符集
alter table 表名 character set 字符集名;
![ff953e6a3c9bf25d0d7a16598f4f3dd9.png](https://i-blog.csdnimg.cn/blog_migrate/0c3fe9bdbe4c117c6847bd87e44d6150.png)
③、添加一列
alter table 表名 add 列名 数据类型;
![04f71eb2527e35471b8a2c9f968a450b.png](https://i-blog.csdnimg.cn/blog_migrate/28a5d66d233ab8685f588bbce09e0f90.png)
④、修改一列
alter table 表名 change 列名 新列名 新数据类型;
![28785da48c81827348cc37661d7d1d34.png](https://i-blog.csdnimg.cn/blog_migrate/94115e5ce6fbd8452b8715f5d1e8b29c.png)
⑤、只修改列的类型
alter table 表名 modify 列名 新数据类型;
![a9c2e75603653c4365079bfa9942a6e4.png](https://i-blog.csdnimg.cn/blog_migrate/cff0d611fb69cb43c222b239ea016cf9.png)
⑥、删除列
alter table 表名 dorp 列名;
![74faa1604f5f12c0e67aec97daf4bda7.png](https://i-blog.csdnimg.cn/blog_migrate/166f16f3a9ad4655f1f3672b195fc3bb.png)
4、删除
drop table 表名;
drop table if exists 表名;
九、一个图形化软件mysql workbench
使用图形化软件来更加直观方便的操作数据库,现在MySQL下载会自带
连接数据库后如图:
![1cf7ab4144a53cc387b1b3f9b22b5c66.png](https://i-blog.csdnimg.cn/blog_migrate/b98b1cd0a71ffe1d59dcc7378a0a3ebb.jpeg)
数据库在哪?
![5f08847f25e599b9d4da286d598b7f93.png](https://i-blog.csdnimg.cn/blog_migrate/7cf4d7d43f0da648807c350012258bbe.png)
如何直观的看到表格?
![1a2e768a21de901545ef480b3807fe5b.png](https://i-blog.csdnimg.cn/blog_migrate/97d6805dca81305992b7997cb445eaae.png)
![b034e9a3f87bb0c672380cf35fef83d4.png](https://i-blog.csdnimg.cn/blog_migrate/0fd4405497036d28cfbd3f98766e45a6.png)
如何操作数据库?
全部执行:
![882138cf5026d5d7676c4020b1f15bd6.png](https://i-blog.csdnimg.cn/blog_migrate/50c9b4b63a35390b38bf66d8d4351c51.png)
快捷键 ctrl +enter
单步执行:
![95695380ca8c7f9e0f51336fce2d55e2.png](https://i-blog.csdnimg.cn/blog_migrate/25fd5df26278e486fa9ed62ad46e1753.png)
如何图形化为表中添加数据?
![9e25d37f686d91100ee0b77e7466b87e.png](https://i-blog.csdnimg.cn/blog_migrate/52b6b4fefd5e6c0507a234a642fc3621.png)
![86b3d1ace2c17a7dab944e96ea3f30e9.png](https://i-blog.csdnimg.cn/blog_migrate/8f346bcac890cc21cab09d6aaf610997.png)
创建RE图:
![b266a480b1112eb390a021ae56a2276c.png](https://i-blog.csdnimg.cn/blog_migrate/e2681c046fcf5c9b542806cd758905a4.png)
一路next,选择自己的数据库
![0163ccfc16192e36e2f8529a927ebaf4.png](https://i-blog.csdnimg.cn/blog_migrate/c554fbd057a9fd9f40bf9271a257bbce.jpeg)
十、DML
1、添加数据
①、添加数据
insert into 表名(列名1,列名2.。。。列名n) values (值1,值2,。。。,值n);
insert
②、如果给所有列添加值,可以不写列名;
insert
注意:除了数字类型,其他类型需要使用单/双引号 引起来。
![e3211cccdccc6179e247b0a98d72d662.png](https://i-blog.csdnimg.cn/blog_migrate/477e8883bc4b05e2ec68ff758a892c57.jpeg)
2、删除数据
如果MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令。输入如下命令退出此模式:
SET
①删除数据
delete from 表名 where 条件;
![cc222d098adc85e58f2ccb569a35d517.png](https://i-blog.csdnimg.cn/blog_migrate/0406b2c358fb1beac75fe2290a18b7b4.png)
②、删除所有数据
delete from 表名;
![e2fcc2f054b16a183e9c0ead92b5550d.png](https://i-blog.csdnimg.cn/blog_migrate/885b1dabd9656b7867c15f2e65176911.png)
③、删除整个表
truncate table 表名;
3、修改数据
①、修改数据
update 表名 set 列名1=值1,列名2=值2,......列名n=值n,where 条件;
![fd75abbbfc8a2935d64c769190031344.png](https://i-blog.csdnimg.cn/blog_migrate/344fdec455bca8cd948dc6c11c1c49bb.png)
注意:1、执行此命令同样需要退出SAFE_UPDATES模式
SET SQL_SAFE_UPDATES = 0;
2、如果不加where就会把表里的数据都改了
十一、DQL
1、语法
select
2、基础查询
①、多个字段查询
select 列名1,列名2 from 表名;
![179b0bb3d88941715c9fa61fdc58e50f.png](https://i-blog.csdnimg.cn/blog_migrate/ad52d80af163c831bf34a37445179b09.png)
②、去除重复
SELECT DISTINCT 列名1,列名2 from 表名;
![de2b6a428938aa7d554d95c33ca47193.png](https://i-blog.csdnimg.cn/blog_migrate/586419c716c58a41e0ace841481cfc04.png)
③、计算列
SELECT 列名1+列名2 from 表名;
![bfa33672d89064272517cde4538371d4.png](https://i-blog.csdnimg.cn/blog_migrate/3650547e1121a40794fded82ace79223.png)
上面例子中柳青的成绩相加不对,原因处在null上,所以应引入ifnull判断
![2dbac2e5e757a98e1753c768532746b6.png](https://i-blog.csdnimg.cn/blog_migrate/704ab577f9e4a5e3aed1c3efd35658a4.png)
附:判断null
ifnull(列名,替换值);
当列名出现null时替换为替换值
④、起别名
select 字段名 as 别名 from 表名; #as也可以用空格代替
![69923c5fb17639476c453a15eac4bb68.png](https://i-blog.csdnimg.cn/blog_migrate/2c5c1d3f239d179a1dfd38707b6472c2.png)
起别名后任何位置都可以用别名代替此名。
3.条件查询
①、where后跟条件
![400f1df1919de9933bacfb69748d61bd.png](https://i-blog.csdnimg.cn/blog_migrate/644b84c0df045d85805678cfc2f1f4ec.png)
②、运算符
> < >= <= = != <>(这个也是不等于)
and 并且
between 条件1 and 条件2
or 或者
in (22,18,15); #在。。。中
is null 是null
is not 不是null
注意:null不能用 =来判断 需要用 is来判断
![46acdf8f81c0f7c92df03bebeafe2635.png](https://i-blog.csdnimg.cn/blog_migrate/9792d3cc2459fa6a8eee53b977327747.png)
③、LIKE 模糊查询运算符
占位符:_单个任意字符 %多个任意字符
![e30efe82bec71393db49a3693e097cd4.png](https://i-blog.csdnimg.cn/blog_migrate/079401450a2d3ea2a840e1b755fe951d.png)
![0ed2c5408ad69a95e533da18ea295c46.png](https://i-blog.csdnimg.cn/blog_migrate/56a9a776b6b3be9346f9a3e330c5b2a5.png)
4.排序查询
①语法
order by 排序字段1 排序方式1,排序字段2 排序方式2,。。。。
其中排序方式:
ASC:升序(默认)
DESC:降序
![e5d7421aa808c74766ae46d7f167f621.png](https://i-blog.csdnimg.cn/blog_migrate/3ba713ffe4b401d48b30637f29b5b80e.png)
![0cd03396db37a6fbeeda636e3b6fe240.png](https://i-blog.csdnimg.cn/blog_migrate/0b22792a25b477d36218578a28f65d2c.png)
5、聚合函数
将一列数据按照一个整体进行计算 #列的纵向计算
①、count 计算个数
select count(列名) from 表名;
![7b4fd25ae15963be5cdfbd9bce702f7a.png](https://i-blog.csdnimg.cn/blog_migrate/f711f7ca145aae676e9aa882193e93c1.png)
②、max 最大值
select max(列名) from 表名;
![bd43d3c59c2afc31bc843ae23547b60b.png](https://i-blog.csdnimg.cn/blog_migrate/50a529a8bf2e4e9832c679c51a6fcfe9.png)
③、min
select min(列名) from 表名;
④、sum
select sum(列名) from 表名;
![4be8d30dc9b51696898c96bbafd86951.png](https://i-blog.csdnimg.cn/blog_migrate/4b2d4ee7757daa64a3d6f2bc21787995.png)
⑤、avg
select avg(列名) from 表名;
![e22e1ee1666f948fb88db696168b6e0a.png](https://i-blog.csdnimg.cn/blog_migrate/787415b852a9fe7264fd01d6df3a2443.png)
注意:聚合函数会排除null
6、分组查询
①、语法
group by 列名;
![de0b4fcc196c76dd8367d4e3d88da499.png](https://i-blog.csdnimg.cn/blog_migrate/ae5ec96ad1cfa085a30deeb44d1ea4fa.png)
注意:分组后应该查询 分组或聚合函数才有意义。
②、分组加条件where
![6d8519dfc3356e8785d51db62917b318.png](https://i-blog.csdnimg.cn/blog_migrate/52855a438fd85164b898e2cea1d85b25.png)
③、分组加条件where,完成分组后再加having筛选
![b89e3a0478d4324da5b2ba5b9c7c244e.png](https://i-blog.csdnimg.cn/blog_migrate/cbe1ad54ce5e27f9a59b7eeaed831797.png)
where和having的区别:
-where在分组前限定,having再分组后限定
-where后不可以跟聚合函数 having后可以
④、分页查询
limit 开始的索引 ,每页查询的条数;
开始的索引=(当前页码-1)*3
![bf022d550d8780b90854238bc330ef25.png](https://i-blog.csdnimg.cn/blog_migrate/8ba27e61c26a52ba1a700890ce4d360b.png)
注意:分页操作是一个“方言”,只能用于MySQL。
十二、约束
约束是对输入数据库的数据进行限定,为了保证数据的正确性、有效性、完整性!
1、主键约束 primary key
主键表示非空且唯一,每张表只能有一列主键,主键是记录的唯一标识
①、创建时约束
![424df5b90617ee134e8d9afb238f2216.png](https://i-blog.csdnimg.cn/blog_migrate/40d96f9dbeb38cfe8e4d96b43a2144be.png)
②、追加约束(其实就是修改列的数据类型)
alter
③、删除约束 (其实就是修改列的数据类型)
alter table stu drop primary key;
④、主键自动增长
如果一个列是数值类型的,那么可以使用auto_increment 让其自动增长,一般配合主键来用。
![12089f2b53dda7bb34aa4e84da8f9037.png](https://i-blog.csdnimg.cn/blog_migrate/c2fb8b56242ec71ce9fb91f5aabc8c11.png)
注意:自动增长只与上一条数据有关系
⑤、追加主键自动增长
alter table stu modify id int AUTO_INCREMENT;
⑥、删除主键自动增长(其实就是修改列的数据类型)
alter table stu modify id int;
2、非空约束 not null
①、创建时约束
![ede5dff39730eb1ccf62ea04c6c2281c.png](https://i-blog.csdnimg.cn/blog_migrate/c36c6ca427a0d4adb57921d59be9c9c9.png)
②、追加约束(其实就是修改列的数据类型)
alter table stu modify name varchar(10) NOT NULL;
③、删除约束 (其实就是修改列的数据类型)
alter
3、唯一约束 unique
①、创建时约束
![2f5864576fc90ba024d7c2bb39d130f9.png](https://i-blog.csdnimg.cn/blog_migrate/0c6edb2c0feca87da24fddfbc41da941.png)
②、追加约束(其实就是修改列的数据类型)
alter table stu modify phone varchar(10) unique;
③、删除约束 #此语法有些特殊
alter
注意,唯一并不限定null
4、外键约束 foreign key
外键:让表格中的一列数据关联其他表的数据
①、创建时约束
create table 表名(
。。。。
外键列,
constraint 外键名称 foreign key(要连接外键的列名) references 主表名称(主列表名称)
);
![99e03e77fd0b2f5b2f5e68fdfc1a098e.png](https://i-blog.csdnimg.cn/blog_migrate/7abadaaa220fb8acb3029fd3c72540e3.png)
②、追加约束
alter table 表名 add constraint 随意取一个外键约束名 foreign key (本表列名) references 外键(外键列名);
③、删除约束
alter
④、级联更新
设置级联更新 来确保被外键数据改动,本表的关联外键的数据一起改动
在外键后添加级联ON UPDATE CASCADE
![aaf695c86388732478da9d8a0b321924.png](https://i-blog.csdnimg.cn/blog_migrate/03e20c4539fa4e321e5b7b2311ed5550.png)
此时修改外键数据,本表数据会随之改变
![2d2d486b9e237cc7545526c9a1b483b2.png](https://i-blog.csdnimg.cn/blog_migrate/73fe4be6f4bff216976fff8c556e85e1.png)
⑤、级联删除
在外键后添加级联ON DELETE CASCADE