( 倘若在终端
win+r
输入mysql -uroot -p
进入SQL )
MySQL的下载与安装:
按照安装流程步骤安装即可
配置环境变量,方便命令行操作:
步骤:右键“我的电脑”,选择“属性”,选择“高级”窗口中的“环境变量”,设置“系统变量”中的path属性;追加mysql
的安装目录;(演示)
在操作MySQL数据库之前要确保MySQL服务是开启状态,服务的开启和关闭可以通过命令行的形式或者在服务中
操作
打开命令行窗口:
开始à运行à输入cmd
或者快捷键 win+R
命令行的形式启动服务:
net start mysql服务名
net stop mysql服务名
或者在命令窗口输入:
services.msc打开服务窗口,选中mysql服务,右键进行启动
登录mysql服务器
命令:mysql -u登录名 -p密码 数据库
示例:常用命令的使用:
Ø 显示所有数据库:
show databases;
Ø 切换当前数据库为mysql :
use mysql;
Ø 显示当前库中的所有表:
show databases;
创建数据库
create DATABASE if not EXISTS summer;
CREATE DATABASE if not EXISTS vvvvv;
查看数据库
SHOW DATABASES;
删除数据库
drop DATABASE vvvvv;
创建表
create table from 表名(
列名 列类型,(该“,”为英文下的)
列名 列类型
。。。。
)
打开指定的库
use 数据库名
查看当前数据库的所有表
show tables
查看其他库的所有表
show tables from 数据库名
查看表结构
desc 表名
查看服务器版本
方法一:登录到MySQL服务端
select version();
方法二:没有登录到MySQL服务端
mysql --version或者mysql --v
mysql的语法规范
1.不区分大小写,建议关键字大写,表名和列名小写
2.每条消息最好用分号结尾
3.每条命令根据需要,可以进行缩进或者换行
4.注释
单行注释:#注释文字或者 -- 注释文字
多行注释:/注释文字/
主键(关键字为:primary key)
create table from 表名(
字段名 字段类型 primary key,(该“,”为英文下的)
字段名 字段类型,
。。。。
)
修改主键
alter table<数据表名> add primary key(<字段名>)
删除主键约束
alter table 数据表名 drop primary key;
主键自增(关键字为:auto_increment)
create table from 表名(
字段名 字段类型 primary key auto_increment,(该“,”为英文下的)
字段名 字段类型,
。。。。
)
添加外键约束,外键(foreign key)
alter table 数据表名 add constraint 外键名
foreign key (列名) refences 主表名 (列名)
删除外键
alter table 表名 drop foreign key 外键约束名
唯一约束(关键字为:unique)
create table from 表名(
字段名 字段类型 primary key auto_increment,(该“,”为英文下的)
字段名 字段类型 unique,
。。。。
)
默认值(default)
alter table 数据表名
change column 字段名 数据类型 default;
删除默认值
alter table 数据表名
change column 字段名 字段名 数据类型 default null;
查看约束
show create table 数据表名;
基础查询
查询可以查询常量值,表达式,函数
查询单个字段
select 字段名 from 表名;
查询多个
select 字段名,字段名 ...from 表名;(字段与字段之间用逗号分隔)
查询所有
select * from 表名;
起别名(可以用as或者使用空格)
select 字段名 as 别名 from 表名;
去重(关键字为 distinct )
select distinct 字段名 from 表名;
+的作用(java作用:运算符,连接符 mysql:运算符)
concat连接
select concat(字段名+字段名) as 姓名 from 表名;
条件查询
select 查询列表 from 表名 where 筛选条件;
简单条件运算符
< > = ! = <> >= <=
逻辑表达式运算符
&& || !
and or not
模糊查询
like
between and 提高简洁度,包括临界值,两个临界值不要颠倒顺序
in 使用in提高语句简洁度,列表值的类型必须一致或者兼容
is null 可以判断null值
#模糊查询 like
#1.通配符 % 表中%在后
SELECT *from student where Stuname like '小%';
% %两个%中间关键字,只要存在这个关键字,都查出来
SELECT *FROM student where Stuname like '%丽%';
#% 关键字 在前 以这个关键字结尾 # 2._ 下划线 通配符
#关键字 _匹配一位
SELECT *FROM student where Stuname like'小_';
3.BETWEEN 运算符
-- BETWEEN 条件 and 条件 :介于条件与条件之间的范围
SELECT *FROM student where Studate BETWEEN '2021-04-30'and '2021-05-12';
in 跟or的区别(查询效率的区别)
-- 数据量大的时候,用等值查询效率高, 数据量小的时候用in
-- in 包含
SELECT *FROM student where Stuid in(6,8);
-- or 逻辑或 或者
SELECT * FROM student where StuSex='女' or classid=2;
#聚合函数
-- 计算和sum 2.最大值 max 最小值 min 3. avg 平均数 4,。count 统计行数(条数)
-- sum(expr)
SELECT SUM(Stuid)累计和
from student;
#max() min()
SELECT MAX(Stuid)最大值 FROM student;
SELECT Min(Stuid)最小值 FROM student;
#AVG([DISTINCT] expr)平均数
SELECT AVG(Stuid )平均数 FROM student;
#COUNT(DISTINCT expr,[expr...]) 统计
SELECT COUNT(*)行数 FROM student;
插入数据一条(into可以省略)
insert 表名(字段名,字段名...)values(值,值1,...)
#学生信息表添加数据
#一次添加一条数据
INSERT into student(stuid,stuname,stusex,studate,classid)
values(1003,"小明","女","2020-05-08",202004)
#省略into
INSERT student(stuid,stuname,stusex,studate,classid)
values(1004,"小张","女","2020-05-08",202006)
#省略列名
INSERT student VALUES(1006,"小花","女","2020-05-08",202007)
#一次添加多条数据
INSERT student VALUES
(1007,"小李","女","2020-05-08",202008),
(1008,"小苏","女","2020-05-08",202009),
(1009,"小周","女","2020-05-08",202010)
#有约束的列添加信息
#添加calss班级表信息
INSERT class VALUES(4,"网络六班","2021-05-08 13:56:17",NULL,remark,3)
修改一条
update 表名 set 字段1=值1 where 条件
#修改数据
#修改单条数据
#根据学生编号主键修改学生信息
update student set Stuname="小宁",Stusex="男" WHERE Stuid=1003;
#修改多条数据
update student set classid=1,
Stusex="男"where Stuid in(1006,1007,1008)
#UPDATE student set classid=1,Stusex="男",WHERE Stuid in(1006,1007,1008)
#级联问题(主外键)
-- 有主外级关系,并且有外键约束是不可以更改
UPDATE student set classid=2022,Stusex="女"where Stuid in(1003,1006)
#:主外建级关系修改
ALTER TABLE student DROP FOREIGN key fk_classid;
-- 更改班级表中的班级编号和班级名称
UPDATE calss set classid=110,classname='程程'WHERE classid=1;
#3更改学生信息表中的classid=1
UPDATE student set classid=1 where classid=1;
#4重新添加外键约束
ALTER TABLE student
add CONSTRAINT fk_classid FOREIGN key(classid) REFERENCES calss(classid);
删除 一条
delete from 表名 where 条件
#删除表数据
#删除一行或者一条学生信息
#根据主键删除信息
delete FROM student WHERE stuid=1004;
#删除多行 包含in
delete FROM studentinfo WHERE stuid in(1003,1007);
#删除用truncate效率高
truncate table studentinfo;
分组
select 字段1,字段2 from 表名 group by 字段1;
#分组查询
#1.单列查询
#group by 分组
SELECT Stusex 性别, count(Stusex) 人数 from student GROUP BY Stusex;
#2.多列分组
SELECT classid 班级编号 ,Stusex 性别, count(Stusex) 人数 from student GROUP BY classid,Stusex;
分组查询后规定条件: HAVING 筛选分组查询结果里面的条件
SELECT classid 班级编号 ,Stusex 性别, count(Stusex) 人数 from student GROUP BY classid,Stusex HAVING Stusex='女';
多表链接
1.内连接查询(等值查询):两个表或者两个表以上
-- 指令:inner join
-- 语法:SELECT 列 from 表一 [inner] join 表二 on <表达式>
#学生信息表 和班级表 内连接查询
-- 等值的部分取出来 ,不同的就舍掉了 表起一个别名
SELECT s.Stuid '学生编号', s.Stuname '学生名称',s.Stusex '性别', s.Studate '入学时间', s.classid '班级编号(s表:外键)',
c.classid '班级编号(c表:主键)',c.classname '班级名称', c.begintime '入学时间',c.endtime '结束时间',c.remark '备注',c.gradeid
FROM student s INNER JOIN calss c on s.classid=c.classid;
2. INNER JOIN 也可以不写
SELECT s.Stuid '学生编号',s.Stuname '学生姓名', s.Stusex '学生性别', c.classid '班级编号(c表:主键)', c.classname '班级名称',
c.gradeid FROM student s,calss c where s.classid=c.classid;
SELECT s.Stuid '学生编号', s.Stuname '学生名称',s.Stusex '性别', s.Studate '入学时间', s.classid '班级编号(s表:外键)',
c.classid '班级编号(c表:主键)',c.classname '班级名称', c.begintime '入学时间',c.endtime '结束时间',c.remark '备注',c.gradeid
FROM student s , calss c where s.classid=c.classid;
#自连接:等值匹配1,自己表中列匹配。只存在一张表中
-- 表自己连接自己
SELECT s1.classid 学生编号,s1.Stuname 学生姓名,s2.zid 组别 FROM student s1 JOIN student s2 on s1.zid=s2.Stuid;
#自连接和内连接都用inner join inner 可以不写
SELECT s1.classid 学生编号,s1.Stuname 学生姓名,s2.zid 组别 FROM student s1 ,student s2 where s1.zid=s2.Stuid;
#3.外连接:左外连接和右外连接(两个表及以上)
-- 左外连接:left join指定:不仅可以匹配到等值数据还可以匹配到左其他没有匹配到的数据
SELECT s.Stuid '学生编号',
s.Stuname '学生名称',
s.classid '班级编号(s表:外键)',
c.classid '班级编号(c表:主键)',
c.gradeid '班级名称(c表:外键)'
FROM student s LEFT JOIN calss c on s.classid=c.classid;