0
点赞
收藏
分享

微信扫一扫

MySQL基础入门篇

mjjackey 2022-04-13 阅读 54

MySQL基础和SQL入门【刘云飞】

1.数据库

1.1使用数据库的原因

存储方式优点缺点
内存速度快不能够永久保存,数据是临时状态的
文件数据是可以永久保存的使用IO流操作文件, 不方便
数据库1.数据可以永久保存
2.方便存储和管理数据
3.使用统一的方式操作数据库(SQL)
占用资源,有些数据库需要付费(比如Oracle数据库)

1.2 常见的数据库软件排行榜

在这里插入图片描述

数据库名介绍
MySql数据库开源免费的数据库
因为免费开源、运作简单的特点,常作为中小型的项目的数据库首选。
MySQL1996年开始运作,目前已经被Oracle公司收购了. MySQL6.x开始收费
当前我们学习的是MYSQL5.7版本,所以还是免费的
Oracle数据库收费的大型数据库,Oracle公司的核心产品。安全性高
DB2IBM公司的数据库产品,收费的超大型数据库。常在银行系统中使用
SQL ServerMicroSoft 微软公司收费的中型的数据库。C#、.net等语言常使用。 但该数据库只能运行在windows机器上,扩展性、稳定性、安全性、性能都表现平平。

2.安装数据库

卸载MYSQL数据库后还会有一些残留文件在如下目录中:datadir=C:/ProgramData/MySQL/MySQL Server 5.7/Data

3.配置环境变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时我们的 MySQL 就已经安装成功,并且环境变量已经配置成功,接下来就可以进行学习MySQL了

4.MYSQL的启动与关闭

4.1图形化界面

在这里插入图片描述

4.2命令行形式

在这里插入图片描述
在这里插入图片描述

5.登录数据库

5.1命令行

MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录。

命令说明
mysql -u 用户名 -p 密码使用指定用户名和密码登录当前计算机中的MySQL数据库
mysql -h 主机IP -u 用户名 -p 密码 -P 端口-h 指定IP 方式,进行 登录
# 本地登录
mysql -uroot -p123456
# 远程登录
mysql -h127.0.0.1 -uroot -p123456
# 退出数据库
exit 或者 quit

5.2 SqlYog(图形化界面的MYSQL管理工具)

SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用 SQLyog 可以快速直观地让您从世界的任何角落通过网络来维护远端的 MySQL 数据库
在这里插入图片描述

默认安装路径:C:\Program Files\Webyog SQLyog Ultimate

6.MYSQL的目录结构

6.1MySQL安装目录

  • MySql的默认安装目录在 C:\Program Files\MySQL\MySQL Server 5.7

  • 目录目录内容
    bin放置一些可执行文件
    docs文档
    include包含(头)文件
    lib依赖库
    share用于存放字符集、语言等信息。

在这里插入图片描述

6.2 MYSQL数据文件位置

在这里插入图片描述

目录文件文件内容
Data数据库和数据表的信息
Uploads
installer_config.xml
my.iniMYSQL的配置文件

数据库其实是文件系统,可以看做目录;数据表就可以看做文件。

7.数据库管理系统

7.1 什么是数据库管理系统 ?

  • MYSQL服务器其实就是一台安装了MYSQL软件的电脑
  • 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理维护数据库的大型软件。

7.2 数据库管理系统的作用

  • 用于建立、使用和维护数据库,对数据库进行统一的管理。

7.3 数据库管理系统、数据库 和表之间的关系

  • MySQL中管理着很多数据库,在实际开发环境中 一个数据库一般对应了一个的应用,数据库当中保存着多张表,每一张表对应着不同的业务,表中保存着对应业务的数据。

7.4 数据库表

  • 数据库中以表为组织单位存储数据

  • 表类似我们Java中的类,每个字段都有对应的数据类型

  • -----> 表
    类中属性----> 表中字段
    对象 ---> 数据记录
    

8.SQL

8.1 SQL相关概念

  • 什么是SQL ?
  • 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
  • SQL 的作用
  • 是所有关系型数据库的统一查询规范,不同的关系型数据库都支持SQL
  • 所有的关系型数据库都可以使用SQL
  • 不同数据库之间的SQL 有一些区别 方言

8.2 SQL通用语法

  • SQL语句可以单行 或者 多行书写,以分号 结尾 ; (Sqlyog中可以不用写分号)
  • 可以使用空格和缩进来增加语句的可读性。
  • MySql中使用SQL不区分大小写,一般关键字大写,数据库名,表名,列名 小写。
  • 注释方式
注释语法说明
– 空格单行注释
/* */多行注释
#MySql特有的单行注释

8.3 SQL的分类

分类说明
数据定义语言简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。
数据操作语言简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。
数据查询语言简称DQL(Data Query Language),用来查询数据库中表的记录。
数据控制语言简称DCL(Date Control Language),用来定义数据库的访问权限和安全级别,及创建用户。(了解)

8.4 DDL操作数据库

8.4.1 CRUD
  • C:Create,创建
  • R:Retrieve ,查询
  • U:Update,修改
  • D:Delete,删除
8.4.2 创建数据库
命令说明
create database 数据库名;创建指定名称的数据库。
create database 数据库名 character set字符集;创建指定名称的数据库,并且指定字符集
(一般都指定utf-8)
/*创建数据库
默认编码:latin1 编码
常用编码:utf-8 编码
指定数据库名称,指定数据库的字符集 一般都指定为 utf8,与Java中的编码保持一致*/
CREATE DATABASE java1;
CREATE DATABASE java2 CHARACTER SET utf8;
SHOW DATABASES;
MYSQL数据库默认就有的四个数据库
数据库功能
information_schema信息数据库,保存的是其他数据库的信息
比如说数据库表的名称,表的字段的名称等
mysqlMYSQL核心数据库,保存的是用户和权限的信息
performance_schema保存性能相关的数据,监控MYSQL的性能
sys记录了DBA所需要的一些信息,更方便的让DBA快速地了解数据库的运行情况
8.4.3 查看/选择数据库
命令说明
use 数据库切换数据库
select database();查看当前正在使用的数据库
show databases;查看Mysql中 都有哪些数据库
show create database 数据库名;查看一个数据库的定义信息
/*查看数据库
切换数据库*/
USE db2;
/*查询当前正在使用的数据库*/
mysql> select database();
+------------+
| database() |
+------------+
| db2        |
+------------+
/*查询MYSQL中有哪些数据库*/
SHOW DATABASES;
-- 查看一个数据库的定义信息
mysql> show create database db2;
+----------+--------------------------------------------------------------+
| Database | Create Database                                              |
+----------+--------------------------------------------------------------+
| db2      | CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
8.4.4 修改数据库
命令说明
alter database 数据库名 character set 字符集;数据库的字符集修改操作
/*修改数据库的字符集*/
ALTER DATABASE java1 CHARACTER SET utf8;
/*查询当前数据库的信息*/
SHOW CREATE DATABASE java1;

在这里插入图片描述

8.4.5 删除数据库的操作
命令说明
drop database 数据库名从MySql中永久的删除某个数据库
-- 删除数据库(永久删除)
DROP DATABASE java2;
SHOW DATABASES;

8.5 DDL 操作数据表

8.5.1 MYSQL 常见的数据类型
类型描述
int整型
double浮点型
char字符串型(不可变长)
varchar字符串型(可变长)
date日期类型,yyyy-MM-dd ,只有年月日,没有时分秒
datetime日期类型,yyyy-MM-dd HH:mm:ss,有年月日时分秒

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SnsZsuZ4-1649570420265)(01任务一MySQL基础和SQL入门.assets/image-20211127204352218.png)]

注意:MySQL中的 char类型与 varchar类型,都对应了 Java中的字符串类型,区别在于:

  • char类型是固定长度的: 根据定义的字符串长度分配足够的空间。
  • varchar类型是可变长度的: 只使用字符串长度所需的空间

比如:保存字符串 “abc”

x char(10) 占用10个字节
y varchar(10) 占用3个字节

适用场景:

  • char类型适合存储 固定长度的字符串,比如 密码 ,性别一类
  • varchar类型适合存储 在一定范围内,有长度变化的字符串
8.5.2 创建表
CREATE TABLE 表名( 
    字段名称1 字段类型(长度), 
    字段名称2 字段类型 注意 最后一列不要加逗号
);

例:

-- 创建商品分类表
-- 选择使用的数据库
USE java1;
CREATE TABLE category(
	cid INT,
	cname VARCHAR(20)
);
-- 创建测试表
CREATE TABLE test1(
	tid INT,
	tdate DATE
);
-- 快速创建一个表结构相同的表(复制表结构)
-- 语法结构: create table new_table like old_table
-- 创建一个与test1表结构相同的test2表
CREATE TABLE test2 LIKE test1;
-- 查看表结构
DESC test2;
8.5.3 查看表
命令说明
show tables;查看当前数据库中的所有表名
desc 表名;查看数据表的结构
-- 查看表
-- 查看当前数据库中所有的表
SHOW TABLES;

-- 查看创建表的 sql
SHOW CREATE TABLE category;

-- 查看表结构
DESC category;
8.5.4 删除表
命令说明
drop table 表名;删除表(从数据库中永久删除某一张表)
如果数据表已经被删除了,再次删除会报错
drop table if exists 表名;判断表是否存在, 存在的话就删除,不存在就不执行删除
这种删除更加稳妥,即使不存在也不会报错
/*
表的删除:
语法格式:
	drop table table_name;   从数据库中永久地删除一张表
	drop table if exists table_name;   先判断表是否存在,如果存在就删除,否则就不执行删除
*/
-- 删除表
DROP TABLE test1;
-- 如果一张表已经被删除了,再次执行删除,就会报错,可以使用第二种删除方法,会有警告,不会报错
DROP TABLE IF EXISTS test1;
8.5.5 修改表(修改表结构用alter,修改表的数据用update)
alter对表结构的几种操作(AMCD)功能
add添加字段
alter table table_name add 字段名称 字段类型(长度)
modify更改字段相关信息
alter table 表名 modify 字段名称 字段类型
change更改字段的名称
alter table table_name change 旧列名 新列名 类型(长度)
drop删除字段
alter table table_name 表名 drop 列名
/*
修改表
	修改表的名称
	修改表的字符集
	修改表的某一列(数据类型 名称 长度)
	向表中添加一列
	删除表中的某一列
*/
-- 修改表的名称 语法格式:rename table old_table to new_table
RENAME TABLE category TO category1;

-- 修改表的字符集为gbk 语法格式:alter table table_name character set 字符集
ALTER TABLE category1 CHARACTER SET gbk;

-- 向表中添加一个字段 关键字 add
-- 语法格式: alter table table_name add 字段名称 字段类型(长度)
-- 添加分类描述字段
ALTER TABLE category1 ADD cdesc VARCHAR(20);
DESC category1;

-- 修改表中列的数据类型 或者 长度,关键字:modify
-- 语法格式:alter table 表名 modify 字段名称 字段类型
-- 修改cdesc字段的长度为 50
ALTER TABLE category1 MODIFY cdesc VARCHAR(50); -- 修改字段长度
ALTER TABLE category1 MODIFY cdesc CHAR(20); -- 修改字段的数据类型
DESC category1;

-- 修改列的名称 关键字:change
-- 语法格式:alter table table_name change 旧列名 新列名 类型(长度)
-- 修改cdesc字段 名称改为 description varchar(30)
ALTER TABLE category1 CHANGE cdesc description VARCHAR(30);

-- 删除列 关键字:drop
-- 语法格式:alter table table_name 表名 drop 列名
ALTER TABLE category1 DROP description;
DESC category1;

8.6 DML操作表中数据

SQL中的DML 用于对表中的数据进行增删改操作

DML(Data manipulation language)数据操作语言作用
insert into value() / values()可以插入一条或多条数据
update set更改某一条或多条数据
delete from根据条件删除指定数据
8.6.1 插入数据
/*
DML 对表中的数据进行 增删改查
增加
	语法格式:insert into table_name (字段1,字段2,...) values(字段值1,字段值2,...);

*/
-- 创建学生表
CREATE TABLE student( 
	sid INT, 
	sname VARCHAR(20), 
	age INT, 
	sex CHAR(1), 
	address VARCHAR(40));
-- 向学生表中插入数据
-- 方式1:插入全部字段 将所有的字段名都写出来
INSERT INTO student (sid,sname,age,sex,address)
VALUES(1,"孙悟空",18,"男","花果山");

-- 方式2:插入全部字段 不写字段名
INSERT INTO student VALUES(2,"孙悟饭",5,"男","地球");

-- 方式3:插入指定字段
INSERT INTO student(sid,sname) VALUES(3,"蜘蛛精");

-- 注意事项:
-- 1.值与字段必须对应 前面指定几个字段,后面就对应添加对应的字段值,长度和数据类型必须都要对应上
INSERT INTO student(sid,sname,age,sex,address) VALUES(4,"孙悟空",18,"男","花果山");
-- 2.在插入varchar,char,date类型的时候,必须要使用单引号或者双引号包裹(尽量多使用单引号)
-- 3.如果插入空值,可以忽略不写 或者写 null
INSERT INTO student(sid,sname) VALUES(5,'唐僧');
INSERT INTO student(sid,sname,age,sex,address) VALUES(5,'八戒',NULL,NULL,NULL);
8.6.2 修改数据
/*
修改表
语法格式:update 表名 set 列名 = 值;
	  update 表名 set 列名 = 值 {where 条件表达式:字段名 = 值};
*/
-- 修改表中所有人性别为女
UPDATE student SET sex = '女'; -- 慎用,一定要带条件
-- 带条件的修改,将 sid 为 1 的数据,性别改为男
UPDATE student SET sex = '男' WHERE sid = 1;
-- 一次性修改多个列
-- 修改 sid 为 5 的这条数据,年龄改为 20,地址改为 大唐
UPDATE student SET age = 20, address = '大唐' WHERE sid = 5;
8.6.3 删除数据
/*
删除操作
语法格式:delete from 表名;
	  delete from 表名 {where 条件};
*/
-- 删除 sid 为 5 的数据
DELETE FROM student WHERE sid = 5;
-- 删除所有数据
-- 方式1:不推荐,对表中的数据进行逐条删除,效率低
DELETE FROM student;
-- 方式2:truncate table 表:推荐,删除整张表,然后在创建一个一模一样的新表
TRUNCATE student;

8.7 DQL数据库查询

DQL的一些特殊语法功能
as为查询的字段或者表起别名
distinct放在查询的字段之前,去重
+,-,*,/,%可以为查询整型字段 显示想要的数据内容
注意:查询操作 不会对数据表中的数据进行修改,只是一种展示的方式
8.7.1准备数据
#创建员工表
CREATE TABLE emp( 
    eid INT, 
    ename VARCHAR(20), 
    sex CHAR(1), 
    salary DOUBLE, 
    hire_date DATE, 
    dept_name VARCHAR(20)
);
#添加数据
INSERT INTO emp VALUES(1,'孙悟空','男',7200,'2013-02-04','教学部');
INSERT INTO emp VALUES(2,'猪八戒','男',3600,'2010-12-02','教学部');
INSERT INTO emp VALUES(3,'唐僧','男',9000,'2008-08-08','教学部');
INSERT INTO emp VALUES(4,'白骨精','女',5000,'2015-10-07','市场部');
INSERT INTO emp VALUES(5,'蜘蛛精','女',5000,'2011-03-14','市场部');
INSERT INTO emp VALUES(6,'玉兔精','女',200,'2000-03-14','市场部');
INSERT INTO emp VALUES(7,'林黛玉','女',10000,'2019-10-07','财务部');
INSERT INTO emp VALUES(8,'黄蓉','女',3500,'2011-09-14','财务部');
INSERT INTO emp VALUES(9,'吴承恩','男',20000,'2000-03-14',NULL);
INSERT INTO emp VALUES(10,'孙悟饭','男', 10,'2020-03-14',财务部);
8.7.2 简单查询
/*
DQL 查询操作
	简单查询
		select 列名 from 表名;
*/
-- 查询emp表中的所有数据
SELECT * FROM emp; -- * 表示 所有的列
-- 查询所有的数据 只显示 eid 和 ename
SELECT eid,ename FROM emp;
-- 查询所有数据,然后给列名 改为中文
-- 别名查询 使用关键字 as
SELECT 
	eid AS 编号,
	ename AS 姓名,
	sex AS 性别,
	salary AS 薪资,
	hire_date AS 入职日期,
	dept_name 部门名称  -- as 可以省略
FROM emp;
	
-- 查询一共有几个部门,需要进行去重 关键字:distinct
SELECT DISTINCT dept_name FROM emp;

-- 将员工薪资 + 1000 进行展示
SELECT salary, salary+1000 AS new_salary FROM emp;

-- 注意:查询操作 不会对数据表中的数据进行修改,只是一种展示的方式
8.7.3 条件查询

运算符:

  • 比较运算符:
运算符说明
> < <= >= = <> !=大于、小于、大于(小于)等于、不等于
BETWEEN …AND…显示在某一区间的值例如: 2000-10000之间: Between 2000 and 10000
当使用 >= 与 <= 搭配使用时,可以与 between and 替换使用
IN(集合)集合表示多个值,使用逗号分隔,例如: name in (悟空,八戒)
in中的每个数据都会作为一次条件,只要满足条件就会显示
LIKE ‘%张%’模糊查询
IS NULL / is not null查询某一列为NULL的值, 注: 不能写 = NULL
  • 逻辑运算符
运算符说明
And &&多个条件同时成立
Or ||多个条件任一成立
Not不成立,取反。

需求1:

# 查询员工姓名为黄蓉的员工信息
# 查询薪水价格为5000的员工信息
# 查询薪水价格不是5000的所有员工信息
# 查询薪水价格大于6000元的所有员工信息
# 查询薪水价格在5000到10000之间所有员工信息
# 查询薪水价格是3600或7200或者20000的所有员工信息

代码实现:

/*
条件查询
语法格式:select 列名 from 表名 where 条件表达式;
比较运算符
*/
# 查询员工姓名为黄蓉的员工信息
SELECT * FROM emp WHERE ename = '黄蓉';
# 查询薪水价格为5000的员工信息
SELECT * FROM emp WHERE salary = 5000;
# 查询薪水价格不是5000的所有员工信息
-- 方法1:
SELECT * FROM emp WHERE salary != 5000;
-- 方法2:
SELECT * FROM emp WHERE salary <> 5000;
# 查询薪水价格大于6000元的所有员工信息
SELECT * FROM emp WHERE salary > 6000;
# 查询薪水价格在5000到10000之间所有员工信息
-- 方法1:
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;
-- 方法2:
SELECT * FROM emp WHERE salary >= 5000 && salary <= 10000;
# 查询薪水价格是3600或7200或者20000的所有员工信息
-- 方法1:
SELECT * FROM emp WHERE salary IN (3600,7200,20000);
-- 方法2:
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;

like模糊查询(通配符的使用):

通配符说明
%表示匹配任意多个字符串,
_(下划线)表示匹配 一个字符

需求2:

# 查询含有'精'字的所有员工信息
# 查询以'孙'开头的所有员工信息
# 查询第二个字为'兔'的所有员工信息
# 查询没有部门的员工信息
# 查询有部门的员工信息

代码实现:

-- 条件查询是先取出表中的每条数据,满足条件就返回,不满足的就过滤

# 查询含有'精'字的所有员工信息
SELECT * FROM emp WHERE ename LIKE '%精%';
# 查询以'孙'开头的所有员工信息
SELECT * FROM emp WHERE ename LIKE '孙%';
# 查询第二个字为'兔'的所有员工信息
SELECT * FROM emp WHERE ename LIKE '_兔%';
# 查询没有部门的员工信息
-- 在MYSQL中,对于null的判断,不能直接使用 = 来进行判断,而是使用 is null
SELECT * FROM emp WHERE dept_name IS NULL;
# 查询有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NOT NULL;

9. DCL(数据控制语言)

MySql默认使用的都是 root 用户,超级管理员,拥有全部的权限。除了root用户以外,我们还可以通过DCL语言来定义一些权限较小的用户, 分配不同的权限来管理和维护数据库。

命令功能
create user ‘用户名’@‘登录地址’ identified by ‘密码’;创建用户
grant 权限 on 数据库名.表名 to ‘用户名’@‘登录地址’;授予用户权限
show grants for ‘用户名’@‘登录地址’;查询用户的权限
drop user ‘用户名’@‘登录地址’;删除用户

9.1 创建用户

语法格式

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; 
参数说明
用户名创建的新用户,登录名称
主机名指定该用户在哪个主机上可以登陆,本地用户可用 localhost
如果想让该用户可以 从任意远程主机登陆,可以使用通配符 %
密码登录密码

创建 admin1 用户,只能在 localhost 这个服务器登录 mysql 服务器,密码为 123456

CREATE USER 'admin1'@'localhost' IDENTIFIED BY '123456';

创建的用户在名字为 mysql的 数据库中的 user表中

创建 admin2 用户可以在任何电脑上登录 mysql 服务器,密码为 123456

CREATE USER 'admin2'@'%' IDENTIFIED BY '123456';

% 表示 用户可以在任意电脑登录 mysql服务器.

9.2 用户授权

语法格式

GRANT 权限 1, 权限 2... ON 数据库名.表名 TO '用户名'@'主机名'; 
参数说明
权限授予用户的权限,如 CREATE、ALTER、SELECT、INSERT、UPDATE 等。
如果要授 予所有的权限则使用 ALL
ON用来指定权限针对哪些库和表。
TO表示将权限赋予某个用户。

给 admin1 用户分配对 db4 数据库中 products 表的 操作权限:查询

GRANT SELECT ON db4.products TO 'admin1'@'localhost';

给 admin2 用户分配所有权限,对所有数据库的所有表

GRANT ALL ON *.* TO 'admin2'@'%'; 

使用admin1用户登录数据库 测试权限

-- 首先创立新链接,使用admin1用户和密码进行登录,然后发现只能看到db4数据库,只有一张表products

-- 只拥有查询权限
SELECT * FROM products;
-- 用户 admin1 只有查询权限,如果进行插入数据的操作时,会发生报错
INSERT INTO products VALUES('poo1','小鸟伏特加',3000,1,NULL);

使用admin2用户登录数据库 测试权限

-- 然后使用新连接,使用 admin2 用户和密码进行登录数据库后,可以看到所有的数据库和数据表

9.3 查看权限

语法格式

SHOW GRANTS FOR '用户名'@'主机名'; 

查看root用户权限

-- 查看root用户权限
SHOW GRANTS FOR 'root'@'localhost';
-- 查看 admin1 用户的权限
SHOW GRANTS FOR 'admin1'@'localhost';

9.4 删除用户

语法格式

DROP USER '用户名'@'主机名'; 

删除 admin1 用户

-- 删除 admin1 用户
DROP USER 'admin1'@'localhost';

9.5 查询用户

选择名为 mysql的数据库, 直接查询 user表即可

--  查询用户
SELECT * FROM mysql.user;

9.6 修改用户密码

  • 超级用户登录,使用 set
mysql> set password for yun=password('111111');
Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 超级用户登录,使用update直接修改user表
mysql> update mysql.user set authentication_string=password('222222') where user = 'yun' and host = '%';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
举报

相关推荐

0 条评论