linux个人心得24 (mysql③,AI排版尝试)

一、MySQL 数据导入(mysql 客户端)

表格

操作场景 核心命令 关键说明
基本导入方式 1(重定向) mysql -u [用户名] -p[密码] [目标数据库名] < [文件名.sql] 最常用,直接执行.sql 文件,目标库需预先创建
基本导入方式 2(source) 1. mysql -u [用户名] -p2. USE [目标数据库名];3. source /完整路径/文件名.sql; 登录后执行,需写.sql 文件完整路径
导入到新建数据库 1. CREATE DATABASE new_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;2. mysql -u root -p new_database < mydatabase_backup.sql 先建库(指定字符集),再导入备份文件
导入全库备份文件 mysql -u root -p < all_databases_backup.sql 备份文件含 CREATE DATABASE 语句,无需指定目标库
从压缩包直接导入 `gunzip < mydatabase_backup.sql.gz mysql -u root -p new_database` 无需解压,通过管道直接导入,效率更高

二、MySQL 备份 & 导入最佳实践

表格

操作类型 命令示例 核心关键点
导出单个库 mysqldump -u user -p dbname > backup.sql 基础备份方式,仅导出指定库数据 + 结构
仅导出结构 mysqldump -u user -p --no-data dbname > schema.sql 只复制表结构,不含数据
生产环境备份 mysqldump -u user -p --single-transaction --routines dbname > backup.sql 保证 InnoDB 数据一致性,不锁表,同时导出存储过程 / 函数
备份并压缩 `mysqldump -u user -p dbname gzip > backup.sql.gz` 压缩后节省存储空间,建议生产环境使用
导入数据 mysql -u user -p dbname < backup.sql 目标数据库需预先创建,字符集需与备份文件匹配
从压缩包导入 `gunzip < backup.sql.gz mysql -u user -p dbname` 跳过解压步骤,直接导入,适合大文件

三、MySQL 创建表常用约束

表格

约束名称 关键字 核心作用 示例应用(employees 表)
主键约束 PRIMARY KEY 唯一标识每行记录,隐含 NOT NULL+UNIQUE,一张表仅一个主键 id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT
非空约束 NOT NULL 列值不能为 NULL,插入 / 更新时必须赋值 first_name VARCHAR(50) NOT NULL
唯一约束 UNIQUE 列值唯一(可多个 NULL),结合 NOT NULL 则无 NULL 且无重复 email VARCHAR(100) NOT NULL UNIQUE
默认值约束 DEFAULT 插入时未指定值则用默认值 hire_date DATE NOT NULL DEFAULT (CURRENT_DATE)
检查约束 CHECK 列值需满足指定条件(MySQL8.0.16 + 支持) salary DECIMAL(10,2) NOT NULL CHECK (salary >= 3000.00)
外键约束 FOREIGN KEY 关联主从表,保证引用完整性,支持级联更新 / 删除 CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE SET NULL ON UPDATE CASCADE

四、约束关联补充说明

表格

补充项 说明
AUTO_INCREMENT 非约束,是列属性,通常与主键搭配,插入时自动递增(仅 INT/BIGINT 类型可用)
ON DELETE SET NULL 外键规则:主表记录删除时,从表关联字段设为 NULL(需从表字段允许 NULL)
ON UPDATE CASCADE 外键规则:主表关联字段更新时,从表关联字段同步更新(级联更新)

五、示例表创建语句

sql

复制代码
-- 1. 创建部门表(主表)
CREATE TABLE departments (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL UNIQUE
);

-- 2. 创建员工表(含所有常用约束)
CREATE TABLE employees (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '员工ID, 主键, 自动递增',
    employee_number VARCHAR(10) NOT NULL UNIQUE COMMENT '员工编号, 必须提供且不能重复',
    first_name VARCHAR(50) NOT NULL COMMENT '员工的名字, 不能为空',
    last_name VARCHAR(50) NOT NULL COMMENT '员工的姓氏, 不能为空',
    email VARCHAR(100) NOT NULL UNIQUE COMMENT '电子邮箱, 不能为空且不能重复',
    phone_number VARCHAR(20) COMMENT '联系电话, 可以为空',
    hire_date DATE NOT NULL DEFAULT (CURRENT_DATE) COMMENT '入职日期, 不能为空, 默认为当前日期',
    salary DECIMAL(10, 2) NOT NULL CHECK (salary >= 3000.00) COMMENT '月薪, 不能为空, 且必须大于等于3000',
    department_id INT UNSIGNED COMMENT '所属部门ID, 外键',
    status VARCHAR(10) NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'on_leave', 'terminated')) COMMENT '员工状态, 默认为active',
    -- 表级别外键约束
    CONSTRAINT fk_department
    FOREIGN KEY (department_id)
    REFERENCES departments(id)
    ON DELETE SET NULL
    ON UPDATE CASCADE
);
相关推荐
黑牛儿3 小时前
MySQL负载均衡配置详细步骤(新手易操作版)
mysql·adb·负载均衡
csj503 小时前
安卓基础之《(25)—竖屏与横屏切换》
android
顾北川_野3 小时前
Android 隐藏桌面应用,指定应用显示;暗码输入显示所有应用,以及暗码方式触发
android
江不清丶3 小时前
深入剖析 MySQL 日志系统:Redo Log、Undo Log 与 Binlog 的协同工作原理
数据库·mysql·adb
csj504 小时前
安卓基础之《(26)—回到桌面与切到任务列表》
android
Grackers4 小时前
Android Perfetto 系列 7:MainThread 和 RenderThread 解读
android
whatever who cares4 小时前
java/android中单例模式详解
android·java
草莓熊Lotso4 小时前
【Linux系统加餐】 mmap 文件映射全解:从底层原理、API 到实战开发(含 malloc 模拟实现)
android·linux·运维·服务器·c语言·c++
peakmain94 小时前
CmComposeUI——基于 Kotlin Multiplatform Compose 的 UI 组件库
android