下载并安装mySql
打开mySql官网下载地址,下载安装包
官网下载地址:https://dev.mysql.com/downloads/windows/installer/8.0.html,下载最新的mysql installer 8.0
安装软件:使用custom自定义模式安装,安装的过程中只安装server服务器即可,TCP/IP端口选择3306,其余默认即可。安装完毕,在开机启动栏中会出现mySql 8.0 Command line client
连接mysql 服务器
点击mySql 8.0 command line client,出现输入密码界面,输入安装软件的时候设置的密码,回车,连接到mysql 服务器
mySql-数据库基本操作
1 创建一个数据库:
create database if not exists 数据库名;这里假设数据库名为testBase,
具体输入命令:
create database if not exists testBase;
2 打开数据库:
use 数据库名//这里接上一步的操作,后续都是接上一步的操作
具体输入命令:use testBase;
3 在该数据库中创建一个表:
create table if not exists 表名称;
具体输入命令:create table if not exists user;
4 查看系统中存在的数据库:
show databases;//显示系统中存在的所有的数据库
5 获取当前打开的数据库:
select database();
6 删除数据库:
drop database 数据库名,具体输入命令:
drop database testBase;
总结:本章节介绍数据库的操作,包括了创建一个数据库,打开数据库,在数据库中创建一个表,查看这个数据库中的表,查看系统存在的数据库,以及删除一个数据库。如果联系的时候可以遵循:
create database if not exists testBase;
use testBase;
select database();
create table if not exists testTable(
id tinyint unsigned );
show create database testBase;
show databases;
drop database testBase;
注意:只有在打开数据库的前提下才能够创建表格。另外在mysql中,关键字一般大写,这里为了书写方便小写,建议养成大写的习惯。
mySql-表的基本操作
1 创建一个表
创建表之前要先打开一个数据库
create table if not exists table_test1(
字段名1 字段类型 非空约束 默认值,
字段名2 字段类型,
…
);
2 查看表的结构:
show create table 表名
desc 表名
show colums from 表名 或者show columns in 表名
3 显示当前打开的数据库中存在的所有表
show tables;
4 往表中插入数据:
insert 表名(字段名1,字段名2…) values(字段1的值,字段2的值,…);//采用该种方式插入的时候,可以不用设置默认的字段的值
也可以简写:
insert 表名 values(字段1的值,字段2的值,…)这种插入数据的方式会采取与表的结构一致的顺序,注意一些非空字段和默认字段,如果采用默认值,可以将该字段的值设置为default,但不要漏了某个字段,即使这个字段有默认值。
另外,往表中插入记录的时候,注意每个字段的范围。如果要确认某个类型的字段的范围,可以使用? 类型,查看该类型的范围;
5 查看表的内容:
select *from 表名;
6 修改表的自增长值
alter table 表名 auto_increment=value1//下次插入的时候,将会从这个自增长值开始插入
7 修改表的名字
alter table 表名 rename 新的表名;
rename table 旧的表名 to 新的表名;
8:在表中插入新的字段
alter table 表名 add 字段名 字段类型;//还可以在后面添加对该字段的一些限制,比如非空限制not null,唯一限制 unique,位置限制 after 某个字段或者 first代表插入到第一个字段的前面,设置默认值 default
9:删除表中某个字段
alter table 表名 drop 字段名
10 修改表中某个字段的类型
alter table 表名 modify 字段名 类型…
alter table 表名 alter 字段名 set default value//修改某个字段的默认值
alter table 表名 change 字段名 字段类型//
11 修改表的引擎:
alter table 表名 engine=新的引擎
总结:本章是对表的一些列操作。可以掌握常见的几种操作,对于不常见的操作,只要知道如何查找相关命令即可。常见的操作包括表的创建,查看表的结构,查看表的内容,往表中添加记录,修改表的名字,表中的字段,往表中添加字段等。
12 更新表中的记录:
update 表名 set 字段名1=value1,字段名2=value2 …
如 update usr set age=20,email=test@163.com
13 删除表中的记录
delete from 表名;清空表中的所有记录
清空表中所有记录还有一个命令:
truncate 表名
两条命令的不同之处是truncate命令之后,auto_increment会重置,而delete后,auto_increment 不会重置。
如果要删除表中的某个记录,加入where限定条件,如:
delete from usr where age=5;
推荐操作:
create table if not exists table_test1(
id tinyint unsigned key auto_increment,
usrname varchar(10) not null default ‘root’,
password varchar(12) not null default ‘1234’
);
show create table table_test1;
insert table table_test1 values(1,‘king’,‘king’);
alter table table_test1 auto_increment=value2;
show create table table_test1;
rename table_test1 to table_test;
rename table_test to table_test1;
alter table table_test1 add age tinyint default 20;
alter table table_test1 drop age;
select * from table_test1;
update table_test1 set usrname=‘test’;
delete from table_test1;
insert table_test1(usrname,password) values(‘king’,‘king’);
select *from table_test1;
truncate table_test1;
show create table table_test1;
mySql-表的查询
1 从表中查询某个字段的内容:
select 字段名1,字段名2 from 表名
操作演示:(1)创建一个表
(2)往表中插入记录
(3)对表中的某个字段内容进行查询
如:create table if not exists table_test(
id tinyint unsigned auto_increment key,
usrname varchar(20) not null,
password varchar(30) not null
);
insert table_test(usrname,password) values(‘root1’,‘root1’),
(‘king’,‘king’),
(‘queen’,‘queen’);
select *from table_test;
select id,usrname from table_test;
2 使用where限定查询条件:
select 字段1,字段2…from 表名 where 某字段与某value的比较。
字段与value的比较可以是大于,小于,等于,不等于,对于某字段不是null的,可以使用<=>这样的表达式,或者是某字段 is null 或者is not null的表达;
比如
select id,username from user where id>1(id<1,id!=1)
字段的比较也可以是:字段名 between A and B; 字段名 not between A and B;
字段名 in(A,B,C,D,E) 字段名 not in(A,B,C,D,E)
3 使用like进行模糊查询:
使用like关键字进行模糊查询,可以查询字段中包含某些字符或者以某些字符开始的记录,也可以查询字段的长度是特定长度的记录。比如:
select 字段名1,字段名2,字段名…from 表名 where 字段名 like ‘%某值%’;
限定的条件标识某个字段中包含某值;
select 字段名1,字段名2,字段名…from 表名 where 字段名 like ‘__’;
限定的条件标识某个字段的长度是‘’的个数
'‘代表可以是任意字符;
‘%’代表可以有字符也可以没有某个字符,但是要包含两个’%'之间的内容。
使用逻辑运算符对条件进行限定的查询:
逻辑运算符主要是and 和or。and 代表与的关系,or代表或的关系
select * from 表名 where 字段1=value1 and 字段2=value2;
如果条件不止两个,可以使用多个and,比如:
select *from 表名 where 字段1=value1 and 字段2=value2 and 字段3=value3;
使用or代表或的关系:
select *from 表名 where 字段1=value1 or 字段2=value2;
使用group by对表中的记录进行分组:
select from 表名 group by 字段名1:将表中的记录按照字段名1进行分组,字段名1值相同的被分到一个组里面;
也可以使用序列值来代替字段名1,比如,如果字段名1在记录中属于第n列的字段,则可以写成:
select from 表名 group by n;
可以对表中的记录进行多次分组,比如:
select from 表名 group by 字段名1,字段名2
将表中的记录按照 字段名1进行分组后,对每个分组中的记录又按照字段名2进行分组;
使用group_contat 显示组内的详情:
select 字段1,字段2 group_contcat(字段3)from 表名 group by 字段4:
对表中的记录按照字段4进行分组,对每个组中的记录,按照字段3前后显示出来;
使用聚合函数和with rollup对查询的记录做一些处理:
select 字段1,字段2
group concat(字段3),
count(),max(字段4),min(字段4),avg(字段4),sum(字段4)
from 表名 group by 字段名
with rollup是对之前查询的记录再进行处理
通过having语句实现二次筛选:
where是第一次筛选的条件,having语句是对group by之后分组的记录,再进行的二次筛选:
select 字段1,字段2,
group_concat(字段名)
count(),
max(字段名),
avg(字段名),
min(字段名),
from 表名 group by 字段名
having count()>2 and max(字段)>value
having 后面的条件代表对分组后的记录进行二次筛选,筛选出分组内记录个数大于2的以及记录中某字段的最大值大于某个value的那组记录
使用order by对结果进行排序
select 字段名1 from 表名 order by 字段名2 ASC/DESC 对查询的结果按照字段名2的升序/降序排列;
select 字段名1 from 表名 order by 字段名2 ASC ,字段名3 DESC:对查询 的结果按照字段名2的升序排列,在字段名2相同的情况下,再按照字段名3降序排列;
也可以使用order by rand()来实现随机提取;
使用limit限制查询显示的条数
select 字段名 from 表名 limit n:限制查询显示n条数
select 字段名 from 表名 limit 偏移量,n:显示从偏移量开始的n条记录
使用limit限制更新/删除的条数:
update 表名 set 字段名=value limit n:更新前n条记录;
delete from 表名 limit n :删除前n条记录;
连接查询
同时查询2 个或者2个以上的表然后联合显示;
内连接查询:
显示2个表中符合条件的记录
select 表1.字段1,表1.字段2,… 表2.字段1,表2.字段2
from 表1 as m
inner join/join 表2 as n
on 表1.字段1=表2.字段2
where 条件
group by
having …
order by
外连接查询:
显示3 张表的查询结果:
select 表1.字段,表2.字段,表3.字段
from 表1
join 表2
on 表1.字段=表2.字段
join 表3
on 表2.字段=表3.字段
外连接查询
相对比于内连接,外连接只是把关键字join 改成了left join 或right join。也就是左连接和右连接。左连接是先查询左表的全部记录,然后再找出符合条件的左表中的记录(join前面的是左表,后面的是右表)。右连接反之亦然。内连接要求两个表中的记录都符合条件,外连接则不需要。
外键操作:
外键是为了保证数据一致性而引入的。
创建表的时候,设置主键:
create table if not exists 表名(,
字段名,字段类型
字段名,字段类型
…
constraint 外键名称 foreign key(字段名) references 另外一张表(字段)
)ENGINE=INNODB
其中创建的表为子表,另外一张表为主表,要先创建主表。
外键的引入在删除表中记录和往表中插入记录时保持了两张表的一致性,避免插入不符合范围的记录。
添加删除外键
alter table 表名 drop foreign key 外键名称 //删除外键
alter table 表名 add constraint 外键名称 foreign key(字段名) references 主表(字段名)
联合查询
查询多个表的记录,并且合并到一起
union:去掉相同的记录
union all:简单的合并
select 字段1 from 表1 union/union all 字段2 from 表2
一般情况下字段1和字段2是相同的字段,这样子合并才有意义;
子查询
将一个查询语句嵌套在另一个查询语句中:一条语句的查询结果作为另外一个查询语句的条件:
select 字段1,字段2 from 表1 where 字段3 IN(select 字段4 from 表2)
从表2中查询的结果作为表1查询的条件的一部分,也可以使用NOT IN关键字来进行反查询,一般用于查询不符合条件的记录;
select 字段 from 表1 where 字段2 +比较运算符(select 字段3 from 表2 where 条件)
子查询语句要放在括号中 并且是先执行的。可以使用exist来判断子查询有结果,如果子查询没有结果,则括弧 内不执行,外面的查询也不会执行,相当于一种判断:
select 字段 from 表1 where exists(select *from 表2 where 条件 )
如果括号内的返回为假,想要外面的查询也执行的话,则可以使用not exists;
Any,some和all关键字
select 字段 from表1 where 字段逻辑运算符some/any(select 字段 from 表2)比如:
>=Some/any ()大于表2中的最大值
<= any/some() 小于表2中的最大值
<=all() 代表小于表2中的最小值
=ANY( ) 相当于in的效果
!=Any()相当于not in 的效果
将查询结果写入表中:
insert 表名(字段1,字段2) select 字段1,字段2 from 表名
正则表达式查询
查询语句“
select * from 表名 where 字段名 regexp 正则表达式
正则表达式,正则表达式有点像糊查询,但是比模糊查询能查到更多,可以是以某个字符开始,以某个字符结束,包含几个字符,包含哪几个字符,不包含哪几个字符, 字符集合,某个字符出现几次等等。
mySql-运算符基本操作:
算术运算符:±*/ DIV mode % 除数为0的时候,结果为NULL;比较运算符:=, >, < ,!=, <=>,is null,is not null, betweem and,not between,in,not in
逻辑运算符: && AND || OR XOR
可以使用select 字段,字段+运算符 value的形式来查看操作结果;
mySql-运算符基本操作:
数学函数:
ceil()向上取整
floor()向下取整
truncate()截取
mod()取余
power(m,n)m的n次方
rand()得到0-1的一个随机数
sign(x):获得X的符号,是整数,负数还是0
exp(x):e的x次方
字符串函数
char_length():获取字符串长度
length():获取字符串的长度
concat(字符串1,字符串2.。。):
concat_ws(连接符,字符串1,字符串2…)
upper/ucase():字符串转大写
lower/LCASE():字符串转小写
LEFT/RIGHT():返回字符串的前n个字符/后n个字符
LPAD/RPAD():左填充和右填充
LTRIM/RTRIM/TRIM():去掉字符串中的空格
REPEAT():重复字符串
SPACE():返回空格
REPLACE():替换字符串,区分大小写
STRCMP:比较字符串
REVERSE:反转字符串
ELT:返回指定位置的字符串
日期时间函数:
条件判断函数