MySQL基础(一)- MySQL基础&SQL入门

845 阅读12分钟

什么是数据库

  • 数据库(DataBase) 就是存储和管理数据的仓库
  • 其本质是一个文件系统, 还是以文件的方式,将数据保存在电脑上

为什么使用数据库

数据存储方式的比较

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

通过上面的比较,我们可以看出,使用数据库存储数据, 用户可以非常方便对数据库中的数据进行增加, 删 除, 修改及查询操作。

SQL的概念

什么是SQL ?

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL 的作用

  • 是所有关系型数据库的统一查询规范,不同的关系型数据库都支持SQL

  • 所有的关系型数据库都可以使用SQL

  • 不同数据库之间的SQL 有一些区别 方言

SQL通用语法

  1. SQL语句可以单行 或者 多行书写,以分号 结尾 ; (Sqlyog中可以不用写分号)

  2. 可以使用空格和缩进来增加语句的可读性。

  3. MySql中使用SQL不区分大小写,一般关键字大写,数据库名 表名列名 小写。

  4. 注释方式

注释语法说明
-- 空格单行注释
/* */多行注释
#MySql特有的单行注释x
# show databases; 单行注释
-- show databases; 单行注释
/*
多行注释
show databases;
*/

SQL的分类

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

image.png

DDL操作 数据库(CRUD)

人们经常说的CRUD是什么意思?

对数据库操作的分类包含

C create 创建

R retrieve 查询

U update 修改

D delete 删除

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

代码示例

/*
方式1 直接指定数据库名进行创建
默认数据库字符集为:latin1
*/
CREATE DATABASE db1;
/*
方式2 指定数据库名称,指定数据库的字符集
一般都指定为 utf8,与Java中的编码保持一致
*/
CREATE DATABASE db1_1 CHARACTER SET utf8;
查看/选择数据库
命令说明
use 数据库切换数据库
select database();查看当前正在使用的数据库
show databases;查看Mysql中 都有哪些数据库
show create database 数据库名;查看一个数据库的定义信息

代码示例

-- 切换数据库 从db1 切换到 db1_1
USE db1_1;

-- 查看当前正在使用的数据库
SELECT DATABASE();

-- 查看Mysql中有哪些数据库
SHOW DATABASES;

-- 查看一个数据库的定义信息
SHOW CREATE DATABASE db1_1;
修改数据库
命令说明
alter database 数据库名 character set 字符集;数据库的字符集修改操作

代码示例

-- 将数据库db1 的字符集 修改为 utf8
ALTER DATABASE db1 CHARACTER SET utf8;

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

删除数据库
命令说明
drop database 数据库名从MySql中永久的删除某个数据库

代码示例

-- 删除某个数据库
-- 语法格式 drop database 数据库名称 将数据库从MySql中永久删除
DROP DATABASE db1_1;  -- 慎用

DDL操作 数据表

MySQL常见的数据类型

常用的数据类型:

类型描述
int整型
double浮点型
varchar字符串
date日期类型 年月日 没有时分秒 yyyy-MM-dd
datetime日期时间类型 yyyy-MM-dd HH:mm:ss

详细的数据类型

image.png


注意:MySQL中的 char类型与 varchar类型,都对应了 Java中的字符串类型,区别在于: - char类型是固定长度的: 根据定义的字符串长度分配足够的空间。 - varchar类型是可变长度的: 只使用字符串长度所需的空间
// 比如:保存字符串 "abc"
x char(10) 占用10个字节
y varchar(10) 占用3个字节

适用场景:

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

语法格式

创建表的语法格式
create table 表名(
   字段名称1 字段类型(长度),
   字段名称2 字段类型,
   字段名称3 字段类型 最后一个列不要添加逗号
);

SQL实现

-- 切换到数据库 db1
USE db1;

-- 创建表
CREATE TABLE category(
    cid INT,
    cname VARCHAR(20)
);

快速创建一个表结构相同的表(复制表结构)

-- 创建一个表结构与 test1 相同的 test2表
CREATE TABLE test2 LIKE test1;

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

代码示例

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

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

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

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

代码示例

-- 直接删除 test1 表
DROP TABLE test1;

-- 先判断 再删除test2表
DROP TABLE IF EXISTS test2;

修改表
修改表名

语法格式

rename table 旧表名 to 新表名

代码示例

-- 修改表名称 语法格式: rename table 旧表名 to 新表名
RENAME TABLE category TO category1;
修改表的字符集

语法格式

alter table 表名 character set 字符集

代码示例

-- 修改表的字符集为 gbk 
-- 语法格式: alter table 表名 character set 字符集
ALTER TABLE category1 CHARACTER SET gbk; 
向表中添加列, 关键字 ADD

语法格式

alert table 表名 add 字段名称 字段类型

代码示例

-- 语法格式: alter table 表名 add 字段名称 字段类型(长度)
-- 添加分类描述字段
ALTER TABLE category1 ADD cdesc VARCHAR(20);
修改表中列的 数据类型或长度 , 关键字 MODIFY

语法格式

alter table 表名 modify 字段名称 字段类型

代码示例

-- 修改cdesc 字段的长度为 50
ALTER TABLE category1 MODIFY cdesc VARCHAR(50); -- 修改字段长度
ALTER TABLE category1 MODIFY cdesc CHAR(20); -- 修改字段类型
修改列名称 , 关键字 CHANGE

语法格式

alter table 表名 change 旧列名 新列名 类型(长度);

代码示例

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

语法格式

alter table 表名 drop 列名;

代码示例

-- 语法格式: alter table 表名 drop 列名
ALTER TABLE category1 DROP description;

DML 操作表中数据

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

插入数据

语法格式

insert into 表名 (字段名1,字段名2...) 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)
);

2) 向 学生表中添加数据,3种方式:

  • 方式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,'蜘蛛精');

3) 注意事项

-- 1.值与字段必须对应 个数&数据类型&长度 都必须一致
INSERT INTO student (sid,sname,age,sex,address) VALUES(4,'孙悟空',18,'男','花果山');

-- 2.在插入 varchar char date 类型的时候,必须要使用 单引号 或者双引号进行包裹
INSERT INTO student (sid,sname,age,sex,address) VALUES(4,'孙悟空',18,'男','花果山');

-- 3.如果插入空值 可以忽略不写 或者写 null
INSERT INTO student (sid,sname) VALUES(5,'唐僧');
INSERT INTO student (sid,sname,age,sex,address) VALUES(6,'八戒',NULL,NULL,NULL);
更改数据

语法格式1: 不带条件的修改

update 表名 set 列名 =

语法格式2: 带条件的修改

update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值 ]

1)不带条件修改,将所有的性别改为女(慎用!!)

UPDATE student SET sex = '女';

2)带条件的修改,将sid 为3的学生,性别改为男

UPDATE student SET sex = '男' WHERE sid = 1;

3)一次修改多个列, 将sid为 2 的学员,年龄改为 20,地址改为 北京

UPDATE student SET age = 20 , address = '大唐' WHERE sid = 5;
删除数据(慎用!!!)

语法格式1: 删除所有数据

delete from 表名

语法格式2: 指定条件 删除数据

delete from 表名 [where 字段名 = 值]

1)删除 sid 为 1 的数据

DELETE FROM student WHERE sid = 1;

2) 删除所有数据

DELETE FROM student;

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

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

DQL 查询表中数据

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

简单查询

语法格式

select 列名 from 表名

查询emp中的 所有数据

SELECT * FROM emp; -- 使用 * 表示所有列

查询emp表中的所有记录,仅显示id和name字段

SELECT eid,ename FROM emp;

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

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

查询一共有几个部门

SELECT dept_name FROM emp;

去重操作 关键字 distinct

SELECT DISTINCT dept_name FROM emp;

将我们的员工薪资数据 +1000 进行展示

SELECT ename, salary+1000 AS salary FROM emp;

注意: 查询操作 不会对数据表中的数据进行修改,只是一种显示的方式.

条件查询

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

运算符

1) 比较运算符

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

2) 逻辑运算符

运算符说明
--------
And &&多个条件同时成立
Or多个条件任一成立
Not不成立,取反。

查询格式思维

1.查哪张表	2.查哪些字段	3.查询条件

查询员工姓名为黄蓉的员工信息

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;
SELECT * FROM emp WHERE salary >= 5000 AND salary  <= 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 = null; 错误方式
SELECT * FROM emp WHERE dept_name IS NULL;

查询有部门的员工信息

SELECT * FROM emp WHERE dept_name IS NOT NULL;
-- 条件查询 先取出表中的每条数据,满足条件的就返回,不满足的就过滤.