IE盒子

搜索
查看: 143|回复: 0

java-mysql-基础

[复制链接]

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-1-15 16:30:02 | 显示全部楼层 |阅读模式
一、学习内容

1、数据库的基本概念
2、DDL 操作数据库和数据表
3、DML 表数据的增删改
4、DQL 表数据查询
5、约束
1、数据库的基本概念

什么是数据库?

用于存储和管理数据的仓库
英文单词为:DataBase,简称DB
数据库的好处?

可以持久化存储数据
方便存储和管理数据
使用了统一的方式操作数据库-- SQL
常见的数据库有哪些?


MySQL 数据库介绍

小型的数据库
开源免费(6 版本之前免费)
所属于Oracle 公司
SQL 语句

数据库、数据表、数据的关系介绍
数据库
用于存储和管理数据的仓库
一个库中可以包含多个数据表
数据表
数据库最重要的组成部分之一
它由纵向的列和横向的行组成(类似excel 表格)
可以指定列名、数据类型、约束等
一个表中可以存储多条数据
数据
想要永久化存储的数据


SQL 介绍

什么是SQL

Structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式可
能会存在一些不一样的地方,我们称为“方言”。
SQL 通用语法

SQL 语句可以单行或多行书写,以分号结尾。
可使用空格和缩进来增强语句的可读性。
MySQL 数据库的SQL 语句不区分大小写,关键字建议使用大写。
数据库的注释:

单行注释:-- 注释内容#注释内容(mysql 特有)
多行注释:/* 注释内容*/
SQL 分类

DDL(Data Definition Language)数据定义语言

用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等
DML(Data Manipulation Language)数据操作语言

用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
DQL(Data Query Language)数据查询语言

用来查询数据库中表的记录(数据)。关键字:select, where 等
DCL(Data Control Language)数据控制语言(了解)

用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等


2、DDL-操作数据库

新建数据库连接








R(Retrieve):查询

查询所有数据库:  SHOW DATABASES;


查询某个数据库的创建语句

1. -- 标准语法
2. SHOW CREATE DATABASE 数据库名称;
3. 查看mysql 数据库的创建格式


C(Create):创建

创建数据库

1. -- 标准语法
2. CREATE DATABASE 数据库名称;
3.-- 创建db1 数据库
4. CREATE DATABASE db1;


创建已存在的数据库会报错



创建数据库(判断,如果不存在则创建)

1. -- 标准语法
2. CREATE DATABASE IF NOT EXISTS 数据库名称;
3. -- 创建数据库db2(判断,如果不存在则创建)
4. CREATE DATABASE IF NOT EXISTS db2;


创建数据库、并指定字符集

1. -- 标准语法
2. CREATE DATABASE 数据库名称CHARACTER SET 字符集名称;
3. -- 创建数据库db3、并指定字符集utf8
4. CREATE DATABASE db3 CHARACTER SET utf8;
5. -- 查看db3 数据库的字符集


练习:创建db4 数据库、如果不存在则创建,指定字符集为gbk



U(Update):修改

修改数据库的字符集

1. -- 标准语法
2. ALTER DATABASE 数据库名称CHARACTER SET 字符集名称;
3. -- 修改数据库db4 的字符集为utf8
4. -- 查看db4 数据库的字符集


D(Delete):删除

删除数据库

1. -- 标准语法
2. DROP DATABASE 数据库名称;
3.-- 删除db1 数据库


删除一个不存在的数据库会报错 -- 错误代码:1008 Can't drop database 'db1'; database doesn't exist


删除数据库(判断,如果存在则删除)

1. -- 标准语法
2. DROP DATABASE IF EXISTS 数据库名称;
3. -- 删除数据库db2,如果存在  (首先判断数据库是否存在 存在就删除)


使用数据库

查询当前正在使用的数据库名称

1. -- 查询当前正在使用的数据库
2. SELECT DATABASE();


使用数据库

1. -- 标准语法
2. USE 数据库名称;
3. -- 使用db4 数据库


DDL-操作数据表

R(Retrieve):查询

查询数据库中所有的数据表

1. -- 使用mysql 数据库


2. -- 查询库中所有的表


查询表结构

1. -- 标准语法
DESC 表名;
2. -- 查询user 表结构


查询表字符集

1. -- 标准语法
2. SHOW TABLE STATUS FROM 库名LIKE '表名';
3. -- 查看mysql 数据库中user 表字符集


C(Create):创建

创建数据表

标准语法
CREATE TABLE 表名(
     列名1 数据类型1,
     列名2 数据类型2,
     ....
    列名n 数据类型n
);
-- 注意:最后一列,不需要加逗号
数据类型

1. int:整数类型
     * age int
2. double:小数类型
    * score double(5,2)
    * price double
3. date:日期,只包含年月日yyyy-MM-dd
4. datetime:日期,包含年月日时分秒yyyy-MM-dd HH:mm:ss
5. timestamp:时间戳类型包含年月日时分秒yyyy-MM-dd HH:mm:ss
     * 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6. varchar:字符串
     * name varchar(20):姓名最大20 个字符
     * zhangsan   占8 个字符   张三 占2 个字符
创建数据表

1. -- 使用db3 数据库


2. -- 创建一个product 商品表


复制表

1. -- 标准语法
2. CREATE TABLE 表名LIKE 被复制的表名;
3. -- 复制product 表到product2 表


U(Update):修改

修改表名

1. -- 标准语法
2. ALTER  TABLE  表名 RENAME TO  新的表名;
3. -- 修改product2 表名为product3


修改表的字符集

1. -- 标准语法
2. ALTER TABLE 表名CHARACTER SET 字符集名称;
3. -- 查看db3 数据库中product3 数据表字符集


4. -- 修改product3 数据表字符集为gbk
5. -- 查看db3 数据库中product3 数据表字符集


添加一列

1. -- 标准语法
2. ALTER TABLE 表名ADD 列名数据类型;
3. -- 给product3 表添加一列color


修改列名称和数据类型

1. -- 修改数据类型标准语法
2. ALTER TABLE 表名MODIFY 列名新数据类型;
3. -- 将color 数据类型修改为int


4. -- 修改列名和数据类型标准语法
5. ALTER TABLE 表名CHANGE 列名新列名新数据类型;
5. -- 将color 修改为address,数据类型为varchar


删除列

1. -- 标准语法
2. ALTER TABLE 表名DROP 列名;
3. -- 删除address 列


删除同理  删除一个不存在的表会报错


删除数据表(判断,如果存在则删除)

1. -- 标准语法
2. DROP TABLE IF EXISTS 表名;
3. -- 删除product3 表,如果存在则删除


DML-INSERT 语句

新增表数据语法

新增格式1:给指定列添加数据

  • -- 标准语法
2. INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...);


3. -- 向product 表添加指定列数据
4. INSERT INTO product (id,NAME,price) VALUES (2,'电脑',4999);


新增格式2:默认给全部列添加数据

1. -- 标准语法
2. INSERT INTO 表名VALUES (值1,值2,值3,...);


新增格式3:批量添加数据

1. -- 默认添加所有列数据标准语法
2. INSERT INTO 表名VALUES (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值,...);


3. -- 给指定列添加数据标准语法
4.. INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);


注意事项

列名和值的数量以及数据类型要对应
除了数字类型,其他数据类型的数据都需要加引号(单引双引都可以,推荐单引)
DML-UPDATE 语句

修改表数据语法

1. -- 标准语法
2. UPDATE 表名SET 列名1 = 值1,列名2 = 值2,... [where 条件];


下面是 未添加条件的结果


修改电视的价格和库存


修改电磁炉的库存


注意事项

修改语句中必须加条件
如果不加条件,则将所有数据都修改
DML-DELETE 语句

删除表数据语法

1. -- 标准语法
2. DELETE FROM 表名[WHERE 条件];
3. -- 删除product 表中的微波炉信息


4.-- 删除库存


注意事项

删除语句中必须加条件
如果不加条件,则将所有数据删除
DQL-单表查询

准备数据

-- 创建数据库
CREATE DATABASE db7;
-- 使用数据库
USE db7;
-- 创建表单
CREATE TABLE product(
-- 商品编号
        id INT,
        -- 商品名称
        NAME VARCHAR(20),
        -- 商品价格
        price DOUBLE ,
        -- 商品品牌
        brand VARCHAR(10),
        -- 商品库存
        stock INT,
        -- 添加时间
        insert_time DATE
        );
-- 添加表单数据
INSERT INTO product VALUES
        (1,'华为手机',3999,'华为',23,'2088-03-10'),
        (2,'小米手机',2999,'小米',30,'2088-05-15'),
        (3,'苹果手机',5999,'苹果',18,'2088-08-20'),
        (4,'华为电脑',6999,'华为',14,'2088-06-16'),
        (5,'小米电脑',4999,'小米',26,'2088-07-08'),
        (6,'苹果电脑',8999,'苹果',15,'2088-10-25'),
        (7,'联想电脑',7999,'联想',NULL,'2088-11-11');
-- 查询表单数据
SELECT * FROM product;
查询语法

  select
        字段列表
  from
         表名列表
   where
         条件列表
   group by
          分组字段
   having
          分组之后的条件
   order by
          排序
   limit
          分页限定查询全部

1. -- 标准语法
2. SELECT * FROM 表名;


查询部分

多个字段查询
1. -- 标准语法
2. SELECT 列名1,列名2,... FROM 表名;


去除重复查询

注意:只有全部重复的才可以去除
1. -- 标准语法
2. SELECT DISTINCT 列名1,列名2,... FROM 表名;




计算列的值(四则运算)

1. -- 标准语法
2. SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
3.
4. /*
计算列的值
标准语法:
SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
  如果某一列为null,可以进行替换
   ifnull(表达式1,表达式2)
  表达式1:想替换的列
  表达式2:想替换的值
*/
查询商品名称和库存,库存数量在原有基础上加10
但是 有商品的库存为 null  还会加 10 吗?


结果是不会


处理办法  进行 null值判断   如果查询到的值为 null  则先赋值为 0  然后进行运算


起别名

1. -- 标准语法
2. SELECT 列名1,列名2,... AS 别名FROM 表名;


起别名不加 AS 的效果一样


条件查询

条件分类
符号功能
> 大于
< 小于
>= 大于等于
<= 小于等于
= 等于
<> 或!= 不等于
BETWEEN ... AND ... 在某个范围之内(都包含)
IN(...) 多选一
LIKE 占位符模糊查询_单个任意字符%多个任意字符
IS NULL 是NULL
IS NOT NULL 不是NULL
AND 或&& 并且
OR 或|| 或者
NOT 或! 非,不是

条件查询语法

1. -- 标准语法
2. SELECT 列名FROM 表名WHERE 条件;
-- 标准语法
-- SELECT 列名FROM 表名WHERE 条件;


-- 查询库存大于20 的商品信息
SELECT * FROM product WHERE stock > 20;

-- 查询品牌为华为的商品信息
SELECT * FROM product WHERE brand  = '华为';

-- 查询金额在4000 ~ 6000 之间的商品信息
SELECT * FROM product WHERE price >= 4000 AND price <= 6000;
SELECT * FROM product WHERE price BETWEEN 4000 AND 6000;-- BETWEEN  区间函数

-- 查询库存为14、30、23 的商品信息
SELECT * FROM product WHERE stock = 14 OR  stock = 30 OR stock = 23;
SELECT * FROM product WHERE stock IN(14,30,23);

-- 查询库存为null 的商品信息
SELECT * FROM product WHERE stock IS NULL;

-- 查询库存不为null 的商品信息
SELECT * FROM product WHERE stock IS NOT NULL;

-- 查询名称以小米为开头的商品信息
SELECT * FROM product WHERE NAME LIKE '小米%';

-- 查询名称第二个字是为的商品信息
SELECT * FROM product WHERE NAME LIKE '_为%';
-- 查询名称为四个字符的商品信息
SELECT * FROM product WHERE NAME LIKE '____%';
-- 查询名称中包含电脑的商品信息
SELECT * FROM product WHERE NAME LIKE '%电脑%';



聚合函数

将一列数据作为一个整体,进行纵向的计算
聚合函数分类


聚合函数语法

1. -- 标准语法
2. SELECT 函数名(列名) FROM 表名[WHERE 条件];
-- 聚合函数语法
-- 1. -- 标准语法
-- 2. SELECT 函数名(列名) FROM 表名[WHERE 条件];

-- 计算product 表中总记录条数
SELECT COUNT(*) FROM product ;

-- 获取最高价格
SELECT MAX(price) FROM product ;

-- 获取最高价格的商品名称
SELECT NAME ,price FROM product WHERE price = (SELECT MAX(price) FROM product);

-- 获取最低库存
SELECT  MIN(brand) FROM product ;

-- 获取最低库存的商品名称
SELECT NAME ,brand FROM product WHERE brand = (SELECT MIN(brand) FROM product);

-- 获取总库存数量
SELECT SUM(stock) FROM product;

-- 获取品牌为苹果的总库存数量
SELECT SUM(stock) FROM product WHERE brand='苹果';

-- 获取品牌为小米的平均商品价格
SELECT AVG(price) FROM product WHERE brand='小米';

排序查询

排序分类
注意:多个排序条件,当前边的条件值一样时,才会判断第二条件


排序语法

1. -- 标准语法
2. SELECT 列名FROM 表名[WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;






分组查询

1. -- 标准语法
2. SELECT 列名FROM 表名[WHERE 条件] GROUP BY 分组列名[HAVING 分组后条件过滤] [ORDER BY 排序列名排序方式];








分页查询

1. -- 标准语法
2. SELECT 列名FROM 表名[WHERE 条件] GROUP BY 分组列名[HAVING 分组后条件过滤] [ORDER BY 排序列名排序方式] LIMIT 开始索引,查询条数;
3. -- 公式:开始索引= (当前页码-1) * 每页显示的条数
分页查询图解
总页


每页显示2 条数据
-- 每页显示2 条数据
        SELECT * FROM product LIMIT 0,2; -- 第一页开始索引=(1-1) * 2
        SELECT * FROM product LIMIT 2,2; -- 第二页开始索引=(2-1) * 2
        SELECT * FROM product LIMIT 4,2; -- 第三页开始索引=(3-1) * 2
        SELECT * FROM product LIMIT 6,2; -- 第四页开始索引=(4-1) * 2







约束

约束的概念和分类

约束的概念
对表中的数据进行限定,保证数据的正确性、有效性、完整性!
约束的分类
PRIMARY KEY 主键约束
PRIMARY KEY AUTO_INCREMENT 主键、自动增长
UNIQUE 唯一约束
NOT NULL 非空约束
FOREIGN KEY 外键约束
FOREIGN KEY ON UPDATE CASCADE 外键级联更新
FOREIGN KEY ON DELETE CASCADE 外键级联删除
主键约束

主键约束特点

1、主键约束包含:非空和唯一两个功能
2、一张表只能有一个列作为主键
3、主键一般用于表中数据的唯一标识
建表时添加主键约束

-- 标准语法
  CREATE TABLE 表名(
  列名数据类型PRIMARY KEY,
列名数据类型,
  ...
);


添加主键约束时  再添加 null 的数据会报错


正确添加方法


因为主键的唯一性  如果重复添加 会报错


主键不为重复添加成功


删除主键

1. -- 标准语法
2. ALTER TABLE 表名DROP PRIMARY KEY;




建表后单独添加主键

1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型PRIMARY KEY;




主键自动增长约束

建表时添加主键自增约束
  -- 标准语法
  CREATE TABLE 表名(
  列名数据类型PRIMARY KEY AUTO_INCREMENT,
  列名数据类型,
  ...
);




删除自动增长

1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型;
删除自增长后 无法添加  为 null 的数据


添加不为null 的数据后不报错


建表后单独添加自动增长

1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型AUTO_INCREMENT;


建表时添加唯一约束

  -- 标准语法
CREATE TABLE 表名(
  列名数据类型UNIQUE,
  列名数据类型,
  ...
);


添加数据


添加重复数据会报错


添加不重复数据


删除唯一约束

1. -- 标准语法
2. ALTER TABLE 表名DROP INDEX 列名;


建表后单独添加唯一约束

1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型UNIQUE;
添加约束后 如果添加重复元素会报错


非空约束

建表时添加非空约束
-- 标准语法
CREATE TABLE 表名(
列名数据类型NOT NULL,
列名数据类型,
...
);


添加为null的数据会报错


添加 不为 null 的数据正常


删除非约束

1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型;


建表后单独添加非空约束
1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型NOT NULL;

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表