MySQL学习从零开始--第一部分-特性、安装配置及 DDL/DML/DQL 核心操作

  1. Mysql是干啥的,有什么作用?
  • MySQL是一个开源的关系型数据库管理系统(RDBMS),用于存储,管理和操作结构化数据。
  • 作用:存储网站或应用程序的数据,提供高效的数据读写功能,支持SQL查询语言进行数据操作
  1. Mysql有哪些常用版本,LTS版本是什么意思,为什么推荐使用LTS版本
  • 常用版本有MySQL5.7,MySQL8.0,MySQL 8.4 LTS
  • LTS版本官方长期维护,安全补丁及时更新,API/功能稳定,不会频繁变动
    • 推荐使用LTS原因:安全,稳定,向后兼容性好
  1. 有哪些可以替代MySQL的服务

    替代品特点
    MariaDBMySQL 的分支,完全兼容,更开放
    PostgreSQL更强功能(如事务、JSON、并发控制)
    SQLite嵌入式数据库,轻量级
    Oracle DB商业产品,功能强大,价格高
    SQL Server微软产品,适合 Windows 系统
  2. 任意方法安装LTS版本的Mysql
    -Ubuntu安装:

  •  sudo apt update
     sudo apt install wget lsb-release gnupg
     wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
     sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb  # 选择 8.4 LTS 版本
     sudo apt update
     sudo apt install mysql-server
    
  • 安装后查看状态:

    sudo systemctl status mysql
    
  1. mysql的配置文件在哪里,其默认端口是多少。
  • 配置文件路径:
    • /etc/mysql/my.cnf (Ubuntu)
    • /etc/my.cnf(CentOS)
  • 默认端口:3306
  1. 连接到Mysql,并查看mysql的版本
  • 连接:
sudo mysql -u root -p
  • 查看版本:
SELECT VERSION();

在这里插入图片描述

  1. Mysql中什么是库、表、字段,对比excel,库、表、字段相当于什么

    MySQL术语Excel类比
    数据库Excel文件
    每个工作表(Sheet)
    字段每列(Column)
    每一条记录(Row)
  2. 什么是字符集,myslq的默认字符集是什么,应该使用什么字符集
    字符集是字符与编码之间的映射规则,影响数据的存储与显示
    默认字符集:MySQL5.7:latin1,MySQL8.0+:utf8mb4
    utf8mb4:完全支持中文、Emoji 等字符

  3. 指定字符集utf8mb4来创建一个库

    CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    
  4. 设置root账号, 允许其远程登录

  • 登录数据库

    sudo mysql -u root -p
    
  • 允许远程访问:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
    CREATE USER 'root'@'%' IDENTIFIED BY '123456';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;#刷新权限让修改生效
    
  • 修改配置文件:

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    

    打开文件后:

    #有bird语句就修改,没有新增
    bind-address = 0.0.0.0
    
  1. 安装DBeaver(或其他工具)远程连接到上面的Mysql
  • DBeaver 是一个图形化数据库管理工具。

  • 启动 DBeaver

    创建新连接 → 选择 MySQL

    输入远程 IP、端口(3306)、用户名密码

    测试连接 → 成功即可使用

  • 遇到问题:连接测试出现Public Key Retrieval is not allowed,

    • 解决方法:在 “驱动属性” 或 “连接属性” 中(不同版本 DBeaver 位置可能略有差异 ),添加一个新的属性(或更改):
    • 名称allowPublicKeyRetrieval
    • true
      在这里插入图片描述
  1. Mysql有哪些常用字段类型,其占用的存储是多少字节

    类型含义存储字节
    INT整数4字节
    BIGINT大整数8字节
    FLOAT/DOUBLE浮点数4 / 8字节
    CHAR(n)定长字符串n字节
    VARCHAR(n)可变长字符串实际长度+1/2字节
    DATE日期(YYYY-MM-DD)3字节
    DATETIME日期+时间8字节
    TEXT长文本最大64KB
  2. 什么是自增字段,什么是主键,什么是唯一键,什么是联合主键

    • 自增字段:值自动递增(如ID)

      id INT AUTO_INCREMENT
      
    • 主键(Primary Key):唯一且非空,用于唯一标识每一行记录

    • 唯一键(Unique Key):唯一但可空,防止重复值

    • 联合主键:多个字段一起组成唯一标识

      PRIMARY KEY (字段1, 字段2)
      
  3. SQL语言的分类
    DDL:(数据定义语言),DML:(数据操作语言),DQL:(数据查询语言),TCL:(事务控制语言),DCL:(数据控制语言)

    • DDL:(数据定义语言)

      作用:定义或修改数据库对象结构,比如表、字段、索引等。

      常见语法:

      • CREATE:创建数据库、表等对象。
      • ALTER:修改表结构
      • DROP:删除表或数据库

      DDL语句执行后自动提交事务,不能回滚!

    • DML:(数据操作语言)

      作用:对表中的数据进行增、删、改

      常用命令:

    • INSERT:插入数据 (插入字符型,日期型数据应该包含在引号内)

      • 给指定的字段添加数据

        INSERT INTO 表名(字段名1,字段名2...) VALLUES(1,值2...);
        
      • 给全部字段添加数据

        INSERT INTO 表名 VALLUES(1,值2...);
        
      • 批量添加数据

        INSERT INTO 表名(字段名1,字段名2...) VALLUES(1,值2...),(1,值2...),(1,值2...);
        
        INSERT INTO 表名 VALLUES(1,值2...),(1,值2...);
        
    • UPDATE:修改数据

      • UPDATE 表名 SET 字段名1=值1,字段名2=值2,...[WHERE 条件];
        #修改语句的条件可有可无,如果没有,会对整张表的所有数据进行修改
        
    • DELETE:删除数据

      • DELETE FROM 表名 [WHERE 条件]
        #如果没有条件,则删除整张表的所有数据
        
        

    DML 语句默认在事务中执行,可以回滚

    • DQL:(数据查询语言)

      作用:查询数据(只读,不改数据)

    主要命令:

    • SELECT:查询数据
      SELECT 是最常用的 SQL 语句,但它不修改数据,所以属于查询语言。

    • 基本查询
      • #编写顺序
        SELECT	字段列表
        FROM	表名列表
        WHERE	条件列表
        GROUP BY	分组字段列表
        HAVING		分组后条件列表
        ORDER BY	排序字段列表
        LIMIT		分页参数
        

        DQL-执行顺序

        • FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT

        where与having之间区别:

        • 执行时机不同:where是分组之前进行过滤,having是分组之后对结果进行过滤
        • 判断条件不同:where不能对聚合函数进行判断,而having可以
      • 查询多个字段

        SELECT 字段1,字段2... FROM 表名;
        SELECT * FROM 表名;
        
      • 设置别名

        SELECT 字段1[AS 别名1],字段2[AS 别名2],... FROM 表名;
        #as可以省略
        
      • 去掉重复记录

        SELECT DISTINCT 字段列表 FROM 表名;
        
    • 条件查询
      • SELECT 字段列表 FROM  表名 WHERE 条件列表;
        
      • 条件

      • 比较运算符功能逻辑运算符功能
        >大于AND&&并且(多个条件同时成立)
        >=大于等于OR 或 ``或者(多个条件任意一个成立)
        <小于NOT!非,不是
        <=小于等于
        =等于
        <>!=不等于
        BETWEEN … AND …在某个范围之内(含最小、最大值)
        IN(…)IN 之后的列表中的值,多选一
        LIKE 占位符模糊匹配(_匹配单个字符,%匹配任意个字符)
        IS NULLNULL
      • 常见聚合函数

        函数功能
        count统计数量
        max最大值
        min最小值
        avg平均值
        sum求和
      • 用法

        SELECT 聚合函数(字段列表) FROM 表名;
        
        • 所有null值不参与聚合函数计算
    • 分组查询
      • 语法

        SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
        
      • 执行顺序:where > 聚合函数 > having

          分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
        
    • 排序查询
      SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2,排序方式2;
      

      排序方式

      • ASC:升序(默认)
      • DESC:降序

      如果是多字段排序,当第一个字段相同时,才会根据第二个字段排序

    • 分页查询
      SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数 ; 
      
      • 起始索引从0开始,起始索引 = (查询页码-1)* 每页显示记录数
      • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
      • 如果查询的是第一页,起始索引可省略,直接写limit 10
    • DCL:(数据控制语言)

      作用:管理用户权限(谁能干什么)

      常用命令:GRANT:授予权限 REVOKE:撤销权限
      注意:主机名可用%通配,该DCL命令DBA(数据库管理员)用的多

    • 用户管理
      • 查询用户

        USE mysql;
        SELECT * FROM user;
        
      • 创建用户

        CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
        
      • 修改用户密码

        ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
        
      • 删除用户

        DROP USER '用户名'@'主机名';
        
    • 权限控制

      授权时,数据库和表名可以使用* 通配符,代表所有

      • 查询权限

        SHOW GRANTS FOR '用户名'@'主机名';
        
      • 授予权限

        GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
        
      • 撤销权限

        REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
        
    • TCL:(事务控制语言)

      作用:控制事务的提交、回滚等操作

      常用命令:

      • START TRANSACTION:开始事务。
      • COMMIT:提交事务,永久保存。
      • ROLLBACK:回滚事务,撤销操作。
      • SAVEPOINT:设置保存点,回滚时可以只回滚到某一步。
  4. 创建一个表,字段有id,姓名、生日、性别。

    • 重新执行建表语句

      CREATE TABLE users (
          id INT AUTO_INCREMENT PRIMARY KEY,
          name varchar(50),
          birthday DATE,
          gender ENUM('男','女')
      );	#分号结尾
      
    • 不能直接新建表,要新建数据库(我没创建数据库直接创建表报错)

      CREATE DATABASE testdb
      CREATE DATABASE if not exists test	#如果没有test数据库,就创建数据库,如果有就不创建
      
    • USE 命令指定要操作的数据库,使用数据库

      USE testdb
      
    • 删除数据库

      DROP DATABASE [IF EXISTS] 数据库名;	#(如果存在)删除该数据库
      
    • 查询数据库

      SHOW DATABASES;		#查询所有数据库
      SELECT DATABASE();	#查询当前数据库
      

      建立一个基础表

      idnameagegender
      1
      2
      3

      在这里插入图片描述

      练习:

      CREATE TABLE emp(
      	id int,
      	worknumber varchar(10),
      	workname varchar(10),
      	gender char(1),
      	age tinyint unsigned,
      	idcard char(18),
      	entrydate date 
      ) comment '员工信息表';
      
    • DDL-表操作-查看表结构:

      DESC 表名
      
    • DDL-表操作-修改

      • 添加字段,例:

        ALTER TABLE emp add nickname varchar(20);
        
      • 修改字段:

        #修改数据类型
        ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
        #修改字段名跟字段类型
        ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度);
        
        #例:
        ALTER TABLE emp change nickname username varchar(30);
        
      • 删除字段:

        ALTER TABLE 表名 DROP 字段名
        
      • 修改表名:

        ALTER TABLE 表名 RENAME TO 新表名
        
      • 删除表

        ALTER TABLE [IF EXIST] 表名;
        
        #删除指定表,并重新创建该表(清空数据)
        TRUNCATE TABLE 表名;
        
  5. 如何对表进行增删改查(CRUD),命令是什么?

  • 增(INSERT)

    INSERT INTO users (name, birthday, gender)
    VALUES ('张三', '2000-01-01', '男');
    
  • 删(DELETE)

    DELETE FROM users WHERE id=1;
    
  • 改(UPDATE)

    UPDATE users SET name='李四' WHERE id=1;
    #如果没有WHERE指定范围,会默认全部范围
    
  • 查(SELECT)

    SELECT * FROM users;
    
  1. where在SQL语句中有什么作用,有人会在where后添加1=1或者1=0的筛选条件,有什么作用
  • WHERE 用于筛选符合条件的记录。
    • WHERE 1=1:恒为真,常用于动态拼接 SQL(可不断添加 AND 条件)
    • WHERE 1=0:恒为假,用于测试不返回任何结果
  1. 执行删除内容时忘记添加筛选条件会怎么样?如何防止这一操作

    • 风险:删除全部数据

      DELETE FROM users;  -- 删除全部数据
      

      防止方法:

      • 使用事务机制(BEGIN, ROLLBACK, COMMIT
      • 设置 SQL 安全模式(开启 safe-updates
      • DBeaver 中启用 “无 WHERE 不允许执行” 选项
  2. 往此表中插入3条数据,修改每条数据的一些内容,通过查询语句获取全部数据,最后删除前两条数据

    -- 插入
    INSERT INTO users (name, birthday, gender) VALUES
    ('张三', '2000-01-01', '男'),
    ('李四', '1999-05-20', '女'),
    ('王五', '2001-12-12', '男');
    
    -- 修改(举例:改名字)
    UPDATE users SET name='张小三' WHERE id=1;
    UPDATE users SET gender='女' WHERE id=3;
    
    -- 查询所有
    SELECT * FROM users;
    
    -- 删除前两条
    DELETE FROM users WHERE id IN (1, 2);
    
    
  • 使用事务机制(BEGIN, ROLLBACK, COMMIT
    • 设置 SQL 安全模式(开启 safe-updates
    • DBeaver 中启用 “无 WHERE 不允许执行” 选项
  1. 往此表中插入3条数据,修改每条数据的一些内容,通过查询语句获取全部数据,最后删除前两条数据
    -- 插入
    INSERT INTO users (name, birthday, gender) VALUES
    ('张三', '2000-01-01', '男'),
    ('李四', '1999-05-20', '女'),
    ('王五', '2001-12-12', '男');
    
    -- 修改(举例:改名字)
    UPDATE users SET name='张小三' WHERE id=1;
    UPDATE users SET gender='女' WHERE id=3;
    
    -- 查询所有
    SELECT * FROM users;
    
    -- 删除前两条
    DELETE FROM users WHERE id IN (1, 2);
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值