MySQL:表的约束和基本查询

表的约束

表的约束——为了让插入的数据符合预期。

表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key 。

空属性

两个值:null(默认的)和not null(不为空)

数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办 法参与运算。

默认约束:default  null

 默认值

默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候, 用户可以选择性的使用默认值。

 列描述

列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA 来进行了解。

zerofill

zerofill是一种数据库的格式化显示的约束。

int默认为11,int unsigned默认为10 

超过设置的长度就按正常显示,否则补0;

主键和唯一键约束

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个 主键;主键所在的列通常是整数类型。

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以 解决表中有多个字段需要唯一性约束的问题。

唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

主键和唯一键都不能重复,主键不能为空。

主键也可以是多个:复合主键 

mysql> create table tt14(

-> id int unsigned,

-> course char(10) comment '课程代码',

-> score tinyint unsigned default 60 comment '成绩',

-> primary key(id, course) -- id和course为复合主键

-> );

Query OK, 0 rows affected (0.01 sec)

自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

自增长的特点:

任何一个字段要做自增长,前提是本身是一个索引(key一栏有值

自增长字段必须是整数

一张表最多只能有一个自增长

 添加主键:alter table 表名 add primary key(列名);

 外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique 约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

 其中class为主表,stu为从表。

基础查询

修改记录

update 表名 set 列名=__  where_______

删除记录

delete from 表名 where___

主键 或者 唯一键冲突时更新

 替换

replace 和insert语法完全一样,只是会在冲突时把老数据替换掉。

select指定列查询 

查询结果去重

select  distinct _______

查询结果为表达式且有别名:

 where

比较运算符

NULL值无法用来比较

where  math=98 or math=99  等于 where math in(98,99) 

 模糊匹配:

order by

 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示

多字段排序,排序优先级随书写顺序

order by math desc, english asc, chinese asc;

limit

 update

UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]

将孙悟空同学的数学成绩变更为 80 分

UPDATE exam_result SET math = 80 WHERE name = '孙悟空';

Delete

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

truncate

TRUNCATE [TABLE] table_name

truncate会重置auto_increment,且这个操作不会被记录在日志。

表格去重

-- 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样

CREATE TABLE no_duplicate_table LIKE duplicate_table;

Query OK, 0 rows affected (0.00 sec) 

 -- 将 duplicate_table 的去重数据插入到 no_duplicate_table

INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;

Query OK, 3 rows affected (0.00 sec)

Records: 3 Duplicates: 0 Warnings: 0

-- 通过重命名表,实现原子的去重操作

RENAME TABLE duplicate_table TO old_duplicate_table, no_duplicate_table TO duplicate_table;

Query OK, 0 rows affected (0.00 sec)

-- 查看最终结果

SELECT * FROM duplicate_table;

+------+------+

| id | name |

+------+------+

| 100 | aaa |

| 200 | bbb |

| 300 | ccc |

+------+------+

3 rows in set (0.00 sec)

聚合函数

 group  by

在select中使用group by 子句可以对指定列进行分组查

select column1, column2, .. from table group by column;

having

having和group by配合使用,对group by结果进行过滤

SQL查询中各个关键字的执行先后顺序 from > on> join > where > group by > with > having > select > distinct > order by > limit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/29001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

尚硅谷大数据项目《在线教育之采集系统》笔记004

视频地址:尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P047 P048 P049 P050 P051 P052 P053 P054 P055 P056 P047 /opt/module/datax/job/base_province.json [atguigunode001 ~]$ hadoop fs -mkdir /base_province/2022-02-22 [atgu…

工厂方法模式-java实现

介绍 工厂方法模式,通过把工厂抽象为一个接口,这样当我们新增具体产品的时候,就只需要实现一个新的具体工厂类即可。一个具体工厂类,对应着一个产品。 请注意:在工厂方法模式中,一个具体工厂类只对应生产…

活动发布会邀请媒体6步走

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 邀请媒体参加活动发布会对信息的传播,企业品牌建设有诸多的好处,今天就与大家分享下邀请媒体参加活动报道的6个步骤: 1. 策划与准备: -明…

【Flutter】【packages】simple_animations 简单的实现动画

package:simple_animations 导入包到项目中去 可以实现简单的动画, 快速实现,不需要自己过多的设置 有多种样式可以实现[ ] 功能: 简单的用例:具体需要详细可以去 pub 链接地址 1. PlayAnimationBuilder PlayAnima…

勘探开发人工智能应用:人工智能概述

0 提纲 机器学习、深度学习、计算机视觉等技术已在勘探开发、油气生产、炼油炼化、经营管理等重点环节进行应用与推广。请思考: 输入:数据是什么(数字、文本、图)?如何理解数据?如何清洗数据?(需要专业领域知识)输出&…

实习碎碎念

话说实习一周多了,学到的比自学一个月都多~~~加油狗子你最棒!!! 环境搭建坑死了 SSM框架环境配置 Ideamavenjdktomcatnavicat https://www.cnblogs.com/seigann/p/14528551.htmlhttps://www.cnblogs.com/seigann/p/14528551.h…

模板初阶以及string类使用

模板初阶以及string类使用 模板的简单认识1.泛型编程2.函数模板模板的原理图函数模板格式函数模板实例化非模板函数和模板函数的匹配原则 3.类模板类模板的定义格式类模板的实例化 string1.string简介2.string常用的接口 题目练习1.字符串相加2.字符串里面最后一个单词的长度3.…

【瑞吉外卖】Git部分学习

Git简介 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种: 本地仓库:开发人员自己电脑上的Git仓库 远程仓库:远程服务器上的Git仓库…

CVE漏洞复现-CVE-2021-3493 Linux 提权内核漏洞

CVE-2021-3493 Linux 提权内核漏洞 漏洞描述 CVE-2021-3493 用户漏洞是 Linux 内核中没有文件系统中的 layfs 中的 Ubuntu over 特定问题,在 Ubuntu 中正确验证有关名称空间文件系统的应用程序。buntu 内核代码允许低权限用户在使用 unshare() 函数创建的用户命名…

线上电影购票选座H5小程序源码开发

搭建一个线上电影购票选座H5小程序源码需要一些基本的技术和步骤。以下是一个大致的搭建过程,可以参考: 1. 确定需求和功能:首先要明确你想要的电影购票选座H5小程序的需求和功能,例如用户登录注册、电影列表展示、选座购票、订单…

【Java可执行命令】(二十一)线程快照生成工具 jstack:帮助开发人员分析和排查线程相关问题(死锁、死循环、线程阻塞...)

Java可执行命令之jstack 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 使用步骤及技巧3.3 使用案例 4️⃣ 应用场景🌾 总结 1️⃣ 概念 jstack 命令是 Java Development Kit(JDK)中提供的一项诊断工具,用于生成Java虚拟…

WHQL认证中HCK和HLK的区别

开发者或硬件制造商要通过WHQL认证获得微软数字签名或是Windows徽标的使用权限,就需要使用WHQL认证的测试工具(HCK或HLK)对硬件设备或驱动程序进行测试。HCK和HLK其实是一个系列的测试工具,HCK和HLK的主要区别是用于测试不同Windo…

pytest测试框架之fixture测试夹具详解

fixture的优势 ​ pytest框架的fixture测试夹具就相当于unittest框架的setup、teardown,但相对之下它的功能更加强大和灵活。 命名方式灵活,不限于unittest的setup、teardown可以实现数据共享,多个模块跨文件共享前置后置可以实现多个模块跨…

JAVA SpringBoot 项目 多线程、线程池的使用。

1.1 线程: 线程就是进程中的单个顺序控制流,也可以理解成是一条执行路径 单线程:一个进程中包含一个顺序控制流(一条执行路径) 多线程:一个进程中包含多个顺序控制流(多条执行路径&#xff0…

天津农商银行智能加密锁管理工具常见问题

天津农商银行智能加密锁管理工具,在使用过程中,可能出现一些莫名的错误,针对亲身遇到的坑,分享给大家,以备不时之需。 一、转账业务导入文件中文汉字出现乱码,如下图。 原因是文件编码不正确,…

Java项目作业~ 创建基于Maven的Java项目,连接数据库,实现对站点信息的管理,即实现对站点的新增,修改,删除,查询操作

需求: 创建基于Maven的Java项目,连接数据库,实现对站点信息的管理,即实现对站点的新增,修改,删除,查询操作。 以下是站点表的建表语句: CREATE TABLE websites (id int(11) NOT N…

收钱吧与火山引擎VeDI合作一年后 有了哪些新变化?

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 收钱吧正在和火山引擎数智平台(VeDI)跑出一条业务提效新通路。 相关数据显示,收钱吧的日服务人次就近5000万,累计服务…

测评HTTP代理的透明匿名?

在我们日常的网络冒险中,你是否曾听说过HTTP代理的透明匿名特性?这些神秘的工具就像是网络世界中的隐身斗士,让我们能够在互联网的迷雾中保护自己的身份和隐私。那么,让我们一起揭开HTTP代理的面纱,探索其中的奥秘吧&a…

el-table实现指定列合并

table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素…

Qt多线程编程

本章介绍Qt多线程编程。 1.方法 Qt多线程编程通常有2种方法: 1)通过继承QThread类,实现run()方法。 2)采用QObject::moveToThread()方法。 方法2是Qt官方推荐的方法,本文介绍第2种。 2.步骤 1)创建Worker类 这里的Worker类就是我们需要…