MySQL基础和SQL入门

来自拉钩教育-JAVA就业集训营

1.MySQL
2. SQL

----------------------------------------------------------

1.MySQL

1.1 MySQL的启动与关闭

  1. 启动MySQL
    net start mysql57

  2. 关闭MySQL
    net stop mysl57

image.png

1.2 命令行登录数据库

  1. MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录。
命令 说明
mysql -u 用户名 -p 密码 使用指定用户名和密码登录当前计算机中的MySQL数据库
mysql -h 主机IP -u 用户名 -p 密码 指定IP 方式,进行 登录

命令演示:
mysql -uroot -p123456
mysql -h127.0.0.1 -uroot -p123456

退出命令
exit 或者 quit

1.3 MySQL的目录结构

  1. MySQL安装目录
    MySql的默认安装目录在 C:\Program Files\MySQL\MySQL Server 5.7
目录 目录内容
bin 放置一些可执行文件
docs 文档
include 包含(头)文件
lib 依赖库
share 用于存放字符集、语言等信息。
  1. MySQL配置文件 与 数据库及 数据表所在目录


    image.png
  • my.ini 文件 是 mysql 的配置文件,一般不建议去修改

  • data<目录> Mysql管理的数据库文件所在的目录


    image.png
  • 几个概念
    数据库: 文件夹
    表: 文件
    数据: 文件中的记录

1.4 数据库管理系统

  1. 什么是数据库管理系统 ?
    数据库管理系统(DataBase Management System DBMS):指一种操作和管理维护数据库的大型软件。
    MySQL就是一个 数据库管理系统软件, 安装了Mysql的电脑,我们叫它数据库服务器.

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

  3. 数据库管理系统、数据库 和表之间的关系
    MySQL中管理着很多数据库,在实际开发环境中 一个数据库一般对应了一个的应用,数据库当中保存着多张表,每一张表对应着不同的业务,表中保存着对应业务的数据。


    image.png

2. SQL(重点)

2.1 SQL的概念

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

2.2 SQL的通用语法

  1. SQL语句可以单行 或者 多行书写,以分号 结尾 ; (图形化界面中可以不用写分号)
  2. 可以使用空格和缩进来增加语句的可读性。
  3. MySql中使用SQL不区分大小写,一般关键字大写,数据库名 表名列名 小写。
  4. 注释方式
注释语法 说明
-- 空格 单行注释
/* */ 多行注释
# MySql特有的单行注释
# show databases; 单行注释
-- show databases; 单行注释
/*
多行注释
show databases;
*/

2.3 SQL的分类

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

2.4 DDL操作 数据库

2.4.1创建数据库

命令 说明
create database 数据库名; 创建指定名称的数据库
create database 数据库名 character set 字符集; 创建指定字符集的数据库(一般是utf-8)

代码示例

/*
  方式1 直接指定数据库名进行创建
  默认的字符集为:  latin1
*/
create database dbl;

/*
  方式2 指定数据库名  指定字符集创建
  一般指定为utf-8 与Java相同
*/
create database db2 character set utf8;

2.4.2 查看选择数据库

命令 说明
use 数据库; 选择数据库
select database(); 查看当前正在使用的数据库
show databases; 展示所有的数据库
show create database 数据库名 查看一个数据库的定义信息

代码示例

# 切换数据库 从db1到db2
use db2;

# 查看当前正在使用的数据库
select database();

# 查看MySQL中有那些数据库
show databases;

# 查看 一个db1数据库定义的信息
show create database db1;

2.4.3 修改数据库

修改数据库的字符集

命令 说明
alter database 数据库名 character set 字符集; 修改数据库的字符集
# 将数据库db1 的字符集 修改为 utf8
ALTER DATABASE db1 CHARACTER SET utf8;

# 查看当前数据库的基本信息,发现编码已更改
SHOW CREATE DATABASE db1;

2.4.4删除数据库

命令 说明
drop database 数据库名; 从MySQL中永久的删除指定的数据库

代码示例

# 删除db1数据库
drop database db1;

2.5 DDL操作 数据表

2.5.1 MySQL常见的数据类型

  1. 常见的数据类型
类型 描述
int 整型
double 浮点型
varchar 字符型
data 日期型

2)详细的数据类型


image.png

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

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

比如:保存字符串 "abc"

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

适用场景:

  • char类型适合存储 固定长度的字符串,比如 密码 ,性别一类
  • varchar类型适合存储 在一定范围内,有长度变化的字符串

2.5.2 创建表

语法格式:

create table 表名(
  字段名称1  字段类型(长度),
  字段名称2  字段类型(长度),
  ...
  最后一行不需要加逗号
)
  • 需求1: 创建商品分类表

表名:category
表中字段:
分类ID :cid ,为整型
分类名称:cname,为字符串类型,指定长度20

SQL实现

create table category(
  cid  int,
  cname  varchar(20)
);
  • 需求2: 创建测试表

表名: test1
表中字段:
测试ID : tid ,为整型
测试时间: tdate , 为年月日的日期类型

SQL实现

create test1(
  tid  int,
  tdate  date
);
  • 需求3: 快速创建一个表结构相同的表(复制表结构)

语法格式:
create table 新表名 like 旧表名

代码示例

# 创建一个表结构与 test1相同的 test2表
create table test1 like test2;

# 查看表结构
desc  test2;

2.5.3 查看表

命令 说明
show tables 查看当前数据中的所有表名
desc 表名 查看数据表的结构

代码示例

# 查看当前数据库中的所有表名
SHOW TABLES;

# 显示当前数据表的结构
DESC category;

# 查看创建表的SQL语句
SHOW CREATE TABLE category;

2.5.4 删除表

命令 说明
drop table 表名; 删除表(从数据库中永久删除某一张表)
drop table if exists 表名; 判断表是否存在, 存在的话就删除,不存在就不执行删除

代码示例

# 直接删除 test1 表
drop table test1;

#先判断 再删除test2
drop table if exists test2;

2.5.5 修改表

  1. 修改表名
  • 语法格式
    rename table 旧表名 to 新表名;

  • 需求: 将category表 改为 category1
    rename table category to category1;

  1. 修改表的字符集
  • 语法格式
    alert table 表名 character set 字符集;

  • 需求: 将category表的字符集 修改为gbk
    alert table category character set gbk;

  1. 向表中添加列,关键字add
  • 语法格式
    alert table 表名 add 字段名称 字段类型;

  • 为分类表添加一个新的字段为 分类描述 cdesc varchar(20)

# 为分类表添加一个新的字段为 分类描述 cdesc varchar(20)
alert table category add cdesc varchar(20);
  1. 修改表中列的 数据类型或长度 , 关键字 MODIFY
  • 语法格式
    alert table 表名 modify 字段名称 字段类型

  • 需求:对分类表的描述字段进行修改,类型varchar(50)
    alert table category modify cdesc varchar(50);

  1. 修改列名称 , 关键字 CHANGE
  • 语法格式
    alert table 表名 change 旧列名 新列名 类型(长度);

  • 需求: 对分类表中的 desc字段进行更换, 更换为 description varchar(30)
    alert table category change desc description varchar(30);

  1. 删除列 ,关键字 DROP
  • 语法格式
    alert table 表名 drop 列名

  • 需求: 删除分类表中description这列
    alert table category drop description;

3.6 DML 操作表中数据

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

3.6.1插入数据

语法格式:
insert into 表名 (字段1,字段2,字段3...) values (字段1,字段2,...);

  1. 代码准备,创建一个学生表
  • 需求
    表名:student
    表中字段:
    学员ID, sid int
    姓名, sname varchar(20)
    年龄, age int
    性别, sex char(1)
    地址, address varchar(40)
create table student (
  sid int,
  sname varchar(20),
  age int,
  sex char(1),
  address varchar(40)
)
  1. 向学生表中添加数据,3种方式
  • 方式1: 插入全部字段, 将所有字段名都写出来
    insert into student (sid,sname,age,sex,address) values (1,'孙悟空',20,'男','花果山');

  • 方式2:插入全部字段名,不写字段名
    insert into student values (2,'孙悟饭',10,'男','地球');

  • 方式3:插入指定字段的值
    insert into category (cname) values ('白骨精');

注意:
a) 值与字段必须要对应,个数相同&数据类型相同
b)值的数据大小,必须在字段指定的长度范围内
c)varchar char date类型的值必须使用单引号,或者双引号 包裹。
d)如果要插入空值,可以忽略不写,或者插入null
e) 如果插入指定字段的值,必须要上写列名

3.6.2 更改数据

语法格式1: 不带条件的修改
update 表名 set 列名 = 值;

语法格式2:带条件的修改
update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值 ]

不带条件的修改,将所有的性别修改为女(慎用! !)
update student set sex = '女';

带条件的修改,将sid为3的学生,性别改为男
update student set sid = 3 where sex = '男';

一次修改多个列, 将sid为 2 的学员,年龄改为 20,地址改为 北京
update student set age = 20,address = 20 where sid = 2;

3.6.3 删除数据

语法格式1:删除所有数据
delete from 表名

语法格式2: 指定条件 删除数据
delete from 表名 [where 字段名 = 值]

删除 sid 为 1 的数据
DELETE FROM student WHERE sid = 1;

删除所有数据
DELETE FROM student;

如果要删除表中的所有数据,有两种做法

  1. delete from 表名; 不推荐. 有多少条记录 就执行多少次删除操作. 效率低
  2. truncate table 表名: 推荐. 先删除整张表, 然后再重新创建一张一模一样的表. 效率高
truncate table student;

3.7 DQL 查询表中数据

3.7.1 准备数据

#创建员工表
表名 emp
表中字段:
eid 员工id,int
ename 姓名,varchar
sex 性别,char
salary 薪资,double
hire_date 入职时间,date
dept_name 部门名称,varchar
#创建员工表
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',财务部);
INSERT INTO emp VALUES(11,'兔八哥','女', 300,'2010-03-14',财务部);

3.7.2 简单查询

  • 查询不会对数据库中的数据进行修改.只是一种显示数据的方式 SELECT语法格式

语法格式
select 列名 from 表名

需求1: 查询emp中的 所有数据
SELECT * FROM emp; -- 使用 * 表示所有列

需求2: 查询emp表中的所有记录,仅显示id和name字段
SELECT eid,ename FROM emp;

需求3: 将所有的员工信息查询出来,并将列名改为中文

  • 别名查询,使用关键字 as
SELECT
eid AS '编号',
ename AS '姓名' ,
sex AS '性别',
salary AS '薪资',
hire_date '入职时间', -- AS 可以省略
dept_name '部门名称'
FROM emp;

需求4:查询一共有几个部门

  • 使用去重关键字 distinct
# 使用distinct 关键字,去掉重复部门信息
SELECT DISTINCT dept_name FROM emp;

需求5: 将所有员工的工资 +1000 元进行显示

  • 运算查询 (查询结果参与运算)
    SELECT ename , salary + 1000 FROM emp;

3.7.3 条件查询

如果查询语句中没有设置条件,就会查询所有的行信息,在实际应用中,一定要指定查询条件,对记录进行过滤

语法格式


select 列名 from 表名 where 条件表达式
* 先取出表中的每条数据,满足条件的数据就返回,不满足的就过滤掉

运算符
1.比较运算符

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

需求1:

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

代码实现

# 查询员工姓名为黄蓉的员工信息
SELECT * FROM emp WHERE ename = '黄蓉';
# 查询薪水价格为5000的员工信息
SELECT * FROM emp WHERE salary = 5000;
# 查询薪水价格不是5000的所有员工信息
SELECT * FROM emp WHERE salary != 5000;
SELECT * FROM emp WHERE salary <> 5000;
# 查询薪水价格大于6000元的所有员工信息
SELECT * FROM emp WHERE salary > 6000;
# 查询薪水价格在5000到10000之间所有员工信息
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;
# 查询薪水价格是3600或7200或者20000的所有员工信息
-- 方式1: or
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
-- 方式2: in() 匹配括号中指定的参数
SELECT * FROM emp WHERE salary IN(3600,7200,20000);

需求2:

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

模糊查询 通配符

通配符 说明
% 表示匹配任意多个字符串,
_ 表示匹配 一个字符
# 查询含有'精'字的所有员工信息
SELECT * FROM emp WHERE ename LIKE '%精%';
# 查询以'孙'开头的所有员工信息
SELECT * FROM emp WHERE ename LIKE '孙%';
# 查询第二个字为'兔'的所有员工信息
SELECT * FROM emp WHERE ename LIKE '_兔%';
# 查询没有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NULL;
-- SELECT * FROM emp WHERE dept_name = NULL;
# 查询有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NOT NULL;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容