mysql day4:表操作,数据的增删改,使用视图
数据表存放位置:SHOW variables LIKE '%datadir%';
创建表(使用MySQL语句)
CREATE TABLE test
(
id int NOT NULL AUTO_INCREMENT,
Name char(50) NOT NULL ,
City char(20) NULL ,
Phone char(20) NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
- test:表名
- 括号中的每一行:列名 数据格式 设置(是否允许为空,是否自动编号AUTO_INCREMENT,是否有默认值DEFAULT)
- PRIMARY KEY:定义主键为某一列
- InnoDB:引擎名
更新表
ALTER TABLE test
- ADD 列名 列数据格式;
- DROP COLUMN 列名;
- ADD CONSTRAINT 外键名(通常为fk_列名_表名1_表名2的类似结构) FOREIGN KEY (外键列名) REFERENCES 外键原表名 (外键原列名)(即原表主键列名);
删除表:DROP TABLE 表名;
重命名表:RENAME TABLE 原表名 TO 新表名;
%——————————————————————————————————————————————————————————————%
插入数据:
INSERT INTO 表名(列的列表)
VALUES(数据列表);
- 数据列表的数据顺序和给出的列的列表对应
- 虽然列的列表可以省略,但是基于固定列次序的SQL语句是不安全的
- 对允许NULL值的列或者有默认值的列,可以在INSERT中省略
- 可以在一个VALUES子句后跟随以逗号分隔的多个数据列表,以达成一次插入多行的目的。
插入检索出的数据:
INSERT INTO 表名(列的列表)
SELECT 列的列表 FROM 另一表名;
- 列的列表中的列名不一定要相同,只需内容对应即可。
- 两表的结构应当相同,以保证导入顺利。
- 主键值的冲突会导致导入失败,应该在导入前加以区分或者利用AUTO_INCREMENT自动生成
- INSERT只需要SELECT的返回结果,因此在SELECT中使用之前学过的绝大多数子句都是合法的,例如WHERE和ORDER BY等
更新数据:
UPDATE 表名
SET 列名 = 新的数据值
WHERE 需要更新的行条件;
- 更新多个列时可以在SET后增加更新内容,以逗号分隔
- UPDATE子句如不以WHERE结束将更新整个表
- 在UPDATE中使用子查询是常用的筛选方式
- 若更新中出现问题,该次完成的所有其他更新也将失效,可以通过在UPDATE后加关键字IGNORE来实现。
删除数据:
若要删除某个列的某些或者全部数据,请使用UPDATE将要删除的数据置为NULL。
若要删除某些行或者所有行的全部数据:
DELETE FROM 表名
WHERE 要删除的行条件;
同样的,若不使用WHERE,将删除全部行,但不会删除表本身。若要更快的完成这一操作,可以使用TRUNCATE TABLE语句。
%————————————————————————————————————————————————————————%
使用视图
视图的层级和表相同,而区别是其中并不包含数据,而是包含了一个复杂联结的查询,可以认为是一个虚拟表。它起到了如下作用:
- 重用SQL代码
- 简化复杂操作,封装细节
- 使用表的某些组成部分而非整个表
- 保护数据,分离某些功能的访问权限
- 可以用于更改数据格式及表示
简而言之,视图的地位就像是数据库语言中的函数。
例如:
SELECT (列1),(列2),(列3) FROM (表1),(表2) WHERE 表1.主键=表2.外键;
这是联结章节常用的联结查询语句的一部分,经过视图的封装,它可以变成:
SELECT (列1),(列2),(列3) FROM 视图名;
而原始的两个表名,以及他们之间的联结关系都被隐藏。原语句中出现的其他子句将照常出现。
- 视图可以用CREATE VIEW 视图名 AS 原语句;的方式来创建
- SHOW CREATE VIEW 视图名可以查看对应的原语句
- DROP VIEW 视图名可以用于删除视图
- 更新视图时,可以先DROP再CREATE,也可以直接用CREATE OR REPLACE VIEW 来达到创建或替换的效果
视图可以用于格式化检索出的数据,只要将SELECT Concat的结果定义为一个视图;
视图可以用于过滤数据,只需要封装一个特定的WHERE子句即可;
视图还可以用于简化计算字段的使用,而隐藏计算字段的具体原理,同样只需要封装一个包含计算字段的SELECT语句。
通常,视图仅用于查询,而不进行更新。更新一个视图意味着更新其基表,而如果视图的原语句中包含信息的丢失(如分组,聚集函数,联结等),将导致无法通过更新的视图信息确定基表如何更新,这样的视图更新是非法的。故而通常不对视图使用UPDATE等语句,也不用其进行此类封装。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现