Mysql基础知识以及Sql规范

Mysql数据库

  1. 初始化 MySQL 数据目录

    • 在首次安装 MySQL 后,需要初始化数据目录。这一步会创建系统表(如 mysql 数据库)和默认用户

      mysqld --initialize --user=mysql
      
      • --initialize:初始化数据目录
      • --user=mysql:指定运行 MySQL 服务的用户(通常是 mysql)
      • 初始化完成后,会在日志文件中生成一个临时 root 密码(通常在 /var/log/mysqld.log 或 /var/log/mysql/error.log 中)
      • 如果使用 --initialize-insecure,则不会生成 root 密码
  2. 修改mysql配置文件my.ini中的默认编码规则等

  3. 启动 MySQL 服务

    • Linux

      sudo systemctl start mysqld
      #停止服务
      sudo systemctl stop mysqld
      
    • Windows

      net start mysql
      #停止服务
      net stop mysql
      

    mysqld 是 MySQL 服务的名称(在某些系统上可能是 mysql)

    mysql服务的默认端口为3306

  4. 检查服务状态

    sudo systemctl status mysqld  #Linux 
    sc query mysql #windows
    
  5. 连接mysql

    mysql -uroot -P3306 -p
    #Enter password: 输入密码
    
  6. 修改用户密码

    ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
    

关系型数据库和非关系型数据库

关系型数据库

  • 数据模型:基于关系模型,数据以表的形式组织。

  • 表结构:

    • 表由行和列组成。
    • 行表示记录,列表示字段。
    • 表之间通过外键建立关系。
    • 示例:MySQL、Oracle、SQL Server、PostgreSQL
  • 结构化数据:数据必须符合预定义的表结构(Schema)。

  • 数据类型:支持严格的字段类型(如整数、字符串、日期等)。

  • 数据关系:通过外键维护表与表之间的关系

  • SQL(Structured Query Language):标准化的查询语言。支持复杂的查询操作(如 JOIN、GROUP BY、子查询等)

  • 读性能:适合复杂查询和数据分析。

  • 写性能:在高并发写入场景下性能可能受限

非关系型数据库

  • 数据模型:不基于关系模型,数据以键值对、文档、列族或图的形式存储。

  • 常见类型:键值存储:如 Redis、DynamoDB。文档存储:如 MongoDB、CouchDB。列族存储:如 Cassandra、HBase。图数据库:如 Neo4j、ArangoDB。

  • 灵活的数据结构:数据可以是半结构化或非结构化的。

  • 无固定模式:不需要预定义表结构,数据可以动态添加字段。

  • 数据关系:通常不支持复杂的关系,但图数据库除外

  • 无统一查询语言:每种 NoSQL 数据库有自己的查询语言或 API。查询功能通常较弱,不支持复杂的 JOIN 操作

  • 读性能:适合简单查询和高并发读取。

  • 写性能:在高并发写入场景下性能优异

Sql语言的规则规范

规则

  • 每个 SQL 语句以分号 (😉 结束

  • 关键字:SQL 关键字(如 SELECT, FROM, WHERE)通常不区分大小写。习惯上,关键字用大写,以提高可读性

  • 标识符:表名、列名等标识符是否区分大小写取决于数据库系统。例如,MySQL 在 Linux 下区分大小写,在 Windows 下不区分

  • 单行注释:使用 -- 或 #(MySQL 支持#)

  • 多行注释:使用 /* ... */

  • 字符串:必须用单引号 (') 括起来

    SELECT * FROM users WHERE name = 'John';
    
  • 标识符:如果标识符(如表名、列名)与关键字冲突或包含特殊字符,需要用反引号(`)括起来

    SELECT `user`, `from` FROM `my-table`;
    

命名规则

  • 数据库、表名不得超过30个字符
  • 必须只能包含A-Z,a-z,0-9,_和$字符
  • 可以数字开头
  • 数据库名称、表名、字段名中间不要包含空格
  • 不能重名
  • 保证字段名称和字段类型的一致性(跨表问题)

规范

  • SQL 关键字建议使用大写,以便与表名、列名等区分

  • SQL 语句中的空格和换行会被忽略,但合理使用可以提高可读性

  • 表名和列名使用小写字母,单词间用下划线 (_) 分隔

    SELECT user_name, created_at FROM user_logs;
    
  • 使用缩进和对齐使代码更易读

  • 避免使用 SELECT *,明确指定需要的列,避免查询不必要的数据

  • 当查询涉及多个表时,使用表别名简化代码

    SELECT u.user_id, o.order_id
    FROM users u
    JOIN orders o ON u.user_id = o.user_id;
    
  • 使用显式的 JOIN 语法,而不是隐式的逗号分隔

    -- 推荐
    SELECT u.user_id, o.order_id
    FROM users u
    JOIN orders o ON u.user_id = o.user_id;
    
    -- 不推荐
    SELECT u.user_id, o.order_id
    FROM users u, orders o
    WHERE u.user_id = o.user_id;
    
posted @ 2025-03-17 21:16  QAQ001  阅读(11)  评论(0)    收藏  举报