Sql语句的一些事(二)
与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行
from--where--group by--having--select--order by,
from:需要从哪个数据表检索数据
where:过滤表中数据的条件
group by:如何将上面过滤出的数据分组
having:对上面已经分组的数据进行过滤的条件
select:查看结果集中的哪个列,或列的计算结果
order by :按照什么样的顺序来查看返回的数据
在数据库中,为了要维护数据的完整性,以及一些数据的校验和逻辑性处理,常常需要用到约束
常见的约束一共有五种:not null、unique、 primary_key、foreign_key、check
(1)not null
----称为非空约束,是指某一列的值不能为null
Null类型特征: 所有的类型的值都可以是null,包括int、float等数据类型 空字符串””是不等于null,0也不等于null
同时有一点是:Mysql对Not NULL 约束,是建立在判断插入语句里面赋的值是不是null。如果限制为not null的列在插入语句没有赋值null,则允许插入,否则禁止插入。(如果默认值NULL,且该列没出现在插入语句,则会产生一个警告信息,但是仍然能插入Okey)
如下:ces列设置的是非空约束

当执行如下sql后,数据库就会发生错误

常见用法:
增加非空约束 alter table temp modify sex varchar(2) not null; 取消非空约束 alter table temp modify sex varchar(2) null; 取消非空约束,增加默认值 alter table temp modify sex varchar(2) default ‘abc;
(2)unique
----称为唯一性约束,用来约束table中列或者列组合不能重复,保证数据的一致性
虽然唯一约束不允许出现重复的值,但是可以为多个null,同一个表可以有多个唯一约束,多个列组合的约束
在创建唯一约束的时候,如果不给唯一约束名称,就默认和列名相同
MySQL会给唯一约束的列上默认创建一个唯一索引
create table test(
id int not null,
name varchar(25),
password varchar(25),
CONSTRAINT uk_name_pwd unique(name,password)
);
表示用户名和密码组合不能重复 添加唯一约束 alter table temp add unique(name, password);
修改唯一性约束 alter table temp modify name varchar(25) unique;
删除约束 alter table temp drop index name;
在数据库可以看到刚才配置的唯一约束出现在索引的位置,其实两者是很接近的东西,唯一约束需要靠唯一索引来实现,建唯一约束,会自动建唯一索引,但建唯一索引,不会自动创建唯一约束。但创建了唯一索引,会产生和唯一约束相同的效果,即不能插入重复值(但唯一索引和唯一约束允许出现多个空值),否则会报错

(3)primary key
----主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值
如果的多列组合的主键约束, 那么这些列都不允许为空值,并且组合的值不允许重复
每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建
MySQL的主键名总是PRIMARY, 当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引
语法:
StudentID int not null primary key 创建学生编号为主键
primary key(Students) 创建学生编号为主键
primary key(StudentID,Email) 创建学生ID和Email为联合主键
为已存在的列创建主键
alter table table_name add primary key(column_name)
删除主键约束
alter table table_name drop primary key
删除主键约束
alter table table_name drop constraint 主键约束名 主键约束名可以使用sp_help查询
(4)foreign key
----外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系
也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据, 然后才可以删除主表的数据。还有一种就是级联删除子表数据。 注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列,假定引用的主表列不是唯一的记录, 那么从表引用的数据就不确定记录的位置。同一个表可以有多个外键约束
语法:
foreign key (column_name) references 主表名(主键列名) 创建column_name为主表名的外键
column_name int foreign key references 主表名(主键列名) 创建column_name为主表名的外键
alter table table_name
add foreign key (列名) references 主表名(主键列名) 为已存在的列创建外键
alter table table_name drop foreign key 外键约束名 删除外键约束(Mysql)
(5)check
----MySQL可以使用check约束,但check约束对数据验证没有任何作用
create table temp(
id int auto_increment,
name varchar(20),
age int,
primary key(id),
check(age > 20)
);
结果:上面check约束要求age必须大于20,但没有任何作用。但是创建table的时候没有任何错误或警告
备注:借鉴博主分享https://blog.csdn.net/z120270662/article/details/79501621
Sql语句的一些事(二)的更多相关文章
- SQL语句复习【专题二】
SQL语句复习[专题二] 单行函数(日期.数学.字符串.通用函数.转换函数)多行函数.分组函数.多行数据计算一个结果.一共5个.sum(),avg(),max(),min(),count()分组函数 ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.1 版本 - 面向数据库SQL语句的应用开发二
很多传统企业.包括系统集成类的IT企业,若不是从事专业软件开发领域的,能做出一套适合本公司企业信息化的灵活的信息系统还是很有难度的,还有一些已经多年不写程序的资深开发人员,初学者,都难把一个整套系统实 ...
- SQl语句学习笔记(二)
merge into when matched then... when not mached then... merge into t_road_pre_parameter a fr ...
- java实现从实体到SQL语句的转换(二)
前面写过一篇生成insert语句的博客,今天把CRUD的都完善了一下,需要的上次写的获取实体信息的类,这里就不贴出来了[点击打开查看] 下面是完整的代码: package tan.code.utils ...
- 理想中的SQL语句条件拼接方式 (二)
问题以及想要的效果,不重复叙述,如果需要的请先看 理想中的SQL语句条件拼接方式 . 效果 现在有2个类映射数据库的2张表,结构如下: public class User { public int U ...
- sql 语句-初级进阶(二)
1.insert插入数据时注意事项: 每次插入一整行,不能半行或者是几列数据. 值与列数必须相同,包括数据类型也必须匹配. 不能为标识列指定值(就是最前面的那一序号列),它是自动增长的 列的数据类型为 ...
- 四,mysql优化——sql语句优化之索引二
1,在什么列适合添加索引 (1)较频繁的作为查询条件字段应该添加索引 select * from emp where empid = 2; (2)唯一性太差的字段不适合添加索引,即时频繁作为查询条件. ...
- Sql语句的一些事(一)
(1)LIMIT子句(MySql) ----LIMIT 子句用于规定要返回的记录的数目,一般和Order By一起使用 经常用于数据的分页查询,但是一旦数据量一大,limit的性能就会急速下降 格式: ...
- 50个SQL语句(MySQL版) 问题二
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
随机推荐
- C#托盘图标
在C#中实现托盘是多么简单 http://www.cnblogs.com/anytao/archive/2006/04/26/385377.html http://www.cnblogs.com/du ...
- HDU3092:Least common multiple(素数筛选+完全背包)
题意 给出\(n\)和\(m\),将\(n\)拆成任意个数,求它们的最大的\(lcm\) 分析 1.可以证明\(n=p1^{s1}*p2^{s2}*...*pn^{sn}\)时\(lcm\)最大(其中 ...
- Linux 常用命令一 ls
一.ls命令 用于查看目录下的文件信息. ls 当前目录下都有哪些文件: wang@wang:~$ ls examples.desktop workpalce 模板 图片 下载 桌面 tools 公共 ...
- 洛谷 P3622 [APIO2007]动物园【状压dp】
看成网络流建图想了好久... 实际上5个是可以状压的 设f[i][k]为到第i个围栏状态为k的方案数,因为考虑到重复,设g[i][k]记录i开始,状态为k的孩子有几个 状态转移很好想:f[j][k]= ...
- 11.2NOIP模拟赛
/* 根右左遍历后最长上升子序列 */ #include<iostream> #include<cstdio> #include<cstring> #include ...
- 关于自增id 你可能还不知道
导读:在使用MySQL建表时,我们通常会创建一个自增字段(AUTO_INCREMENT),并以此字段作为主键.本篇文章将以问答的形式讲述关于自增id的一切. 注: 本文所讲的都是基于Innodb存储引 ...
- C# DateTime.Now 详解
//2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.ToString(& ...
- Six degrees of Kevin Bacon
转自:https://blog.csdn.net/a17865569022/article/details/78766867 Input* Line 1: Two space-separated in ...
- shiro之SimpleAccountRealm
我使用的是maven构建的工程,junit测试 Shiro认证过程 创建SecurityManager--->主体提交认证--->SecurityManager认证--->Authe ...
- win10 SQL Server 配置管理器无法启动
解决方法: 用管理员方式打开命令行 进入 “C:\Program Files (x86)\Microsoft SQL Server\140\Shared”,(有的是“C:/Program Files/ ...