Bootstrap

2.1.1 MySQL基础&SQL入门,数据库的增删改查, 数据表的增删改查, 数据的增删改查

目录

MySQL基础&SQL入门

1. 数据库的基本概念

2. MySQL的安装及配置

3. SQL(重点)

3.1 SQL的概念

3.2 SQL通用语法

3.3 SQL的分类

3.4 DDL操作, 数据库

3.4.1 创建&查询

3.4.2 修改&删除

3.5 DDL 操作 数据表

3.5.1 MySQL常见的数据类型

3.5.2 创建表&查看表

3.5.4 删除表

3.5.5 修改表

3.6 DML 操作表中数据

3.6.1 插入数据

3.6.2 更改数据

3.6.3 删除数据

3.7 DQL 查询表中数据

3.7.1 准备数据

3.7.2 简单查询

3.7.3 条件查询

                                                     

 

MySQL基础&SQL入门

1. 数据库的基本概念

a. 数据库(DataBase) 就是存储和管理数据的仓库

b. 其本质是一个文件系统, 还是以文件的方式,将数据保存在电脑上

   

2. MySQL的安装及配置

3. SQL(重点)

3.1 SQL的概念

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

3.2 SQL通用语法

3.3 SQL的分类

 

3.4 DDL操作, 数据库

/*
    对数据库操作的分类包含
        CRUD
        C create 创建
        R retrieve 查询
        U update 修改
        D delete 删除
        使用数据库
*/

 

3.4.1 创建&查询

/*
    创建数据库 方式1: 指定名称的数据库
    latin1 编码,很可能出现乱码
*/
CREATE DATABASE db1;

/*
    指定字符集的方式创建数据库
    一般都指定为 utf8,与Java中的编码保持一致
*/
CREATE DATABASE db1_1 CHARACTER SET utf8;

/*
    查看数据库
*/
-- 切换数据库语句
USE db1_1;

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

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

 

3.4.2 修改&删除

-- 修改数据库的字符集
-- 语法格式 alter database 数据库名 character set utf8;
ALTER DATABASE db1 CHARACTER SET utf8;

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

 

 

3.5 DDL 操作 数据表

3.5.1 MySQL常见的数据类型

    Mysql中的常见数据类型
    int 整型
    double  浮点型
    varchar 字符串型
    date 日期类型       -- 只显示年月日 没有时分秒 yyyy-MM-dd
    datatime 年月日时分秒  -- yyyy-MM-dd HH:mm:ss
    char  -- 在MySQL中也代表字符串
注意:MySQL中的 char类型与 varchar类型,都对应了 Java中的字符串类型,区别在于:

char类型是固定长度的: 根据定义的字符串长度分配足够的空间。
varchar类型是可变长度的: 只使用字符串长度所需的空间
    
    比如:保存字符串 "abc"
        x char(10) 占用10个字节
        y varchar(10) 占用3个字节

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

 

3.5.2 创建表&查看表


    创建表的语法格式
        create table 表明(
            字段名称 字段类型(长度),
            字段名称2 字段类型,
            字段名称3 字段类型      -- 最后一个字段不要加逗号
        );
-- 创建商品分类表
/*
    表名 category
        cid int 分类id
        cname varchar 分类的名称
*/

-- 选择要使用的数据库
USE db1;

-- 创建分类表
CREATE TABLE category(
    cid INT,
    cname VARBINARY(20)
);

-- 创建测试表
/*
    表名 test1
        tid int
        tdate date
*/
CREATE TABLE test1(
    tid INT,
    tdate DATE
);

-- 快速创建一个表结构相同的表 (复制)
-- 语法结构 create table 新表名称 like 旧表名称

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


-- 查看表结构
DESCRIBE test1;
DESC test2;

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

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

-- 查看表结构
DESC category;

 

3.5.4 删除表

/*
    表的删除
        语法格式
            drop table 表名; 从数据库中永久的删除一张表
            drop table if exists 表名;  --判断表是否存在,如果存在就删除, 不然就不执行
*/
-- 删除 test1表
DROP TABLE test1; -- 表不存在时会报错

-- 使用先判断后删除的形式
DROP TABLE IF EXISTS test2; -- 表不存在时警告`db1`

 

3.5.5 修改表

/*
    修改表的名称
    ...字符集
    ...某一列(数据类型, 名称, 长度)
    向表中添加一列
    删除表中的一列
*/
-- 修改表的名称 关键字:rename to
-- 语法格式: rename table 旧表名 to 新表名
RENAME TABLE category TO category1;

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

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

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

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

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

 

3.6 DML 操作表中数据

3.6.1 插入数据

/*
    增加
        语法格式: insert into 表名 (字段名1,字段名2,...) values(字段值1,字段值2,...)
*/
/*
表名: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 插入全部字段 将所有字段名都写出来
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,'man','花果山');    -- 报错

    -- 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); 

 

3.6.2 更改数据

/*
    修改操作
        语法格式1: update 表名 set 列名 = 值
        语法格式2: 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;

 

3.6.3 删除数据

/*
    删除
        语法格式1: delete from 表名;
        语法格式2: delete from 表名 where 条件表达式;
*/
-- 删除 sid为6的数据
DELETE FROM student WHERE sid = 6;

-- 删除所有数据
DELETE FROM student;


-- 删除所有数据的方式有两种
    -- 1, delete from 表;   -- 不推荐,对表中数据逐条删除,效率低
    -- 2, truncate table 表;  -- 推荐, 删除整张表, 然后创建一个一模一样的新表
    
    
INSERT INTO student VALUES(1,'孙悟空',20,'男','花果山');
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
/*
表名 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',财务部);

 

3.7.2 简单查询

/*
    DQL 
        简单查询
            select 列名 from 表名;
            select 列名 as 别名 from 表名;
            select distinct 列名 from 表名;
            select 数据列名+1000 from 表名;
*/
-- 查询emp表中的所有数据
SELECT * FROM emp;  -- *表示所有的列

-- 查询所有数据, 只显示 id和 name
SELECT * FROM emp;  -- 先这样写 
SELECT eid, ename FROM emp;

-- 查询所有数据, 然后给列明改为中文
SELECT * FROM emp;

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


-- 查询一共有几个部门
SELECT dept_name FROM emp;

-- 去重操作 关键字: distinct
SELECT DISTINCT dept_name FROM emp;

-- 将员工薪资数据加1000 进行展示
SELECT ename, salary+1000 AS salary FROM emp;


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

 

3.7.3 条件查询

/*
    条件查询
        语法格式: select 列名 from 表名 where 条件表达式
        
        比较运算符
            >  <  <=  >=  =  <>  !=
            BETWEEN ...AND...
            IN(集合)
            LIKE '%张%'
            IS NULL
        
        逻辑运算符
            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的所有员工信息
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
-- 方式2, 使用 in() 匹配括号中的参数
SELECT * FROM emp WHERE salary IN (3600,7200,20000);

 

/*
    like '%精%' 
        % 通配符, 表示任意多个字符串    --'%精%'
        _ 通配符, 表示一个字符     -- '_精'    
*/
-- 查询含有'精'字的所有员工信息
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 IS NOT NULL;


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

 

;