一、启动MySQL
1、 win+R或者CMD中输入“services.msc”打开服务,在里面找到MYSQL服务进行控制
![v2-c2a1969f92db5a643e9849e429005cb5_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/1c2f7df0a60c39580e8407cc6fa42c1c.jpeg)
2、cmd下我们输入 net stop mysql80 来禁用MYSQL服务
![v2-bc5b76c81464f2a697fa729dac86bc61_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/f6c4211079d1295cf4e7b884d2224e99.png)
3、cmd下我们输入 net start mysql80 来启用MYSQL服务
![v2-19b09b474783b740d2e9e4c5f2e4ba1a_b.png](https://i-blog.csdnimg.cn/blog_migrate/f354b7f1d20037bdb62f6a4437fb0f0b.png)
二、连接MySQL服务器
- 连接本地MySQL
mysql -uroot -p
![v2-dab44ebef7296346d92fb19a1a3d8236_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/a700b3340157e9177dc3f5dbdd53dd1d.jpeg)
2、指令集
连接好后我们输入 \h 来查看一下命令集:
![v2-4633990928ef30b9b5ab005dc9dd3474_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/1843939890aedd04c5b5863100a2fc81.jpeg)
3、退出:
\q
exit
quit
![v2-af24da5ec04d79c200da74dc79d89478_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/2f5503975824b012f84ba487752ae4ba.jpeg)
![v2-952cd65bb7cf5d34ec8ce1ec2b68e694_b.png](https://i-blog.csdnimg.cn/blog_migrate/319719fbb928daf99ea8b7756ad86c45.png)
4、连接远程MySQL
mysql -h127.0.0.1 -uroot -p
![v2-ce90d4af2cd42e5f96154c7db9becaf3_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/0438f474fbfe1b64fb509f16b5748d11.png)
或者使用:
mysql --host=127.0.0.1 --user=root --password
![v2-8f43458f45cb105be39a26e5a16e0f1f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/cbd569931d27b8df857e812e1780eb0d.jpeg)
三、MySQL目录结构
1、安装目录
![v2-9d96dc3ef2f996860ffda97ff8641440_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/22a1b6bd96263fad89e98050f8c0e562.jpeg)
2、数据目录
![v2-9c4a0bc64ac6ada07fec9007239810cb_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/9334bfff688355f66622bef26f4c0fe9.jpeg)
![v2-69253ee8260a5238ee9e35bac915ee1e_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/22dc4423df513cbe10167ec19b42f8cd.jpeg)
数据库:文件夹
表:文件夹中的文件
数据记录:文件内存储的内容
四、SQL通用语法
1、SQL可以单行或多行书写,以分号结尾。遇到分号之前随意换行
![v2-b04607e22774044e26ce454544b02a23_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/45742e7e62e8a600c90d452959113af1.png)
2、使用空格或者Tab提高可读性
3、不区分大小写,但关键字推荐用大写
4、单行注释 :① -- (两个横杠一个空格)② # (mysql特有)
5、多行注释:/*。。。。*/
五、MySQL数据类型
1、数值类型
![v2-1a48fc13d663e6f20e44db92152c583b_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/665ef86b600f95937bb1cf59880ca00c.jpeg)
double(5,2) 表示总共5位,小数点后2位;
2、日期和时间类型
![v2-eca7240c4585d3e81d1cc77a7593a9d4_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/6b06500760a979c6f879431f854cb7d8.jpeg)
如果使用TIMESTAMP类型,则如果不赋值或者赋值为NULL,则默认保存系统当前时间。
3、字符串类型
![v2-92e97f33d79fe326a83245cf96f75231_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/8cf27748d6e627978f22e2f210f40b74.jpeg)
varchar(20) 表示最大20个字符
六、SQL分类
1 DDL :用来定义数据库对象:数据库、表、列等;关键字:create drop alter
2 DML:用来对数据库表中的数据进行增删改;关键字:insert delete update
3 DQL:用来查询数据库表中的记录;关键字:select where
4 DCL:定于数据库的访问权限和安全级别及创建用户 关键字:GRANT REVOKE
![v2-fec0ff5135db50dd962e382ca94482c5_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/b02430792a03dbc7cedc1582e0aa651b.jpeg)
七、DDL操作:数据库
1、创建
①、创建数据库 create database 数据库名;
![v2-0a5b1a9c1b0fbc6dc67da05df70e3664_b.png](https://i-blog.csdnimg.cn/blog_migrate/3c7ede92a964bcc99f3aa0d3f785719b.png)
②、防止重复创建 create database if not exists 数据库名;
![v2-48eb124719f3634dfb5443752dd9bb11_b.png](https://i-blog.csdnimg.cn/blog_migrate/d9577e5f78999a0bed74c7cc1c738893.png)
③、指定字符集创建 create database 数据库名 character set 字符集名;
![v2-00bc5195a4f9a10a1e350a2085986266_b.png](https://i-blog.csdnimg.cn/blog_migrate/733604f757738b27fb2010c978fb1c3d.png)
④、判断存在否并指定字符集:create database if not exists 数据库名 character set 字符集名;
![v2-18c79797350d01a95cd29af659a4a46d_b.png](https://i-blog.csdnimg.cn/blog_migrate/047bccbe7990e42ff88fe7f8bde24c01.png)
2、查询
①、show databases; 显示所有数据库
![v2-45f2d6e89a48eb2981008a11a12213c8_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/8e1b61040dae85a2939b0e532c02ae9e.jpeg)
数据库对应文件夹:
![v2-d0e9e14f4244649d545e5fc6350b286e_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/f766add30056e8b76c2541fb4f097108.png)
其中information_schema数据库是特殊视图,并没有对应的物理文件。
mysql对应的是核心数据库
performance_schema对应的是性能数据库
以上数据库不要乱动。
②、查询创建某数据库时使用的语法(主要为了查看字符集)
show create database 数据库名;
![v2-71d9037d33ebc1576b8541c58d556208_b.png](https://i-blog.csdnimg.cn/blog_migrate/766a547f7b5cb6e84ab1b3d41a5fc87e.png)
3、修改
①、修改字符集:alter database 数据库名 character set 字符集名;
![v2-64260d96bc594cc7548bcf413eca6d58_b.png](https://i-blog.csdnimg.cn/blog_migrate/58aa032a578312fca601ccd55408e60f.png)
4、删除
①、删除数据库:drop database 数据库名;
![v2-271b86a1159eade674bdc64c4133f2e3_b.png](https://i-blog.csdnimg.cn/blog_migrate/bdee48b71a06f19bc0da3ee84b4e5e10.png)
②、先检查有没有再删除:drop database if exists 数据库名;
![v2-63ed03d2be6a30c03d9da6a302543634_b.png](https://i-blog.csdnimg.cn/blog_migrate/dee4445dd740b123df606a05b8de14eb.png)
5、使用
① 查询当前正在使用的数据库名称:select database();
![v2-414b5a7c6b0c7d6ab7469c5c173f54be_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/3ddd43bcae2df7ea4b01e453c16078e9.png)
②、使用数据库: use 数据库名;
![v2-49404013002fc5549068a4bcded647cb_b.png](https://i-blog.csdnimg.cn/blog_migrate/06b4b5eefcb64319eae269eee3a40f4e.png)
八、DDL操作:表
1、创建
①、创建表:create table 表名(列名1 数据类型1,列名2 数据类型2,...,列名n 数据类型n);
![v2-12dd4dca6277210841a11913731c27b3_b.png](https://i-blog.csdnimg.cn/blog_migrate/e4c94e344ab199ead0790e30946891f8.png)
完成后查一下:
![v2-a179d357fccececad1eb12396b0787ce_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/c6a67adb38bf192a52738ee4d7c3b184.png)
2、查询
①、查询表集合: show tables;
![v2-bde645b5363fc6bb9e91eeeb25332a6d_b.png](https://i-blog.csdnimg.cn/blog_migrate/a5d081ddcd7031ce7bc0c81e69696f0e.png)
②、查询表结构: desc 表名;
![v2-559ece9760a257964f0425a53d0a4419_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e3542b7a29e442f9bd4ec2a27f0b216a.png)
3、修改
①、修改表名
alter table 表名 rename to 新表名;
![v2-d4610f3a1f1ed85f5ff62729cd532156_b.png](https://i-blog.csdnimg.cn/blog_migrate/492fc732b9eff9d4649fb22116af04c2.png)
②、修改表的字符集
alter table 表名 character set 字符集名;
![v2-0f31249c0762a0f4fbab162982acb8b9_b.png](https://i-blog.csdnimg.cn/blog_migrate/a0d20ce107bf6b5fe653d5a92b6a58ba.png)
③、添加一列
alter table 表名 add 列名 数据类型;
![v2-9ce0eaaaace7f682c8a6f9585c5628fa_b.png](https://i-blog.csdnimg.cn/blog_migrate/1a587b4769125b2c94e18fd3259065fb.png)
④、修改一列
alter table 表名 change 列名 新列名 新数据类型;
![v2-e51dcc6f229fd44a9e3226f38b5f2798_b.png](https://i-blog.csdnimg.cn/blog_migrate/61b53f9bd1fcdc73d8481c0fcb787413.png)
⑤、只修改列的类型
alter table 表名 modify 列名 新数据类型;
![v2-d96d432568bc45d5bcea0a3ced2d6773_b.png](https://i-blog.csdnimg.cn/blog_migrate/233b898dc1c85c9c0733f9defadb8010.png)
⑥、删除列
alter table 表名 dorp 列名;
![v2-e8c8c3627a9b9987ff77e423e49ae0a5_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/c17b4e7f50017e6da1d9ca90d0c28045.png)
4、删除
drop table 表名;
drop table if exists 表名;
九、一个图形化软件mysql workbench
使用图形化软件来更加直观方便的操作数据库,现在MySQL下载会自带
连接数据库后如图:
![v2-0d07c2819d2ee1f7fe70a04a27cb649c_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/5b4fe9ab82c8fe86d2ba1e960215dbc3.jpeg)
数据库在哪?
![v2-98492a18a37af5c9cd5810e8afeb21a8_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/2a6cb61c50ed697fc64b974792b1f2a4.png)
如何直观的看到表格?
![v2-b0c6f6fe1de8d78656db858b6c080613_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/8429ea1e5c029339570b2bd82669c85c.png)
![v2-1818fb6311691187030e1481ac12c143_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/efa5aaf6543f483a165555c0b2a97a2c.png)
如何操作数据库?
全部执行:
![v2-002a836e6339ecbc632a2549a26c7a41_b.png](https://i-blog.csdnimg.cn/blog_migrate/28039727ffd0b089a7c56daae561283b.png)
快捷键 ctrl +enter
单步执行:
![v2-5a5270da21794d0fb7487daf73f6d8af_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/3baf712b486f5c234f18429677133e85.png)
如何图形化为表中添加数据?
![v2-0b8aa23ef6467c1e440063bdef3d9514_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/976ebbbbda2f2e8f98d39b77793cb2b2.jpeg)
![v2-7ee62e82d0700d83d65c6cfc5da7254f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/5356e2517f1db5fe57e1c1c444416531.png)
创建RE图:
![v2-b9913e0bc5a9551bed80f0e1e82fe7ea_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/c71d4899a4834bbd6c49591ac7d61cb6.png)
一路next,选择自己的数据库
![v2-839f71cb1bb64198bff1f0f850c18a91_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/3a11d500c93f31432820ef15f58257eb.jpeg)
十、DML
1、添加数据
①、添加数据
insert into 表名(列名1,列名2.。。。列名n) values (值1,值2,。。。,值n);
insert into stu(id,name,nianling,score,sex) values(1,'范冰冰',18,59,'女');
②、如果给所有列添加值,可以不写列名;
insert into stu values(2,'佟丽娅',24,99,null,null,'优秀','女');
注意:除了数字类型,其他类型需要使用单/双引号 引起来。
![v2-4a36cfdfca6eea1474d164142fdb18d3_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/ae9d82a02bc6e8bd757f67294ae52f11.jpeg)
2、删除数据
如果MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令。输入如下命令退出此模式:
SET SQL_SAFE_UPDATES = 0;
①删除数据
delete from 表名 where 条件;
![v2-148d12f347db12b656f9c00cdd007276_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/8d1389901104eb87f9cc654eb8482fda.png)
②、删除所有数据
delete from 表名;
![v2-60216dc1b9f3c260f4ad4371cecbbf3d_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/4679d7a58659e1f16f9b8558e4504f78.png)
③、删除整个表
truncate table 表名;
3、修改数据
①、修改数据
update 表名 set 列名1=值1,列名2=值2,......列名n=值n,where 条件;
![v2-36f15b54eaa054d665d2c66aaf223988_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/aa3cd92b47f8b2c2329ac101dd2c77ec.png)
注意:1、执行此命令同样需要退出SAFE_UPDATES模式
SET SQL_SAFE_UPDATES = 0;
2、如果不加where就会把表里的数据都改了
十一、DQL
1、语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件限定
order by
排序
limit
分页限定
2、基础查询
①、多个字段查询
select 列名1,列名2 from 表名;
![v2-3568bc525142e063294410972ee4aa9a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/b1478f4edb5ceb977469834558b21dae.png)
②、去除重复
SELECT DISTINCT 列名1,列名2 from 表名;
![v2-550c0ba7f0018a127b44635af1ecf778_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/95de7eb878341f0dad4e39dca4bb58e9.png)
③、计算列
SELECT 列名1+列名2 from 表名;
![v2-cdda5ebfaaecb03084da0aabfb5b07c7_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/c01740f7a22a4274938b761c42a9b991.png)
上面例子中柳青的成绩相加不对,原因处在null上,所以应引入ifnull判断
![v2-c0b87d120c85d7a544840a4422158962_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/89f650339ee8ab7707de660b7270a260.png)
附:判断null
ifnull(列名,替换值);
当列名出现null时替换为替换值
④、起别名
select 字段名 as 别名 from 表名; #as也可以用空格代替
![v2-aa2afbd12aebe84afaa4956d5ff7a360_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/1b1da778edb9f74d81e8787a64e9db98.png)
起别名后任何位置都可以用别名代替此名。
3.条件查询
①、where后跟条件
![v2-b1434c426333b6b60099b1aed5b8458a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/eb80c03310c7e239c88871daaffff8b5.png)
②、运算符
> < >= <= = != <>(这个也是不等于)
and 并且
between 条件1 and 条件2
or 或者
in (22,18,15); #在。。。中
is null 是null
is not 不是null
注意:null不能用 =来判断 需要用 is来判断
![v2-688e68c9df62e28cae38f81944409959_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/5d93a6f6545e1c592a1406b48798dccd.png)
③、LIKE 模糊查询运算符
占位符:_单个任意字符 %多个任意字符
![v2-a9647e78015283efe697c5d6de8cf17a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/65bdcc3bea085e19a3e513791400a60e.png)
![v2-9cec1523ea09b3eae98babfa988030a4_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/1841a24109b4a4f79b4b3ac9d1ded045.jpeg)
4.排序查询
①语法
order by 排序字段1 排序方式1,排序字段2 排序方式2,。。。。
其中排序方式:
ASC:升序(默认)
DESC:降序
![v2-79cfb47de77a197f57dc9cd1df020475_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/43307c32c1ab0af5ab3ffa6a8e3c2f25.png)
![v2-219c2d80fbaf25852c61ede050e8b86c_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/8b105b8edc151e9673f9377ad57f4cd3.png)
5、聚合函数
将一列数据按照一个整体进行计算 #列的纵向计算
①、count 计算个数
select count(列名) from 表名;
![v2-fe2e71c151dbc4155cd2359d73c0dca9_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/8959dd75e6f262f06a6edd06f1abf328.png)
②、max 最大值
select max(列名) from 表名;
![v2-9a536af4014a6212aebe0b09b3f66d0c_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/d587d12deb778f3bd3844311091e0351.png)
③、min
select min(列名) from 表名;
④、sum
select sum(列名) from 表名;
![v2-643cf0a1706bb1ebc04958b1d81db00f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/e2d4432e0a8a21c9b22f226040d9529c.png)
⑤、avg
select avg(列名) from 表名;
![v2-3d3311bf2f7d14e66446056415c89499_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/1633b98f2c9bdf1b6d67cc94d0a3b247.png)
注意:聚合函数会排除null
6、分组查询
①、语法
group by 列名;
![v2-8582c62fefd2c3dcd6a69c874da739c7_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/9d2901b3fde63998145d9e0857e8f0e3.png)
注意:分组后应该查询 分组或聚合函数才有意义。
②、分组加条件where
![v2-714773f55f604ac0568dae18bdd142c1_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/57f5808a3f4510d7b0f2a60c861bea25.png)
③、分组加条件where,完成分组后再加having筛选
![v2-3c1ee407bbcbcf1f45e5d66128ee20ed_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/6f68fa24d6044d84e45ffad40431bd36.png)
where和having的区别:
-where在分组前限定,having再分组后限定
-where后不可以跟聚合函数 having后可以
④、分页查询
limit 开始的索引 ,每页查询的条数;
开始的索引=(当前页码-1)*3
![v2-94b499f8c933dead9a972a0f0fc2690f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/6cea7e8eba7940e7c5a6117d14ec6746.png)
注意:分页操作是一个“方言”,只能用于MySQL。
十二、约束
约束是对输入数据库的数据进行限定,为了保证数据的正确性、有效性、完整性!
1、主键约束 primary key
主键表示非空且唯一,每张表只能有一列主键,主键是记录的唯一标识
①、创建时约束
![v2-7873572c2d819c2508993206ee370317_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/3a655379820091a05ad7d93c80bb3a26.png)
②、追加约束(其实就是修改列的数据类型)
alter table stu modify id int PRIMARY KEY;
③、删除约束 (其实就是修改列的数据类型)
alter table stu drop primary key;
④、主键自动增长
如果一个列是数值类型的,那么可以使用auto_increment 让其自动增长,一般配合主键来用。
![v2-523a08f9b0e2f71891492f0381186ed2_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/ba80254e4fb8d0ec11ce6b1439a389bb.png)
注意:自动增长只与上一条数据有关系
⑤、追加主键自动增长
alter table stu modify id int AUTO_INCREMENT;
⑥、删除主键自动增长(其实就是修改列的数据类型)
alter table stu modify id int;
2、非空约束 not null
①、创建时约束
![v2-c33a0d9ee68c18819bb4f68163e58a1a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/484ff5e0ae6f50cf33298d715eb02686.png)
②、追加约束(其实就是修改列的数据类型)
alter table stu modify name varchar(10) NOT NULL;
③、删除约束 (其实就是修改列的数据类型)
alter table stu modify name varchar(10);
3、唯一约束 unique
①、创建时约束
![v2-a4afcf9cf6c7b758d23541ddc19131a5_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/249219c2721d51e40a4edcdc57792ad8.png)
②、追加约束(其实就是修改列的数据类型)
alter table stu modify phone varchar(10) unique;
③、删除约束 #此语法有些特殊
alter table stu drop index phone;
注意,唯一并不限定null
4、外键约束 foreign key
外键:让表格中的一列数据关联其他表的数据
①、创建时约束
create table 表名(
。。。。
外键列,
constraint 外键名称 foreign key(要连接外键的列名) references 主表名称(主列表名称)
);
![v2-7c91df4d310640efa532871dede1b86a_b.png](https://i-blog.csdnimg.cn/blog_migrate/2976014a3a2f43c58cde0c4b8b27ab7a.png)
②、追加约束
alter table 表名 add constraint 随意取一个外键约束名 foreign key (本表列名) references 外键(外键列名);
③、删除约束
alter table stu drop foreign key 外键名;
④、级联更新
设置级联更新 来确保被外键数据改动,本表的关联外键的数据一起改动
在外键后添加级联ON UPDATE CASCADE
![v2-94b60d60f85e1640652ffbee29f7329b_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/9710427187aae808998dfb9c1d2e831a.png)
此时修改外键数据,本表数据会随之改变
![v2-09c2cbacd25ad62693aaa222c2d16c8a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/85fd16f8a3b668122ba7cf1649b82f22.png)
⑤、级联删除
在外键后添加级联ON DELETE CASCADE