MySQL

71 阅读4分钟

(  倘若在终端

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;