Files
java-book/3.javaEE/day06/MySQL基础-笔记.md
2025-08-27 14:54:36 +08:00

25 KiB
Raw Permalink Blame History

MYSQL基础语法

学习目标

  1. 能够理解数据库的概念
  2. 能够安装MySQL数据库
  3. 能够启动,关闭及登录MySQL
  4. 能够使用SQL语句操作数据库
  5. 能够使用SQL语句操作表结构
  6. 能够使用SQL语句进行数据的添加修改和删除的操作
  7. 能够使用SQL语句简单查询数据

第一章 数据库的基本知识

目标

  1. 能够掌握数据库的概念
  2. 能够说出常用的数据库

讲解

什么是数据库

存储数据的仓库

数据的存储方式

  1. 数据保存在内存

    int[] arr = new int[]{1, 2, 3, 4};
    ArrayList<Integer>list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    

    new出来的对象存储在堆中.堆是内存中的一小块空间

    优点:内存速度快 缺点:断电/程序退出,数据就清除了.内存价格贵

  2. 数据保存在普通文件 优点:永久保存 缺点:查找,增加,修改,删除数据比较麻烦,效率低

  3. 数据保存在数据库 优点:永久保存,通过SQL语句比较方便的操作数据库

数据库的优点

数据库是按照特定的格式将数据存储在文件中通过SQL语句可以方便的对大量数据进行增、删、改、查操作数据库是对大量的信息进行管理的高效的解决方案。

常见数据库

常见数据库 Oracle收费的大型数据库Oracle公司的产品。Oracle收购SUN公司收购MYSQL。 MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。 DB2 IBM公司的数据库产品,收费的。常应用在银行系统中. SQLServerMicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。 SyBase已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。 SQLite: 嵌入式的小型数据库,应用在手机端。

常用数据库MYSQLOracle 在web应用中使用的最多的就是MySQL数据库原因如下

  1. 开源、免费
  2. 功能足够强大足以应付web应用开发最高支持千万级别的并发访问

小结

  1. 说出数据库的概念:存储数据的仓库
  2. 说出常用的数据库MYSQL, Oracle

命令行客户端连接服务器

目标

  1. 能够打开和关闭mysql服务
  2. 能够连接到mysql

讲解

打开和关闭mysql服务 1550408825267 mysql启动02

1550289380140

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

  1. 登录格式1mysql -u用户名 -p密码 例如:

    mysql -uroot -proot
    

    MYSQL登录01 后输入密码方式:

    mysql -uroot -p
    下一行输入密码
    

    MYSQL登录04

  2. 登录格式2mysql -hip地址 -u用户名 -p密码 例如:

    mysql -h127.0.0.1 -uroot -proot
    

    MYSQL登录02

  3. 退出MySQLexit MYSQL登录03

小结

  1. 打开和关闭mysql服务
  2. 连接到本机的mysqlmysql -uroot -proot
  3. 连接到指定主机的mysqlmysql -hip地址 -uroot -proot

服务器与数据库、表、记录的关系

目标

能够理解mysql服务器与数据库、表、记录的关系

讲解

1550409365086

实体类与表的对应关系

实体类与表的对应关系

小结

mysql服务器与数据库、表、记录的关系

SQL语句的分类和语法

目标

  1. 能够掌握SQL的概念和作用

讲解

什么是SQL

结构化查询语言(Structured Query Language)简称SQL。

SQL语句就是对数据库进行操作的一种语言。

SQL作用

通过SQL语句我们可以方便的操作数据库、表、数据。 SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句但都有特有内容。 SQL规范

SQL语句分类
  1. DDL(Data Definition Language)数据定义语言 用来定义数据库对象数据库列等。关键字create, drop,alter等

  2. DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据进行增删改。关键字insert, delete, update等

  3. DQL(Data Query Language) 数据查询语言 对数据库进行数据查询关键字select。

  4. DCL(Data Control Language)数据控制语言(了解)

    是用来设置或更改数据库用户或角色权限的语句,这个比较少用到。

SQL通用语法
  1. SQL语句可以单行或多行书写以分号结尾。

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

  3. MySQL数据库的SQL语句不区分大小写关键字建议使用大写。

    SELECT * FROM student;
    
  4. 3种注释 单行注释: -- 注释内容 多行注释: /* 注释 */

    # 注释内容(mysql特有的单行注释)

小结

  1. SQL的作用对数据库进行操作的语句,增删改查
  2. SQL的分类 DDL:操作数据和表 DML:对表中的记录进行增删改 DQL:对表中的记录进行查询
  3. SQL的语法特点 可以写一行,也可以写成多行,最好是以;结尾 关键字建议大写 可以任意缩进 单行注释: -- 开头 # 开头 多行注释: /* */

第二章 DDL操作数据库

目标

能够掌握创建数据库的三种语法

讲解

创建数据库
  1. 直接创建数据库

    CREATE DATABASE 数据库名;
    
  2. 判断是否存在并创建数据库

    CREATE DATABASE IF NOT EXISTS 数据库名;
    
  3. 创建数据库并指定字符集(编码表)

    CREATE DATABASE 数据库名 character set 字符集;
    
  4. 具体操作:

  • 直接创建数据库db1

    CREATE DATABASE db1;
    

    直接创建数据库

  • 判断是否存在并创建数据库db2

    CREATE DATABASE IF NOT EXISTS db2;
    

    判断是否存在并创建数据库

  • 创建数据库db3并指定字符集为gbk

    CREATE DATABASE db2 CHARACTER SET gbk;
    

    创建数据库并指定字符集

查看数据库
  1. 查看所有的数据库
SHOW DATABASES;

查看所有数据库 2. 查看某个数据库的定义信息

SHOW CREATE DATABASE 数据库名;

查看某个数据库的定义信息

小结

  1. 创建数据库语法CREATE DATABASE 数据库名;
  2. 查看有哪些数据库SHOW DATABASES;

DDL修改和删除数据库

目标

  1. 能够修改数据库的字符集
  2. 能够删除数据库

讲解

修改数据库字符集
ALTER 表示修改
ALTER DATABASE 数据库 default character set 新的字符集;

具体操作:

  • 将db3数据库的字符集改成utf8
    ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;
    
    修改数据库字符集
删除数据库
drop --表示删除数据库或表
DROP DATABASE 数据库名;

具体操作:

  • 删除db2数据库
    DROP DATABASE db2;
    
    删除数据库

小结

  1. 修改数据库的字符集格式alter database 数据库 character set 新的字符集;
  2. 删除数据库格式drop database 数据库名;

DDL使用数据库

目标

  1. 能够掌握切换数据库语法
  2. 能够查看正在使用的数据库

讲解

  1. 查看正在使用的数据库

    select -- 查询
    SELECT DATABASE();
    
  2. 使用/切换数据库

    USE 数据库名;
    

具体操作:

  • 查看正在使用的数据库
    SELECT DATABASE();
    
    查看正在使用的数据库
  • 使用db1数据库
    USE db1;
    
    使用db1数据库

小结

DDL语句操作 关键字
创建 create database 数据库名;
修改 alter database character set 字符集;
查看 show databases;
删除 drop database 数据库名;

DDL创建表

目标

  1. 能够掌握SQL创建表

讲解

前提先使用某个数据库db1

创建表
CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2...);

建议写成如下格式:

CREATE TABLE 表名 (
    字段名1 字段类型1, 
    字段名2 字段类型2
);

关键字说明:

CREATE -- 表示创建
TABLE -- 表示表
MySQL数据类型

MySQL中的我们常使用的数据类型如下 MYSQL常用数据类型

详细的数据类型如下(不建议详细阅读!)

1550410505421

具体操作:

创建student表包含id,name,birthday字段

CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE
);

小结

  1. 创建表语句CREATE TABLE 表名 (字段名 类型, 字段名 字段类型...);
  2. 常用数据类型int, double, varchar, date

DDL查看表

目标

  1. 能够查看某个数据库中的所有表
  2. 能够查看表结构

讲解

  1. 查看某个数据库中的所有表

    SHOW TABLES;
    
  2. 查看表结构

    DESC 表名;
    
  3. 查看创建表的SQL语句

    SHOW CREATE TABLE 表名;
    

具体操作:

  • 查看mysql数据库中的所有表

    SHOW TABLES;
    

    查看某个数据库中的所有表

  • 查看student表的结构

    DESC student;
    

    查看student表的结构

  • 查看student的创建表SQL语句

    SHOW CREATE TABLE student;
    

    查看student的创建表SQL语句

小结

  1. 查看某个数据库中的所有表show tables;
  2. 查看表结构desc 表名;
  3. 查看创建表的SQL语句show create table 表名;

DDL删除表

目标

  1. 能够掌握删除表语法
  2. 能够掌握快速创建一个表结构相同的表

讲解

快速创建一个表结构相同的表
CREATE TABLE 表名 LIKE 其他表;

具体操作:

  • 创建s1表s1表结构和student表结构相同

    CREATE TABLE s1 LIKE student;
    
删除表
  1. 直接删除表

    DROP TABLE 表名;
    
  2. 判断表是否存在并删除表

    DROP TABLE IF EXISTS 表名;
    

具体操作:

  • 直接删除表s1表
    DROP TABLE s1;
    
    直接删除表
  • 判断表是否存在并删除s1表
    DROP TABLE IF EXISTS s1;
    
    判断表存在并删除

小结

  1. 快速创建一个表结构相同的表CREATE TABLE 表名 LIKE 其他表;
  2. 删除表语法DROP TABLE 表名;

DDL修改表结构

目标

能够掌握修改表结构的语法

讲解

修改表结构使用不是很频繁,只需要了解,等需要使用的时候再回来查即可

  1. 添加表列

    ALTER TABLE 表名 ADD 字段名 类型;
    

    具体操作:

    • 为学生表添加一个新的字段remark,类型为varchar(20)
      ALTER TABLE student ADD remark VARCHAR(20);
      
      添加字段
  2. 修改列类型

    ALTER TABLE 表名 MODIFY 字段名 新的类型;
    

    具体操作:

    • 将student表中的remark字段的改成varchar(100)
      ALTER TABLE student MODIFY remark VARCHAR(100);
      
      修改字段类型
  3. 修改列名

    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;
    

    具体操作:

    • 将student表中的remark字段名改成intro类型varchar(30)
      ALTER TABLE student CHANGE remark intro varchar(30);
      
      修改表字段名称
  4. 删除列

    ALTER TABLE 表名 DROP 字段名;
    

    具体操作:

    • 删除student表中的字段intro
      ALTER TABLE student DROP intro;
      
      删除字段
  5. 修改表名

    RENAME TABLE 表名 TO 新表名;
    

    具体操作:

    • 将学生表student改名成student2再删除student2表
       RENAME TABLE student TO student2;
       DROP TABLE student2;
      
      修改表名
  6. 修改字符集

    ALTER TABLE 表名 character set 字符集;
    

    具体操作:

    • 将sutden2表的编码修改成gbk
      ALTER TABLE student2 character set gbk;
      
      修改字符集

小结

  1. 所有修改表前面的语法都是相同的ALTER TABLE 表名

  2. 添加一列add 字段名 类型

  3. 修改类型modify 字段名 新的类型

  4. 修改字段名和类型change 旧字段名 新字段名 类型

  5. 删除一列drop 字段名

第三章 DML操作数据表

DML插入记录(重点)

目标

能够掌握往表中添加记录

讲解

创建student表包含id,name,birthday,sex,address字段。

CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE,
      sex char(2),
      address varchar(50)
);
插入全部字段
  • 所有的字段名都写出来

    INSERT -- 表示往表里插入记录
    INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
    
  • 不写字段名

    INSERT INTO 表名 VALUES (字段值1, 字段值2...);
    
插入部分数据
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);

没有添加数据的字段会使用NULL

  1. 关键字说明

    INSERT INTO 表名  表示往哪张表中添加数据
    (字段名1, 字段名2, )  --  要给哪些字段设置值
    VALUES (1, 2, ); -- 设置具体的值
    
  2. 具体操作:

    • 插入部分数据,往学生表中添加 id, name, age, sex数据
    INSERT INTO student (id, NAME, age, sex) VALUES (1, '张三', 20, '男');
    

    添加部分数据

    • 向表中插入所有字段

      • 所有的字段名都写出来
       INSERT INTO student (NAME, id, age, sex, address) VALUES ('李四', 2, 23, '女', '广州');
      

      所有字段都添加数据

      • 不写字段名
      INSERT INTO student VALUES (3, '王五', 18, '男', '北京');
      

      添加所有字段数据

注意
  • 值与字段必须对应,个数相同,类型相同
  • 值的数据大小必须在字段的长度范围内
  • 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
  • 如果要插入空值可以不写字段或者插入null

小结

  1. 向表中添加一条完整记录: 所有的字段都写出来: INSERT INTO 表名 (字段1, 字段2, ....) VALUES (值1, 值2, ...); 不写字段名: INSERT INTO 表名 VALUES (值1, 值2, ...);
  2. 向表中添加一条记录部分列:必须写字段名,否则不知道添哪个字段. INSERT INTO 表名 (字段1, 字段2, ....) VALUES (值1, 值2, ...);

DOS命令窗口操作数据乱码问题

目标

能够理解DOS命令行乱码的原因

讲解

当我们使用DOS命令行进行SQL语句操作如有有中文会出现乱码导致SQL执行失败 DOS中文乱码01 错误原因:因为MySQL的客户端设置编码是utf8,而系统的DOS命令行编码是gbk编码不一致导致的乱码 1551157215427

解决方案:

  1. 快捷设置

    DOS命令行输入set names gbk;
    

    注意以上方式为临时方案退出DOS命令行就失效了需要每次都配置

  2. 修改MySQL安装目录下的my.ini文件重启服务所有地方生效。此方案将所有编码都修改了[不建议] DOS中文乱码04

小结

如何解决DOS命令行乱码set names gbk;

DML更新表记录

目标

能够掌握更新表记录

讲解

  1. 不带条件修改数据

    UPDATE 表名 SET 字段名=新的值;
    
  2. 带条件修改数据

    UPDATE 表名 SET 字段名=新的值 WHERE 条件
    
  3. 关键字说明

    UPDATE: 表示修改记录 
    SET: 要改哪个字段
    WHERE: 设置条件
    
  4. 具体操作:

    • 不带条件修改数据,将所有的性别改成女

      UPDATE student SET sex='女';
      

      修改所有数据

    • 带条件修改数据将id号为2的学生性别改成男

      UPDATE student SET sex='男' WHERE id=2;
      

      带条件修改

    • 一次修改多个列把id为3的学生年龄改成26岁address改成北京

      UPDATE student SET age=26, address='北京' WHERE id=3;
      

      一次性修改2个字段

小结

  1. 不带条件的更新数据库记录UPDATE TABLE SET 字段名=新的值;
  2. 带条件UPDATE TABLE SET 字段名=新的值 WHERE 条件;

DML删除表记录

目标

能够掌握删除表记录

讲解

  1. 不带条件删除数据

    DELETE -- 删除记录
    DELETE FROM 表名;
    
  2. 带条件删除数据

    DELETE FROM 表名 WHERE 条件;
    
  3. truncate删除表记录

    TRUNCATE TABLE 表名;
    

    truncate和delete的区别

    • delete是将表中的数据一条一条删除
    • truncate是将整个表摧毁重新创建一个新的表,新的表结构和原来表结构一模一样 truncate
  4. 具体操作:

    • 带条件删除数据删除id为3的记录

      DELETE FROM student WHERE id=3;
      

      删除满足条件的记录

    • 不带条件删除数据,删除表中的所有数据

      DELETE FROM student;
      

      删除所有记录

小结

  1. 指定条件删除DELETE FROM 表名 WHERE 条件;
  2. 没有条件删除所有的记录DELETE FROM 表名;
  3. 删除表结构再创建表TRUNCATE TABLE 表名;

第四章 DQL查询数据记录

DQL没有条件的简单查询

目标

能够掌握简单查询

讲解

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

查询表中所有列数据
  1. 写出查询每列的名称
SELECT -- 表示查询
SELECT 字段名1, 字段名2, ... FROM 表名;

具体操作:

SELECT id, NAME ,age, sex, address FROM student;

查询所有列

  1. 使用*表示所有列

    SELECT * FROM 表名;
    

    具体操作:

    SELECT * FROM student;
    

    查询所有列

查询表中指定列数据

查询指定列的数据,多个列之间以逗号分隔

SELECT 字段名1, 字段名2 FROM 表名;

具体操作: 查询student表中的name 和 age 列

SELECT NAME, age FROM student;

查询指定字段

别名查询
  1. 查询时给列、表指定别名需要使用AS关键字

  2. 使用别名的好处是方便观看和处理查询到的数据 SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名; SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名; 注意:

    查询给表取别名目前还看不到效果,需要到多表查询的时候才能体现出好处 AS关键字可以省略

  3. 具体操作:

    • 查询sudent表中name 和 age 列name列的别名为”姓名”age列的别名为”年龄”
    SELECT NAME AS 姓名, age AS 年龄 FROM student;
    

    查询字段别名

清除重复值
  1. 查询指定列并且结果不出现重复数据

    SELECT DISTINCT 字段名 FROM 表名;
    
  2. 具体操作:

    • 查询address列并且结果不出现重复的address
    SELECT DISTINCT address 城市 FROM student;
    

    1550289641391

查询结果参与运算
  1. 某列数据和固定值运算

    SELECT 列名1 FROM 表名;
    SELECT 列名1 + 固定值 FROM 表名;
    
  2. 某列数据和其他列数据参与运算

    SELECT 列名1 + 列名2 FROM 表名;
    

    注意: 参与运算的必须是数值类型

  3. 需求:

    • 添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩
    • 查询的时候将数学和英语的成绩相加
  4. 实现:

  • 修改student表结构,添加数学和英语成绩列

    ALTER TABLE student ADD math INT;
    ALTER TABLE student ADD english INT;
    
  • 给每条记录添加对应的数学和英语成绩 添加数学和英语成绩

  • 查询math + english的和

    SELECT math + english FROM student;
    

    查询math和english的和

    结果确实将每条记录的math和english相加但是效果不好看

  • 查询math + english的和使用别名”总成绩”

    SELECT math + english 总成绩 FROM student;
    

    组合查询结果取别名

  • 查询所有列与math + english的和并使用别名”总成绩”

    SELECT *, math + english 总成绩 FROM student;
    

    查询所有列数据和参与运算

  • 查询姓名、年龄将每个人的数学增加10分

    SELECT name, math + 10 FROM student;
    

小结

  1. 简单查询格式SELECT 字段名 FROM 表名;
  2. 定义别名SELECT 字段名 AS 别名 FROM 表名;
  3. 去除重复行SELECT DISTINCT 字段名 FROM 表名;
  4. 数值列,可以进行计算,不会影响表中数据
DML语句操作 关键字
添加 INSERT INTO 表名 (字段名...) VALUES (值...);
修改 UPDATE 表名 SET 字段名=新的值 WHERE 条件;
删除 DELETE FROM 表名 WHERE 条件;
查询 SELETE 字段名 FROM 表名;

第五章 蠕虫复制

目标

了解蠕虫复制

讲解

什么是蠕虫复制:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中 语法格式:

INSERT INTO 表名1 SELECT * FROM 表名2;

作用:将表名2中的数据复制到表名1

具体操作:

  • 创建student2表student2结构和student表结构一样
CREATE TABLE student2 LIKE student;
  • 将student表中的数据添加到student2表中
INSERT INTO student2 SELECT * FROM student;

注意如果只想复制student表中name,age字段数据到student2表中使用如下格式 INSERT INTO student2(NAME, age) SELECT NAME, age FROM student; 蠕虫复制

总结

  1. 能够理解数据库的概念 存储数据的仓库
  2. 能够安装MySQL数据库 一直下一步:解压,复制 配置MYSQL服务器:下一步
  3. 能够启动,关闭及登录MySQL 在服务里面找到MySql,右键启动/关闭 登录MySQL: mysql -uroot -proot
  4. 能够使用SQL语句操作数据库 创建数据库: CREATE DATABASE 数据库名; 查看所有数据库: SHOW DATABASES; 删除数据库: DROP DATABASE 数据库名; 切换数据库: USE 数据库名;
  5. 能够使用SQL语句操作表结构 创建表: CREATE TABLE 表名 (字段名 类型, 字段名 类型, ...); 查看所有表: SHOW TABLES; 修改表: ALTER TABLE 表名; 添加一列: ADD 字段名 类型 修改字段类型: MODIFY 字段名 新的类型; 修改字段名: CHANGE 旧字段名 新字段名 新的类型; 删除一列: DROP 字段名; 修改表名: REANME TABLE 表名 TO 新表名 删除表: DROP TABLE 表名;
  6. 能够使用SQL语句进行数据的添加修改和删除的操作 添加数据: INSERT INTO 表名 (字段名) VALUES (值); 修改数据: UPDATE 表名 SET 字段名=新的值 WHERE 条件; 删除数据: DELETE FROM 表名 WHERE 条件;
  7. 能够使用SQL语句简单查询数据 SELECT 字段名1, 字段名2, ... FROM 表名;