【MySQL】(三)SQL 基础操作之 DML 数据操纵语言

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【MySQL】(三)SQL 基础操作之 DML 数据操纵语言

DML操作


1.1添加

#insert
#1.给所有字段添加值
insert into person values(5,'李白',24,'155');
#2.部分字段添加值,值的顺序和前面字段的声明顺序必须一致
insert into person(id,age,phone) values(1,27,'158');
#3.添加三条记录
insert into person(id,age,phone) values(2,27,'157'),(3,25,'159'),(4,26,'156');
#4.表复制
  #创建一个和person结构相同的表
  create table person1 select *from person where 0=1;
  #插入person表所有数据到person1
  insert into person1 select *from person;


1.2修改

#修改:将电话号码为159的姓名改成杜甫
update person set sname=‘杜甫’ where phone=‘159’;


1.3删除

#删除
delete from person where id=2;
insert into person(id,sname,age) values(2,‘杜甫’,26);
delete、drop和truncate的区别
#删除整个表数据(一条一条的删),只与数据有关,与结构无关,不会重置自增
delete from person1;
#删除整个表的结构
drop table person1;
#从底层直接清除所有数据
truncate table person1;
创建学生表
CREATE TABLE `student`(
  stuId INT PRIMARY KEY AUTO_INCREMENT COMMENT '学生编号',
  stuName VARCHAR(25) COMMENT '学生姓名',
  stuPwd VARCHAR(50) COMMENT '学生密码',
  gender CHAR(2) DEFAULT '男'  COMMENT '性别',
  gradeId INT COMMENT '年级编号',
  phone VARCHAR(11) COMMENT '电话',
  email VARCHAR(25) COMMENT '邮箱',
  address VARCHAR(255) DEFAULT '地址不详' COMMENT '地址',
  identityCard VARCHAR(18) UNIQUE COMMENT '身份证号'
) COMMENT '学生表';


CHANGE: 更改字段信息时 并且可以改名 / MODIFY 只能改字段信息

ALTER TABLE student CHANGE identityCard identityId VARCHAR(18);


添加字段信息 出生日期

birthday/bornDate datetime COMMENT '出生日期'
ALTER TABLE student ADD bornDate datetime COMMENT '出生日期';


删除字段信息 删除出生日期

ALTER TABLE student DROP bornDate;


修改表名

ALTER TABLE student RENAME school_stu;


主键和外键<面试题>


主键: 能够唯一标识信息表中的一条数据的字段/字段组

ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY 表名(主键字段名);
ALTER TABLE school_stu ADD CONSTRAINT pk_stu_stuId PRIMARY KEY school_stu(stuId);


外键<面试题>


外键: 在一张表中的某个字段引用的数据来自另一张表的某个字段的信息。

主表: 它的主键一般是需要被从表引用 从表:在其中拥有外键 可以引用主表的主键信息。


grade主表 student从表


实现物理外键 通过SQL语句将外键绑定好 可以保证数据一致性

ALTER TABLE school_stu 
  ADD CONSTRAINT fk_stu_grade 
  FOREIGN KEY (gradeId)
  REFERENCES grade(gradeId);


为了能够方便我们进行数据表操作 在实际项目中一般不设置物理外键 而设置逻辑外键

数据添加 INSERT
INSERT INTO 表名[(要添加值的字段列表)] VALUES(字段值列表<必须按照前面的顺序赋值>);
INSERT INTO school_stu (stuId,stuName,stuPwd) VALUES(2,'Jack','root');


如果你省略了字段列表 则需要将所有字段进行赋值 且严格按照顺序

INSERT INTO school_stu VALUES(3,'Lucy','root','女',2,'12312','x','x','xxx','2019-05-23');


如果有些字段有默认(主键有自动递增) 则可以使用null来表示 / 你不需要去给此字段赋值

INSERT INTO school_stu (stuId,stuName) VALUES(null,'我是测试的');


同时添加多条数据

INSERT INTO school_stu(stuName) VALUES('Chris'),('Luck'),('努力过');


将school_stu的id和名称 赋值到stu表中的对应列,必须保证要添加数据的表提前存在!!!

INSERT INTO stu(stuId,stuName)
  SELECT stuId,stuName FROM school_stu;


数据修改 UPDATE

update 表名 set 列名1 = 值1,列名2 = 值2,...where 条件; 
  commit;    //commit要跟上


WHERE 在哪/哪里?

WHERE 后可接一系列的判断条件  id = xxx and xxx = xx or xxx = xx and  not xxx
UPDATE school_stu SET stuName = '李易峰' WHERE stuId = 7;
UPDATE school_stu SET stuName = '李元霸' WHERE gender = '男'


TRUNCATE 可以进行数据删除

TRUNCATE TABLE school_stu;


<面试题>DELETE TRUNCATE的区别


相同点: 都可以进行数据删除(全表删除)


不同点


  • DELETE可以进行条件删除 TRUNCATE只能进行全表删除
  • DELETE会保留自增序列 TRUNCATE除了表结构 其他数据全部清空 不会保留自增序列
  • TRUNCATE会结束事务而DELETE不会影响到事务


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
22天前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
16天前
|
存储 SQL 关系型数据库
MySQL底层概述—4.InnoDB数据文件
本文介绍了InnoDB表空间文件结构及其组成部分,包括表空间、段、区、页和行。表空间是最高逻辑层,包含多个段;段由若干个区组成,每个区包含64个连续的页,页用于存储多条行记录。文章还详细解析了Page结构,分为通用部分(文件头与文件尾)、数据记录部分和页目录部分。此外,文中探讨了行记录格式,包括四种行格式(Redundant、Compact、Dynamic和Compressed),重点介绍了Compact行记录格式及其溢出机制。最后,文章解释了不同行格式的特点及应用场景,帮助理解InnoDB存储引擎的工作原理。
MySQL底层概述—4.InnoDB数据文件
|
7天前
|
监控 关系型数据库 MySQL
MySQL和SQLSugar百万条数据查询分页优化
在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。掌握这些技巧后,您可以在处理海量数据时更加游刃有余。
36 9
|
7天前
|
SQL Oracle 关系型数据库
【YashanDB 知识库】如何将 mysql 含有 group by 的 SQL 转换成崖山支持的 SQL
在崖山数据库中执行某些 SQL 语句时出现报错(YAS-04316 not a single-group group function),而这些语句在 MySQL 中能成功执行。原因是崖山遵循 SQL-92 标准,不允许选择列表中包含未在 GROUP BY 子句中指定的非聚合列,而 MySQL 默认允许这种操作。解决办法包括:使用聚合函数处理非聚合列或拆分查询为两层,先进行 GROUP BY 再排序。总结来说,SQL-92 更严格,确保数据一致性,MySQL 在 5.7 及以上版本也默认遵循此标准。
|
8天前
|
存储 关系型数据库 MySQL
MySQL进阶突击系列(09)数据磁盘存储模型 | 一行数据怎么存?
文中详细介绍了MySQL数据库中一行数据在磁盘上的存储机制,包括表空间、段、区、页和行的具体结构,以及如何设计和优化行数据存储以提高性能。
|
18天前
|
SQL 存储 关系型数据库
MySQL原理简介—10.SQL语句和执行计划
本文介绍了MySQL执行计划的相关概念及其优化方法。首先解释了什么是执行计划,它是SQL语句在查询时如何检索、筛选和排序数据的过程。接着详细描述了执行计划中常见的访问类型,如const、ref、range、index和all等,并分析了它们的性能特点。文中还探讨了多表关联查询的原理及优化策略,包括驱动表和被驱动表的选择。此外,文章讨论了全表扫描和索引的成本计算方法,以及MySQL如何通过成本估算选择最优执行计划。最后,介绍了explain命令的各个参数含义,帮助理解查询优化器的工作机制。通过这些内容,读者可以更好地理解和优化SQL查询性能。
|
7天前
|
存储 SQL 关系型数据库
【YashanDB 知识库】MySQL 迁移至崖山 char 类型数据自动补空格问题
问题分类】功能使用 【关键字】char,char(1) 【问题描述】MySQL 迁移至崖山环境,字段类型源端和目标端都为 char(2),但应用存储的数据为'0'、'1',此时崖山查询该表字段时会自动补充空格 【问题原因分析】mysql 有 sql_mode 控制,检查是否启用了 PAD_CHAR_TO_FULL_LENGTH SQL 模式。如果启用了这个模式,MySQL 才会保留 CHAR 类型字段的尾随空格,默认没有启动。 #查看sql_mode mysql> SHOW VARIABLES LIKE 'sql_mode'; 【解决/规避方法】与应用确认存储的数据,正确定义数据
|
5月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
7月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
189 13
|
7月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
114 9