mysql的DML进阶、分页查找、SQL约束及多表操作方法

mysql的dml进阶、分页查找、sql约束及多表操作方法

一. 什么是DML, 以及DML基本操作, 表的列和行的跟新操作

针对列进行修改操作

#首先简单的创建一个student表为后序操作做准备use test;create table student (id int,name varchar(8),age tinyint) engine = innodb default charset = utf8mb4;desc student;

mysql的DML进阶、分页查找、SQL约束及多表操作方法

添加新的列, 格式: alter table 表名 add 新列名 数据类型(长度);

alter table student add addr varchar(20);#新增一个addr列出来

修改列的数据类型(长度), 格式: alter table 表名 modify 列名 修改后的数据类型(长度);

alter table student modify addr varchar(15);#修改student表中addr列的数据类型 (长度修改)alter table student modify addr char(20);#修改student表中addr列的数据类型 (类型修改为char(20))

修改列的名称, 格式: alter table 表名 change 列名 新列名 新列名的数据类型(长度);

alter table student change addr stu_addr varchar(20);# change 相比 modify 而言功能更加强大可以修改列名字. # modify不可以修改列名

. 删除指定列, 格式: alter table 表名 drop 列名;

alter table student drop stu_addr;# 删除student表中的stu_addr列

针对上述对于表的列结构的修改操作而言都是不建议使用的,因为很多公司的数据库是特别的大的, 修改一列数据都不是一个小事情, 修改不好造成了数据丢失就糟了,

针对表的行,表记录的各项操作 (增删改查)

插入表记录

方式一, 对指定的字段插插入, 格式: insert into 表名(字段1, 字段2, …) values (值 1, 值2, …);             我称呼这种方式叫做指定字段的插入操作, 字段和赋值要一一对应

insert into student(id, name, age) values(1000, '张三', 18);# 向student表中插入一条id 为1000 name 为张三, age 18的记录
insert into student(id, name, age)values(1001, '李四', 20),(1002, '王五', 22),(1003, '胖子', 25);#还可以支持values后面跟上多条记录#每条记录之间使用,隔开

mysql的DML进阶、分页查找、SQL约束及多表操作方法

方式2, 对所有字段插入值, 格式: insert into 表名 values(值1, 值2, …);

就是说我们默认全部字段都顺序插入,可以不用写上字段

insert into studentvalues(1004, '李四他爸', 47),(1005, '王五它妈', 40),(1006, '胖子它老特', 20);#可以向这样不指定任何字段,默认顺序插入所有字段

mysql的DML进阶、分页查找、SQL约束及多表操作方法

小结插入操作注意事项:

值与字段必须对应, 个数相同, 类型相同

值的数据大小必须在字段的指定长度范围内

除了整数小数类型外, 其他字段类型的值必须使⽤引号引起来 (建议单引号)

如果要插⼊空值, 可以不写字段, 或者插入null

更新表记录

语法格式: update 表名 set 字段1=值, 字段2=值… where 条件;    

update student set name = '胖子他爹' where id = 1005;# 跟新student表中id = 1005这条记录的name为胖子他爹

mysql的DML进阶、分页查找、SQL约束及多表操作方法

update student set name = '我是你爸', age = 100 where id = 1005;# 跟新student表中id = 1005这条记录的name为我是你爸, age为100

小结跟新记录操作注意事项:

列名的类型与修改的值要一致

修改值时不能超过字段的长度范围

除了整数小数类型外, 其他字段类型的值必须使用引号扩起来

删除表记录

语法格式: delete from 表名 where 条件;

delete from student where id = 1005;# 从student 表中删除id=1005这条记录
delete from student where name = '胖子'# 从student 表中删除name=胖子这条记录

需要好好练习的是记录的增删改查操作,因为在数据库中有关特定记录的修改、删除、添加等操作非常常见

解决分页查找的问题

mysql的DML进阶、分页查找、SQL约束及多表操作方法

上面这个是什么东西?  相信喜欢搜索记录或者购物的各位并不陌生,   这种显示记录的方式就是分页显示记录   (分页查找)

The format for paging queries is: SELECT * FROM table_name LIMIT start_row, page_size;

#模拟这样一个场景, 每一页5条数据select * from student limit 0, 5;  # 第一页select * from student limit 5, 5;  # 第二页select * from student limit 10, 5; # 第三页

抛出问题,此时我们都知道了每一页的数据条数,页大小固定,问题是我们如果根据需要查询的页数确定  startRow?

-- 后台计算出页码、页数(页大小)-- 分页需要的相关数据结果分析如下,-- 注意:下列是伪代码不用于执行int curPage = 2; -- 当前页数int pageSize = 5; -- 每页显示数量int startRow = (curPage - 1) * pageSize; -- 当前页, 记录开始的位置(行数)计算

其实我们仅仅只是需要知道当前页数   (页数 – 1) * pageSize; 即可获知startRow

三. SQL约束详解

约束的定义

竟然需要学一下约束,首先我们先搞定啥叫约束,其实还蛮简单的,约束就是⼀种限制条件, 让你不能超出这个控制范围

而在数据库中的约束, 就是指 表中的数据内容 不能胡乱填写, 必须按照要求填写. 好保证数据的完整性与 安全性

主键约束 PRIMARY KEY 约束

啥是主键约束:不为空的唯一约束. 主键约束不为NULL, 且唯一标识一条记录, 每一个表几乎都必须存在这样一个约束条件

添加主键约束

方式1:创建表时,在字段描述处,声明指定字段为主键:

格式: 字段名 数据类型[长度] primary key;

create table user_table(id int primary key, #添加主键约束name varchar(10),age tinyint) engine = innodb charset = utf8mb4;

主键约束唯一标识记录, 且不可以为空

insert into user_tablevalues(1001, '翠花', 18);#插入第一条记录翠花是没有问题的insert into user_tablevalues(1001, '王五', 20);#插入这条记录应当是报错, 重复插入主键了# [Err] 1062 - Duplicate entry '1001' for key 'PRIMARY'# 重复加入1001 作为主键

mysql的DML进阶、分页查找、SQL约束及多表操作方法

主键约束不可以为空  (区别unique 主键)

insert into user_tablevalues(null, '大胖', 30);# 区别唯一约束, 主键约束不可以为null#[Err] 1048 - Column 'id' cannot be null

方式2:创建表时,在constraint约束区域,声明指定字段为主键

语法形式:   [constraint 名称] primary key (字段列表)

出现的必要是什么? 这种方式出现的必要就是可以添加联合主键, 具体联合主键的使用回在下文中的中间表处应用, 此处我们先获悉如何创建

create table persons (pid int,lastname varchar(255),firstname varchar(255),address varchar(255),constraint persons_pk primary key(lastname, firstname) #通过constraint 增添联合主键) engine = innodb default charset = utf8mb4;

思索一下为何需要出现联合主键这一约束,  主键必须是标识不同的记录, 有些时候存在这样一种情况,     我们需要用 姓名  +  性别, 来辨识不同的对象一样    (不巧存在男生女生都叫王玉杰的情况, 仅姓名无法区分, 此时可以联合其他字段共同构成主键来约束标识)

方式三:创建表之后,通过修改表结构,声明指定字段为主键:

格式: altertable 表名 add [ constraint 名称] primary key (字段列表)

alter table user_table add constraint name_id_pk primary key(name, id);# 向user_table表中增加一个name + id的联合主键

删除主键约束

格式: alter table 表名 drop primary key;

alter table user_table drop primary key;# 删除user_table表中的主键约束

自动增长列 (介绍主键约束如何离得开它)

我们通常希望在每次插⼊新记录时,数据库自动生成字段的值

又特别是主键字段, 如果仅作为标记记录,完全没必要我们设置值呀

我们可以在表中使用 auto_increment(自动增长列)关键字,自动增长列类型必须是整形,自动增长 列必须为键(通常是用于主键)

格式: 字段名 整数类型[长度][约束] auto_increment

create table test(id int primary key auto_increment,# 添加一个主键约束, 设置自动增长. 默认增长为1age tinyint,name varchar(20)) engine = innodb default charset = utf8mb4;
insert into test values(null, 18, '小呼噜');# 我们设置了主键自动递增可以不再需要传入主键字段# 或者主键传入null 他会自动设置从1开始默认增量1

mysql的DML进阶、分页查找、SQL约束及多表操作方法

亦或是 insert into 的时候不传入任何东西都OK, null也可以不用传入

mysql的DML进阶、分页查找、SQL约束及多表操作方法

不过如果想要同上述这般使用我们必须注意的就是要指定字段插入, 不然默认是三个都要给值, 我们指定插入字段的时候可以无需指定id,   有点像默认值

非空约束

NOT NULL 约束: 列不接受 NULL 值。 要求字段始终包含值。如果没有向字段添加值,则无法插入新记录或更新记录

添加非空约束

格式: 字段名 数据类型[长度] NOT NULL

drop table test;create table test(id int primary key auto_increment,name varchar(10) not null,#设置非null 插入数据不能传入nullage tinyint) engine = innodb auto_increment = 10 default charset = utf8mb4;# 我们还可以向这般指定auto_increment的值
insert test values(null, null, 28);# 会出错, 第二个字段增加了not null 约束# 传空会报错[Err] 1048 - Column 'name' cannot be null

mysql的DML进阶、分页查找、SQL约束及多表操作方法

删除非空约束  

格式: alter  table 表名 modify 字段名 数据类型[长度]

alter table test modify name varchar(10);# 非常简单的方式, 直接更改数据类型的不加null约束即可desc test;

mysql的DML进阶、分页查找、SQL约束及多表操作方法

唯一约束

unique 约束: 指定列的值 不能重复.

注意:

唯一性约束和主键约束都为列提供了独一无二的保证。PRIMARY KEY 是自动定义的 UNIQUE 约束。

每个表可以有多个 UNIQUE 约束,但是每个表只能有⼀个 PRIMARY KEY 约束。

UNIQUE 不限制 null 值 出现的次数

添加唯⼀约束

与主键添加方式相同,共有3种.  我在此处举几个例子就是

drop table test;create table test (id int unique,# 添加一个唯一约束name varchar(20) not null,age tinyint) engine = innodb default charset = utf8mb4;desc test;
insert into test values(null, '张三', 19);# 允许传入null  区别primary keyinsert into test values(1, '李四', 30),(1, '王五', 38);  #报错[Err] 1062 - Duplicate entry '1' for key 'id'

mysql的DML进阶、分页查找、SQL约束及多表操作方法

格式2: [constraint 名称] UNIQUE (字段)  对应primary key 方式2

格式3: ALTER TABLE 表名 ADD [CONSTRAINT 名称] UNIQUE (字段)  对比方式3

删除唯一约束, 方式一样跟刚刚删除主键约束

默认约束

default 约束: 用于指定字段默认值。如果插入记录时某些字段没有赋值,则会自动填充默认值

添加默认约束,在创建表时候添加 格式: 字段名 数据类型[长度] DEFAULT 默认值

CREATE TABLE persons ( pid INT, lastname VARCHAR(255), firstname VARCHAR(255), address VARCHAR(255) DEFAULT '香港' -- 添加默认约束)engine = innodb default charset = utf8mb4;
# 传入null 则会按照default 赋值insert into persons(pid, lastname, firstname) values(2, '德华', '刘');# 或者指定字段, default字段可以不用传入val

mysql的DML进阶、分页查找、SQL约束及多表操作方法

小结

关于表的列操作  (增删改查)  开头alter 关键字  后面add modify change drop

alter table 表名 add 列名 类型(长度)   新增一列

alter table 表名 modify 列名  oldtype   newtype  针对一列仅仅只做类型修改

alter table 表名 change  old列名  new列名  oldtype   newtype 针对一列可做类型 + 列明修改

alter table 表名 drop 列名;  针对一列做删除操作

关于表的记录操作 (增删改查)

insert into 表名(指定字段) values(指定值), (指定值);    指定插入字段值  (插入记录)

insert into 表名  values(所有字段顺序写入值);              按照建表字段顺序插入字段值

update 表名 set 字段 = 值 where 条件指定记录             更改记录

delete from 表名 where 条件指定记录                            从指定表中删除满足条件的记录

关于各种约束的学习

约束就是一种限制

主键约束  (相当于是 unique 约束 + 非 null约束的结合), 用来唯一标识表中的记录

unique 约束, 也是保持不可重复, 列字段值唯一, 但是允许为null

非 null 约束. 就是不允许为null 不可以传入null作为参数

默认约束, 如果传入null 就默认字段值为初始默认值

以上就是mysql的DML进阶、分页查找、SQL约束及多表操作方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/149821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
新浪博客提示系统繁忙怎么办
上一篇 2025年12月3日 03:49:38
勇者斗恶龙《全球使命3》新版本灭绝计划启动
下一篇 2025年12月3日 03:50:09

相关推荐

  • 如何限制Linux用户cron任务 /etc/cron.deny使用技巧

    如何限制Linux用户cron任务 /etc/cron.deny使用技巧如何限制Linux用户cron任务 /etc/cron.deny使用技巧如何限制Linux用户cron任务 /etc/cron.deny使用技巧如何限制Linux用户cron任务 /etc/cron.deny使用技巧

    要限制linux用户执行cron任务,可编辑/etc/cron.deny文件,每行添加一个需禁止的用户名,保存后立即生效;若需更细粒度控制,可使用pam_time模块;此外,还可通过sudoers文件、chroot环境、linux capabilities、apparmor或selinux等方法限制…

    2026年9月21日 用户投稿
    100
  • MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本

    MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本

    最小权限原则是mysql用户权限配置的核心,确保每个用户仅拥有必要权限以提升安全性与可维护性。1.明确需求:根据用户角色分配如只读、增删改查或结构修改权限;2.创建用户并编写sql脚本进行权限管理,替代手动输入命令,提高效率与一致性;3.使用sublime text等编辑器提升脚本编写效率,利用语法…

    2026年9月21日 用户投稿
    000
  • 音乐文件占用空间太多怎么办_音乐文件占用空间太多如何整理详细指南

    解决音乐文件占空间问题的关键是压缩与整理:先用软件或在线工具降低比特率压缩体积,再按场景分类、利用元数据自动归集,并通过听歌片段和BPM判断保留内容,避免重复与误删。 音乐文件占空间太多,核心解决办法就两条:一是压缩单个文件体积,二是通过有效分类管理提升使用效率。直接删歌不是长久之计,学会整理和优化…

    2026年9月21日
    000
  • 升级X86架构性能大提升!极空间Z2 Ultra图赏

    升级X86架构性能大提升!极空间Z2 Ultra图赏升级X86架构性能大提升!极空间Z2 Ultra图赏升级X86架构性能大提升!极空间Z2 Ultra图赏升级X86架构性能大提升!极空间Z2 Ultra图赏

    10月23日,极空间正式推出全新双盘位nas产品——极空间z2 ultra,官方售价为1899元,参与国家补贴后仅需1457元,性价比进一步提升。 此次发布的Z2 Ultra最大的亮点在于采用X86架构处理器,相较以往使用的ARM平台,性能实现飞跃式提升,运行速度显著加快。更重要的是,新架构对Doc…

    2026年9月21日 用户投稿
    200
  • 数据库分库分表(Sharding)策略

    在现代应用程序中,随着数据量的增长,单一数据库的性能和容量往往难以满足需求。这时,数据库分库分表(Sharding)策略就成了一个关键的解决方案。那么,如何设计和实现一个有效的分库分表策略呢?让我们深入探讨一下。 在我的职业生涯中,我曾多次参与大型项目的数据库优化,其中分库分表是常见的挑战之一。我记…

    2026年9月21日
    000
  • Linux目录结构学习常见问题汇总

    Linux目录结构学习常见问题汇总Linux目录结构学习常见问题汇总Linux目录结构学习常见问题汇总Linux目录结构学习常见问题汇总

    Linux只有一个根目录,所有设备挂载于此,形成统一树状结构。根目录下各路径分工明确:/bin和/sbin分别存放用户与管理员命令;/etc集中配置文件;/home为用户家目录;/var存储日志等动态数据;/tmp用于临时文件;/usr存放系统程序,/usr/local供手动安装软件;/dev包含设…

    2026年9月21日 用户投稿
    000
  • 事务隔离级别在mysql中如何应用

    MySQL提供四种事务隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ(默认)、SERIALIZABLE,依次增强数据一致性,分别用于平衡并发性能与脏读、不可重复读、幻读等问题;通过SELECT @@tx_isolation等命令可查看级别,S…

    2026年9月21日
    300
  • X旗下Grok上线即时语音搜索,挑战Google引领搜索新方向

    近日,x平台旗下的ai助手grok正式推出了“即时语音搜索”功能。用户现在可以通过语音直接提问,触发实时网页检索,并迅速获得整合后的精准答案。此举意在优化信息获取流程,推动人机交互向更自然、高效的方向演进。 该语音搜索模式实现了“即说即搜即答”的流畅体验。例如,当用户提出“星舰发射的具体时间是什么?…

    2026年9月21日
    100
  • mysql数据库和表的关系是怎样

    数据库是表的集合,一个MySQL数据库可包含多个表,表依赖数据库存在,需先创建数据库才能建表,如CREATE DATABASE school;USE school;CREATE TABLE students;数据库实现数据隔离与管理,不同项目使用不同数据库,便于组织与权限控制。 MySQL数据库和表…

    2026年9月21日
    000
  • Laravel应用的安全审计(Security Audit)方法

    进行安全审计对laravel应用至关重要,因为它能发现并修复安全漏洞,提升整体安全性和用户信任度。具体方法包括:1. 代码审查,确保无未过滤输入和弱密码;2. 配置文件安全性,保护敏感信息;3. 依赖管理,更新第三方包;4. 用户认证和授权,防止未授权访问;5. 日志和监控,检测异常行为。 在讨论L…

    2026年9月21日
    100
  • 有趣的操作系统:文件IO和网络IO

    一、从i/o开始 在学习和使用计算机的过程中,i/o(输入/输出)是不可避免的一个概念,指的是操作、程序或设备与计算机之间发生的数据传输过程。 对于计算机来说,I/O操作和计算处理是其两大核心任务,其中大部分时间都用于执行I/O操作。I/O操作包括硬件和软件两部分,即I/O设备和I/O子系统。 I/…

    2026年9月21日
    000
  • Laravel 8 登录后重定向到仪表盘的全面指南

    本文深入探讨了 Laravel 8 中用户登录后重定向到仪表盘的多种策略。我们将详细解析默认的重定向机制,包括 LoginController 和 RedirectIfAuthenticated 中间件,并重点介绍如何通过自定义登录逻辑实现精确的重定向控制,同时提供示例代码和常见问题排查建议,确保用…

    2026年9月21日
    000
  • Guava Multimap:高效获取并打印指定键的所有关联值

    guava multimap是处理一键多值映射关系的强大工具。要获取特定键的所有关联值,应直接使用其提供的`multimap#get(k)`方法。该方法会返回一个包含所有匹配值的`collection`,即使键不存在,也会返回一个空集合而非`null`,从而简化了值检索和空值处理逻辑,是比手动迭代键…

    2026年9月21日
    000
  • 控制台命令(Console Command)开发

    控制台命令是程序员日常工作中不可或缺的工具,它提高了开发效率并帮助理解和控制程序运行。1) 通过简单的文本输入,完成复杂任务,如文件管理和系统监控。2) 控制台命令可用于快速调试、测试代码和自动化重复工作。3) 开发控制台命令时需注意安全性和兼容性问题。4) 控制台命令可实现有趣功能,如监控服务器资…

    2026年9月21日
    100
  • 链路追踪(OpenTelemetry/Jaeger)集成

    要将opentelemetry和jaeger集成到java应用中,需按以下步骤操作:1.配置jaeger exporter,2.初始化opentelemetry,3.创建并管理span。通过这种方式,你可以有效地追踪和分析微服务间的调用链路,提升系统性能。 在现代微服务架构中,链路追踪已经成为诊断和…

    2026年9月21日
    000
  • mysql如何调整字符集和排序规则

    答案是调整MySQL字符集和排序规则需分层级操作:先修改数据库默认设置,再转换表和字段,最后配置服务器参数。具体步骤为:使用ALTER DATABASE更改数据库默认字符集;用ALTER TABLE CONVERT TO转换表中所有字符型字段;通过MODIFY修改特定字段的字符集;在my.cnf中设…

    2026年9月21日
    000
  • Maingear电脑黑屏问题如何修复?专业级主机BIOS设置方法详尽

    Maingear电脑黑屏问题通常由BIOS设置、硬件接触不良或显示输出配置引起。首先应尝试进入BIOS,检查并调整显卡输出模式为PCIe/PEG,确保未误设为集成显卡;排查PCIe插槽模式兼容性,必要时切换为Gen3或Auto;若启动异常,可尝试切换UEFI/Legacy模式或恢复BIOS默认设置(…

    2026年9月21日
    000
  • 实测!Sora 2长视频优势大,Vidu Q2细节处理更胜一筹

    近日,AI视频工具领域的竞争愈发激烈。OpenAI推出的Sora 2刚刚登顶美区App Store榜单,国产新秀Vidu Q2便携重磅升级版本强势入局,引发广泛关注。不少从事自媒体创作与影视剪辑的朋友都在思考:这两款AI视频生成器,究竟谁更胜一筹?出于好奇,我亲自上手实测了一番,发现两者之间的差异更…

    用户投稿 2026年9月21日
    000
  • Java Stream 高效分组计数并获取Top N元素

    本文深入探讨了如何利用java stream api对数据进行高效的分组计数,并从中提取出现频率最高的top n元素。文章首先介绍了一种简洁的基于全排序的实现方式,该方法适用于数据集较小或top n值接近总数的情况。随后,针对大数据量和小型top n场景下的性能瓶颈,文章详细阐述了如何通过自定义`c…

    2026年9月21日
    000
  • mysql安装后如何优化配置文件

    答案:优化MySQL配置需先定位配置文件,再根据硬件和业务调整内存、InnoDB、连接等核心参数。具体包括设置innodb_buffer_pool_size为物理内存50%~70%,合理配置日志参数与连接数,启用慢查询日志,并使用工具辅助调优,避免过度配置,确保稳定高效。 MySQL 安装后,优化配…

    2026年9月21日
    000

发表回复

登录后才能评论
关注微信