[24年单独笔记] MySQL 常用的 DML 命令

Work with MySQL < Frame_TABLE

续借 Frame 上文,接下来我们创建一份包含以下内容的 base.sql 文件进行教学。

sql 复制代码
# MySQL 应用命令文件

# 如果数据库存在则执行此命令
DROP DATABASE IF EXISTS maic;

CREATE DATABASE maic
CHARACTER SET = utf8mb4;

USE maic;

CREATE TABLE maic_user(
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    uid INT(12) NOT NULL UNIQUE,
    email VARCHAR(30) NOT NULL,
    pwd VARCHAR(20) NOT NULL,
    nick VARCHAR(10)
);

对MySQL进行导入初始化:

shell 复制代码
mysql -uroot -p123456 < ./base.sql

附加参数讲解:

  1. PRIMARY KEY(主键)
  2. NOT NULL (不允许内容为空)
  3. UNIQUE (内容的值只能出现一次)
  4. AUTO_INCREMENT (数值自动递增,仅限INT)

ℹ️ 值得注意的是,它顶多只能满足1,2级范式要求,如果你希望满足更高范式请参考下面内容!

以下二者均可以在 CREATE TABLE 中使用

设置联合主键(多主键)

sql 复制代码
CREATE TABLE xxx
(
    ...
    PRIMARY KEY(id,uid)
);

设置外键(从表)

sql 复制代码
CREATE TABLE xxx
(
    ...
    CONSTRAINT 约束名称,不能重复 FOREIGN KEY(外键列名,在当前表内) REFERENCES 关联表名(关联列名)   
);


# 建议使用 fk_ 进行开头
ALTER TABLE xxx
CONSTRAINT fk_l_t
FOREIGN KEY(外键列名) REFERENCES 关联表名(关联列名);

此外,还有一种方式进行附加

sql 复制代码
ALTER TABLE xx
ADD FOREIGN KEY(本表列名) REFERENCES yy(yy表列名);

这种方式不直接使用外键约束,而是通过在数据库层面上创建索引来模拟外键关联的效果。
REFERENCES 指向的是 主表

启用外键需要满足以下条件!

  1. InnoDB引擎需要启用!
  2. 类型长度相同
  3. 并且关联列必须是唯一索引(UNIQUE)或主键(PRIMARY KEY)

无论在何时何地,你必须遵守 SQL的编写规范性要求 ,例如属于 MySQL的官方命令 内容,均采用 大写。自定义的数据内容等采用小写,防止命令混淆!

创建一个用户,访问MySQL服务,避免权限管控问题。

如果使用的是 Linux类 系统,文件位于: /etc/my.cnf

sql 复制代码
# 创建一个asker用户,密码:123456
CREATE USER 'asker'@'localhost' IDENTIFIED BY '123456';

# 授予asker用户访问 maic数据库下所有表 的权限
GRANT ALL PRIVILEGES ON maic.* TO 'asker'@'localhost';

# 刷新权限配置
FLUSH PRIVILEGES;

# 检查权限是否正确
SHOW GRANTS FOR 'asker'@'localhost';

使用数据库管理数据有严禁更改数据结构的忌讳!在添加记录前,必须提前分配好字段!

以ASKER的身份登录MySQL:

shell 复制代码
mysql -uasker -p123456

⚠️需要注意的是,创建用户的权限无法访问 MySQL 和 SYS 这两个数据库

sql 复制代码
SHOW DATABASES;

USE maic;

# 修改表名称
ALTER TABLE maic_user
RENAME AS profile;

RENAME TABLE profile TO info;

此时,表 maic_user 名称则被修改为了 info,我们克隆一份表结构 (并非表数据)供日后还原:

sql 复制代码
CREATE TABLE profile
LIKE info;

如果希望完全复制一份表(包括数据):

sql 复制代码
CREATE TABLE profile
AS SELECT * FROM info;

至此,你应当学会了表结构的基本维护与运营。我们不推荐你一次性学完,请提取出符合你学习体系的相关知识!

相关推荐
智者知已应修善业10 分钟前
【51单片机2个外部中断切换LED花样】2024-1-3
c++·经验分享·笔记·算法·51单片机
真香号10 分钟前
记一次生产RocketMQ消息积压消费慢的排查与解决
数据库·rocketmq·java-rocketmq
8Qi816 分钟前
LeetCode 31:下一个排列(Next Permutation)—— 完整题解笔记 ✅
笔记·算法·leetcode·指针·思维·排列
数据库小学妹17 分钟前
国产数据库技术成熟度实测:从Oracle兼容到高可用,四个维度评估能不能上生产
数据库·经验分享·oracle·性能优化·dba
JdSnE27zv1 小时前
数据库性能优化三:程序操作优化
数据库·sql·性能优化
whyTeaFo1 小时前
MIT 6.1810: Lab traps: traps
笔记
小陈phd1 小时前
多模态大模型学习笔记(四十八)——从自然语言到 SQL:大模型时代结构化数据查询的技术革命与落地实践
笔记·sql·学习
AC赳赳老秦2 小时前
OpenClaw任务复盘自动化:统计每日完成工作、遗留问题,优化工作节奏
java·大数据·linux·运维·服务器·数据库·openclaw
流星白龙2 小时前
【MySQL高阶】20.InnoDB 磁盘文件
android·mysql·adb
AOwhisky2 小时前
学习自测(MySQL系列第一期、第二期)
linux·运维·数据库·学习·mysql·云计算