MySQL的表的约束以及查询

本篇文章继续给大家梳理MySQL的操作

目录

表的约束

空属性

默认值

列描述

0填充

主键

主键常识

添加主键

删除主键

复合主键

自增长

唯一键

外键

单/多行输入与全/指定列的插入

全列输入

单行输入

多行插入

指定列插入

单行输入

多行插入

插入否则更新

替换

查询

全列查询

指定列查询

结果去重

where条件

比较运算符

函数

日期函数

字符串函数

数学函数

多表查询

子查询

多行子查询

多列子查询

合并查询

union


表的约束

正真约束字段的是数据类型,但是数据类型类型约束很单一,因此需要一些额外的约束,来保证数据的合法性

空属性

首先关键字是null,它表示的是空,not null表示的是非空

创建表中,可以在字段的数据类型后面跟上这个关键字,在插入数据时就会起到约束作用

样例:

当然啦,上面这个是在Linux中的展示。什么,你说你想看在MySQL中的呀,行吧行吧,满足你的愿望

其实在大体上都是与Linux中的差不多的,那么这个是非空的例子,相信大家看完这个例子就算是设置为空属性的也可以无师自通了

默认值

关键字:default

用法:跟在字段的数据类型后面

基本语法:default 内容 这里稍微举个例子:默认值为数字,default 0 默认值为字符,default 'a'

样例:

列描述

关键字:comment

用法:跟在字段的数据类型后面

基本语法:comment '内容'

样例:

这里说一下,这个comment与c/c++,java,python中的注释很像都是给程序员看的,在查询表的时候不会被展示出来

0填充

关键字:zerofill

用法:跟在字段的数据类型后面

样例:

最后的结果图也就成了这样

从图中我们可以看到字段a后面有zerofill因此有了0填充,而b没有zerofill,所以只输出了2

主键

关键字:primary key

主键常识

用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个

主键所在的列通常是整数类型。

主键对应的字段中不能重复,一旦重复,操作失败。

添加主键

当表创建好以后但是没有主键的时候,可以再次追加主键

基本语法:

案例:

删除主键

基本语法:alter table 表名 drop primary key;

复合主键

基本语法及案例:

自增长

关键字:auto_increment

理解性记忆:auto在c++中是自动判断类型,increment是增长的意思,它俩由于在意思上表达有点远因此需要一座桥将它俩连接到一起,于是就有了自增长

什么是自增长?

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

特点:

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

  2. 自增长字段必须是整数

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

唯一键

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

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

主键和唯一键的区别:

我们可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息 出现重复。

举个简单的例子:

假设一个场景, 比如在公司,我们需要一个员工管理系统,系统中有一个员工表,员工表中有两列信息,一个身份证号码,一 个是员工工号,我们可以选择身份号码作为主键。 而我们设计员工工号的时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司的业务上不能重复,我们设计表的时候,需要这个约束,那么就可以将员工工号设计成为唯 一键。

当然啦这个例子也是借鉴了b站的一位up主的讲解。

唯一键的使用:

外键

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

基本语法:foreign key (字段名) references 主表(列)

单/多行输入与全/指定列的插入

全列输入

单行输入

语法:insert into 表名 value(内容);

多行插入

语法:insert into 表名 values(内容),(内容),(内容);

指定列插入

单行输入

insert into 表名(列名)value(内容);

多行插入

insert into 表名 values(内容),(内容),(内容);

插入否则更新

INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...

替换

基本语法:replace into students(sn,name) values(内容);

查询

全列查询

语法:select* from 表名;

指定列查询

语法:select 列名 from 表名;

结果去重

关键字:distinct

语法:select distinct 列名 from 表名;

where条件

比较运算符

逻辑运算符

函数

日期函数

字符串函数

数学函数

多表查询

select ename, sal,dname from EMP, DEPT where EMP.deptno=DEPT.deptno and DEPT.deptno =

// 列名 表名 条件

10;

注意:当需要拿出一个表中的某一列进行与另一个表中的某一列进行比较时

语法:表名.列名

子查询

样例:

select empno,ename from emp where emp.empno=(select mgr from emp where

ename='FORD');

基本语法:select 列名 from 表名 where 列名 = (select 列名 from 表名)

差不多是这样的意思 ,总之,子查询的本质是select语句中又包含了一个select语句

多行子查询

多列子查询

样例:

select ename from EMP where (deptno, job)=(select deptno, job from EMP where ename='SMITH') and ename <> 'SMITH';

where语句内的解释:

where (deptno, job)=(select deptno, job from EMP where ename='SMITH') and ename <>

列名 子查询

'SMITH';

当子查询返回的deptno和job与括号内的deptno和job相等

合并查询

为了合并多个select的执行结果,可以使用集合操作符 union,union all

union

该操作符用于取得两个结果集的并集。会去重

union all

该操作符用于取得两个结果集的并集。不会去重

本篇文章的内容就先到这,下篇文章再见!!!

相关推荐
云和数据.ChenGuang5 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys5 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi5 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据6 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi7 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀7 小时前
Redis梳理
数据库·redis·缓存
独行soc8 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天8 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺8 小时前
分布式系统架构:服务容错
数据库·架构
独行soc9 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘