与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语句的一些事(二)的更多相关文章

  1. SQL语句复习【专题二】

    SQL语句复习[专题二] 单行函数(日期.数学.字符串.通用函数.转换函数)多行函数.分组函数.多行数据计算一个结果.一共5个.sum(),avg(),max(),min(),count()分组函数  ...

  2. C#.NET 大型企业信息化系统集成快速开发平台 4.1 版本 - 面向数据库SQL语句的应用开发二

    很多传统企业.包括系统集成类的IT企业,若不是从事专业软件开发领域的,能做出一套适合本公司企业信息化的灵活的信息系统还是很有难度的,还有一些已经多年不写程序的资深开发人员,初学者,都难把一个整套系统实 ...

  3. SQl语句学习笔记(二)

    merge into        when matched then...  when not mached then... merge into t_road_pre_parameter a fr ...

  4. java实现从实体到SQL语句的转换(二)

    前面写过一篇生成insert语句的博客,今天把CRUD的都完善了一下,需要的上次写的获取实体信息的类,这里就不贴出来了[点击打开查看] 下面是完整的代码: package tan.code.utils ...

  5. 理想中的SQL语句条件拼接方式 (二)

    问题以及想要的效果,不重复叙述,如果需要的请先看 理想中的SQL语句条件拼接方式 . 效果 现在有2个类映射数据库的2张表,结构如下: public class User { public int U ...

  6. sql 语句-初级进阶(二)

    1.insert插入数据时注意事项: 每次插入一整行,不能半行或者是几列数据. 值与列数必须相同,包括数据类型也必须匹配. 不能为标识列指定值(就是最前面的那一序号列),它是自动增长的 列的数据类型为 ...

  7. 四,mysql优化——sql语句优化之索引二

    1,在什么列适合添加索引 (1)较频繁的作为查询条件字段应该添加索引 select * from emp where empid = 2; (2)唯一性太差的字段不适合添加索引,即时频繁作为查询条件. ...

  8. Sql语句的一些事(一)

    (1)LIMIT子句(MySql) ----LIMIT 子句用于规定要返回的记录的数目,一般和Order By一起使用 经常用于数据的分页查询,但是一旦数据量一大,limit的性能就会急速下降 格式: ...

  9. 50个SQL语句(MySQL版) 问题二

    --------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...

随机推荐

  1. IDC 内网机器 通 过 iptables SNAT上网的配置方法

    有三台机器, A .B .C,其中A机器有外网和内网IP,B和C只有内网,我们配置B和C二台机器通过A机器来上外网. 假设A机器 外网IP为: 60.12.13.14  内网IP为: 192.168. ...

  2. HDU 3037 Saving Beans (数论,Lucas定理)

    题意:问用不超过 m 颗种子放到 n 棵树中,有多少种方法. 析:题意可以转化为 x1 + x2 + .. + xn = m,有多少种解,然后运用组合的知识就能得到答案就是 C(n+m, m). 然后 ...

  3. bzoj 3709: [PA2014]Bohater【贪心】

    先打能回血的,按消耗从小到大打: 然后按回血量降序打剩下的(把消耗和回血反着看就是上一种怪,打法一样): 中间体力小于0就输出无解 #include<iostream> #include& ...

  4. vi 和vim中的查找和替换

    查找 命令模式输入 : /the-string-you-want-to-lookup 替换 命令模式输入 : s /from/to/

  5. ROS学习笔记七:在ROS中使用USB摄像头

    下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...

  6. [ZPG TEST 111] 奶牛的新家【DP】

    3.奶牛的新家 [问题描述] 由于奶牛们纷纷表示破旧的房子实在是太丑陋了,DD决定给他们建造新家.现在有许多奶牛决定将家建造在n*m的城市中.然而奶牛们分成了k帮派,不同帮派的奶牛不能住在同列或同行上 ...

  7. ssrs 2016, mobile report error: The report may be misconfigured, the data may not be available, or the server version may be unsupported.

    使用多账户配置ssrs mobile report 权限后,使用客户端显示: 使用web 查阅,显示: 遇到这种情况,可能是由于,report引用了 数据集文件夹中的数据集,请记得把数据集文件夹上为该 ...

  8. vim快捷键参考

    一. 移动: h,j,k,l: 左,下,上,右. w: 下一个词的词首.W:下一个单词(不含标点). e:下一个词的词尾.E:不含标点. b:上一个词的词首.B:不含标点. <>: v 模 ...

  9. String的用法——转换功能

    package cn.itcast_05; /* String类的转换功能: byte[] getByte():把字符串转换成字节数组 复习: public String(byte[] bytes): ...

  10. 深入学习数据结构之bitmap(四)

    Bitmap,今天我们来分析一下bitmap的实现原理以及它的使用场景. 一.使用场景: 1.对于大量数据(几千个数据的就不要在废话了),且无重复或者可以忽略重复的数字.为啥这里要强调无重复,因为在b ...