下载
1.进入mysql官网,点击下列链接
2.选择server
3.点击Archives,Archives,选择需要的版本
安装
基本是点下一步,值得注意的几点如下:
1、显示所有准备安装的MySQL相关应用,点击"[Execute]"开始执行安装
具体安装参考https://blog.csdn.net/timelessheart/article/details/106267738
2、在cmd输入,mysql -u root -p进行验证
使用
1、登录退出
sql
#登录
mysql -u root -proot
#退出
exit
# 查看当前用户名
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
2、库操作
sql
# 1.查看所有数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.00 sec)
# 2.打开world数据库
mysql> use world;
Database changed
# 3.查看当前所在的数据库
mysql> select database();
+------------+
| database() |
+------------+
| world |
+------------+
# 4.出示当前库里面的表
mysql> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city |
| country |
| countrylanguage |
+-----------------+
3 rows in set (0.01 sec)
# 5.查看world库里的表
mysql> show tables from world;
+-----------------+
| Tables_in_world |
+-----------------+
| city |
| country |
| countrylanguage |
+-----------------+
3 rows in set (0.01 sec)
# 6.创建数据库
mysql> create database test;
Query OK, 1 row affected (0.01 sec)
# 7.删除数据库
mysql> drop database test;
Query OK, 0 rows affected (0.02 sec)
3、表操作
sql
# 1.新建表结构
mysql> create table stu(
-> id int,
-> name varchar(20));
Query OK, 0 rows affected (0.09 sec)
mysql> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city |
| country |
| countrylanguage |
| stu |
+-----------------+
4 rows in set (0.00 sec)
# 2.出示表结构
mysql> desc stu;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
# 输出更全面的表定义信息
mysql> show create table stu \G;
*************************** 1. row ***************************
Table: stu
Create Table: CREATE TABLE `stu` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
ERROR:
No query specified
# 3.查看表数据
mysql> select * from stu;
Empty set (0.00 sec)
# 4.删除表
mysql> drop table a;
Query OK, 0 rows affected (0.01 sec)
#4.插入数据
mysql> insert into stu (id,name) values(1,'john');
Query OK, 1 row affected (0.01 sec)
mysql> insert into stu (id,name) values(2,'rose');
Query OK, 1 row affected (0.01 sec)
mysql> select * from stu;
+------+------+
| id | name |
+------+------+
| 1 | john |
| 2 | rose |
+------+------+
2 rows in set (0.00 sec)
# 5.删除表数据
mysql> delete from stu where id=1;
Query OK, 1 row affected (0.01 sec)
mysql> select * from stu;
+------+------+
| id | name |
+------+------+
| 2 | rose |
+------+------+
1 row in set (0.00 sec)
4、系统信息
#查看版本号
mysql> select version();
+------------+
| version() |
+------------+
| 5.7.30-log |
+------------+
1 row in set (0.00 sec)
# 查看当前日期
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2022-04-22 |
+----------------+
1 row in set (0.00 sec)
# 查看当前时间
mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 15:56:07 |
+----------------+
1 row in set (0.01 sec)
#查看当前时间戳
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2022-04-22 15:56:29 |
+---------------------+
1 row in set (0.00 sec)
修改表
创建一个名称为emp的表。表中包括 ename(姓名)、hiredate(雇用日期)和 sal (薪水)3个字段,字段类型分别为varchar(10)、date、int(2)。
create table emp(ename varchar(10),hiredate date,sal decimal(10,2),deptno int(2));
对于已经创建好的表,尤其是已经有大量数据的表,如果需要做一些结构上的改变,可以先将表删除(drop),然后再按照新的表定义重建表。这样做没有问题,但是必然要做一些额外的工作,比如数据的重新加载。而且,如果有服务在访问表,也会对服务产生影响。
因此,在大多数情况下,表结构的更改都使用 alter table语句,以下是一些常用的命令。
(1)修改表类型
修改表emp的ename字段定义,将varchar(10)改为varchar(20)
mysql> alter table emp modify ename varchar(20);
(2)增加表字段
在表emp中新增加字段age,类型为int(3)
mysql> alter table emp add column age int(3);
(3)删除表字段
将字段age删除掉
mysql> alter table emp drop column age;
(4)字段改名
将age改名为age1,同时修改字段类型为int(4)
mysql> alter table emp change age age1 int(4);
change和modify都可以修改表的定义,不同的是change后面需要写两次列名,不方便。但是change的优点是可以修改列名称,modify则不能。
(5)修改字段排列顺序
前面介绍的字段增加和修改语法(ADD/CHANGE/MODIFY)中,都有一个可选项first|after column_name,这个选项可以用来修改字段在表中的位置,ADD增加的新字段默认是加在表的最后位置,而CHANGE/MODIFY默认都不会改变字段的位置。
将新增的字段 birth date加在 ename之后
mysql> alter table emp add birth date after ename;
修改字段age,将它放在最前面
mysql> alter table emp modify age1 int(3) first;
(6)更改表名
mysql> alter table emp rename emp1;
DML语句
DML 操作是指对数据库中表记录的操作,主要包括表记录的插入( insert )、更新(update)、删除(delete)和查询(select)
1.插入记录
向表emp中插入以下记录:ename为zzx1,hiredate为2000-01-01,sal为2000,deptno为1
mysql> insert into emp values('zzx1','2000-01-01','2000',1);
含可空字段、非空但是含有默认值的字段、自增字段,可以不用在insert后的字段列表里面出现,values后面只写对应字段名称的value。这些没写的字段可以自动设置为NULL、默认值、自增的下一个数字,这样在某些情况下可以大大缩短SQL语句的复杂性。
只对表中的ename和sal字段显式插入值
mysql> insert into emp (ename,sal) values('dony',1000);
mysql> select * from emp;
+-------+------------+---------+--------+
| ename | hiredate | sal | deptno |
+-------+------------+---------+--------+
| zzx1 | 2000-01-01 | 2000.00 | 1 |
| dony | NULL | 1000.00 | NULL |
+-------+------------+---------+--------+
2 rows in set (0.00 sec)
insert语句还有一个很好的特性,可以一次性插入多条记录
mysql> insert into emp values('a','2001-1-2','3000',1),('b','2002-3-4','4000',2);
2.更新记录
表里的记录值可以通过update命令进行更改
将表emp中ename为"zzxl"的薪水(sal)从2000更改为3000
mysql> update emp set sal=3000 where ename='zzxl';
update命令可以同时更新多个表中数据
mysql> update emp a,dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;
注意:多表更新的语法更多地用在了根据一个表的字段来动态地更新另外一个表的字段。
3.删除记录
在emp中将ename为"b"的记录全部删除
mysql> delete from emp where ename='b';
可以一次删除多个表的数据
mysql> delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3;
4.查询记录
将表emp中的记录全部查询出来
mysql> select * from emp;
mysql> select ename,hiredate,sal,deptno from emp;
在实际应用中,用户还会遇到各种各样的查询要求,下面将分别介绍
(1)查询不重复的记录
mysql> select distinct deptno from emp;
(2)条件查询
查询所有deptno为1的记录
mysql> select * from emp where deptno=1;
多个条件之间还可以使用 or、and 等逻辑运算符进行多条件联合查询
mysql> select * from emp where deptno=1 and sal<3000;
(3)排序和限制
用关键字ORDER BY来实现 DESC|ASC
把emp表中的记录按照工资高低进行显示
mysql> select * from emp order by sal;
对于deptno相同的前两条记录,如果要按照工资由高到低排序,可以使用以下命令
mysql> select * from emp order by deptno,sal desc;
对于排序后的记录,如果希望只显示一部分,而不是全部,这时,就可以使用LIMIT关键字来实现
语法:SELECT ...[LIMIT offset_start,row_count],其中offset_start表示记录的起始偏移量,row_count表示显示的行数。
在默认情况下,起始偏移量为 0,只需要写记录行数就可以,这时,实际显示的就是前 n条记录。
显示emp表中按照sal排序后的前3条记录
mysql> select * from emp order by sal limit 3;
显示emp表中按照sal排序后从第二条记录开始的3条记录
mysql> select * from emp order by sal limit 1,3;
limit经常和 order by一起配合使用来进行记录的分页显示。
(4)聚合
进行一些汇总操作,比如统计整个公司的人数或者统计每个部门的人数。
聚合操作的语法如下:
SELECT [field1,field2,...,fieldn] fun_name
FROM tablename
[WHERE where_contition]
[GROUP BY field1,field2,...,fieldn
[WITH ROLLUP]]
[HAVING where_contition]
对其参数进行以下说明。
fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum(求和)、count(*) (记录数)、max(最大值)、min(最小值)。
GROUP BY关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在 group by后面。
WITH ROLLUP是可选语法,表明是否对分类聚合后的结果进行再汇总。
HAVING关键字表示对分类后的结果再进行条件的过滤。