数据库基础(lab1:初始数据库)

数据库基础知识学习

(头歌实践平台)

lab1:初始数据库

一、数据库 (Database) 操作

  1. 连接数据库

    • 在命令行中连接到MySQL服务器。
    • 语法:mysql -u用户名 -p密码 -h主机地址
    • 示例:mysql -uroot -p123123 -h127.0.0.1
  2. 创建数据库

    • 创建一个新的数据库。数据库名区分大小写。
    • 语法:CREATE DATABASE 数据库名;
    • 示例:CREATE DATABASE MyDb;
  3. 查看所有数据库

    • 列出MySQL服务器上所有的数据库。
    • 语法:SHOW DATABASES;
  4. 选择数据库

    • 在进行表操作前,需要先指定要操作的数据库。
    • 语法:USE 数据库名;
    • 示例:USE MyDb;

二、表 (Table) 操作

  1. 创建表

    • 在当前选择的数据库中创建一个新表。
    • 语法:
      CREATE TABLE 表名 (
          字段名1 数据类型 [约束],
          字段名2 数据类型 [约束],
          ...
      );
      
    • 示例:
      CREATE TABLE t_user (
          id INT,
          username VARCHAR(32),
          password VARCHAR(32)
      );
      
  2. 查看表结构

    • 显示表的字段、数据类型等详细信息。
    • 语法:DESC 表名;DESCRIBE 表名;
    • 示例:DESC t_user;
  3. 删除表

    • 从数据库中永久删除一个表。
    • 语法:DROP TABLE 表名;

三、常用约束 (Constraints)

约束用于保证表中数据的完整性和准确性。

  1. 主键约束 (PRIMARY KEY)

    • 作用:唯一标识表中的每一条记录。主键列的值必须是唯一的且不能为NULL。
    • 方式一:定义列时指定
      CREATE TABLE t_user1 (
          userId INT PRIMARY KEY,
          name VARCHAR(32)
      );
      
    • 方式二:定义完所有列后指定
      CREATE TABLE t_user1 (
          userId INT,
          name VARCHAR(32),
          PRIMARY KEY(userId)
      );
      
    • 联合主键:将多个字段组合成一个主键。
      CREATE TABLE t_user2 (
          name VARCHAR(32),
          phone VARCHAR(11),
          PRIMARY KEY(name, phone)
      );
      
  2. 外键约束 (FOREIGN KEY)

    • 作用:保持数据的一致性,确保一个表中的字段值必须在另一个表的主键中存在。
    • 语法CONSTRAINT 外键名 FOREIGN KEY (本表字段) REFERENCES 主表名(主表主键字段)
    • 示例
      -- 主表
      CREATE TABLE t_dept (
          deptId INT PRIMARY KEY,
          name VARCHAR(22)
      );
      -- 从表,deptId是外键
      CREATE TABLE t_emp (
          id INT PRIMARY KEY,
          name VARCHAR(22),
          deptId INT,
          CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES t_dept(deptId)
      );
      
  3. 唯一约束 (UNIQUE)

    • 作用:确保列中的所有值都是唯一的,但允许有一个NULL值。
    • 语法字段名 数据类型 UNIQUE
    • 示例
      CREATE TABLE t_dept(
          id INT PRIMARY KEY,
          name VARCHAR(22) UNIQUE
      );
      
  4. 非空约束 (NOT NULL)

    • 作用:确保列不能存储NULL值。
    • 语法字段名 数据类型 NOT NULL
    • 示例
      CREATE TABLE t_dept(
          id INT PRIMARY KEY,
          name VARCHAR(22) NOT NULL
      );
      
  5. 默认约束 (DEFAULT)

    • 作用:为列设置一个默认值。
    • 语法字段名 数据类型 DEFAULT 默认值
    • 示例
      CREATE TABLE t_emp(
          id INT PRIMARY KEY,
          sex VARCHAR(2) DEFAULT '男'
      );
      
  6. 自增 (AUTO_INCREMENT)

    • 作用:当插入新记录时,自动为该字段生成一个唯一的、递增的数字。通常用于主键。
    • 语法字段名 INT PRIMARY KEY AUTO_INCREMENT
    • 示例
      CREATE TABLE t_tmp (
          id INT PRIMARY KEY AUTO_INCREMENT,
          name VARCHAR(32)
      );
      

组合使用示例:

CREATE TABLE t_user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(32) NOT NULL UNIQUE,
    sex VARCHAR(4) DEFAULT '男'
);

四、我遇到的问题与解决方案

1. 语法错误:ERROR 1064 (42000): You have an error in your SQL syntax

场景一:创建表时缺少 TABLE 关键字

  • 错误代码:
    create t_user1( ... );
    
  • 原因: CREATE 语句后面必须跟上要创建的对象类型,如 TABLEDATABASE 等。
  • 正确写法:
    CREATE TABLE t_user1( ... );
    

场景二:设置字符集时语法错误

  • 错误代码:
    CREATE TABLE t_user (
        ...
    ) default charset-utf8;
    
  • 原因: 设置字符集时,关键字 charset 和字符集名称之间应该用等号 = 连接,而不是连字符 -
  • 正确写法:
    CREATE TABLE t_user (
        ...
    ) DEFAULT CHARSET=utf8;
    
  • 推荐: 现代应用建议使用 utf8mb4 字符集以支持 emoji 等4字节字符。
    CREATE TABLE t_user (
        ...
    ) DEFAULT CHARSET=utf8mb4;
    

2. 操作错误:ERROR 1046 (3D000): No database selected

  • 原因: 在执行创建表 CREATE TABLE 等需要数据库上下文的操作之前,没有使用 USE 命令指定要操作的数据库。
  • 解决方案:
    1. 先选择数据库,再执行操作。
      -- 1. 选择数据库
      USE MyDb;
      -- 2. 创建表
      CREATE TABLE t_user1 ( ... );
      
    2. 如果数据库不存在,需要先创建。
      CREATE DATABASE MyDb;
      USE MyDb;
      CREATE TABLE t_user1 ( ... );
      

3. 概念理解:外键命名解析 (如 fk_emp_dept1)

外键的名称是自定义的,但遵循一定的命名规范可以大大提高可读性。

  • 常见格式: fk_从表名_主表名_序号
  • 示例解析: fk_emp_dept1
    • fk: Foreign Key 的缩写,表明这是一个外键约束。
    • emp: 从表名(t_emp)的简写。
    • dept: 主表名(t_dept)的简写。
    • 1: 序号,当两个表之间有多个外键时用于区分。
  • 为什么是 emp 而不是 t_emp?
    • 这是一种常见的简化约定,为了让名称更简洁,去掉了如 t_tbl_ 等无实际业务含义的表前缀。这并非强制规则,关键在于团队内部保持命名风格统一。
posted @ 2025-11-11 11:31  yesno233233  阅读(22)  评论(0)    收藏  举报