首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySql约束

概述 真正约束字段是数据类型,但是数据类型约束很单一,需要有一些额外约束,更好保证数据合法性,从业务逻辑角度保证数据正确性。比如有一个字段是email,要求是唯一。...中一定要有各种约束,通过约束,让我们未来插入数据库数据是符合预期约束本质是通过技术收到逼迫程序员插入正确数据,反过来,站在mysql视角,凡是插入进来数据,都是符合数据约束。...主键 primary key 主键:primary key用来唯一约束该字段里面的数据,不能重复,不能为空,一张中最多只能有一个。但是并不意味着一个主键,只能添加给一列。...而我们设计员工工号时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司业务上不能重复,我们设计时候,需要这个约束,那么就可以将员工工号设计成为唯一键。...建立外键本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入。

17630

MySQL探索之旅】MySQL数据增删改——约束

null 和unique 结合,确保某列(或两个列多个列结合)有唯一标 识,有助于更容易更快速地找到一个特定记录。...foreign key:外键约束,保证一个数据匹配另一个参照完整性。...id int primary key, name varchar(20)); 创建学生,设置id 为主键,一个学生对应一个班级,一个班级对应多个学生。..., foreign key (classId) references class(id)); 在这个语句中, 定义一个外键实际作用是,在这条语句执行后,确保 MySQL 插入外键中一个非空值已经在被参照表中作为主键出现...这意味着,对于student 一个 classId ,都执行一次检查,看这个编号是否出现在 class id 列(主键)中。如果不存在,则出现出错信息。

7610
您找到你想要的搜索结果了吗?
是的
没有找到

MYSQL约束

前言 真正约束字段是数据类型,但是数据类型约束很单一,需要有一些额外约束,更好保证数据合法性,从业务逻辑角度保证数据正确性。比如有一个字段是email,要求是唯一。...五、主键 主键:primary key用来唯一约束该字段里面的数据,不能重复,不能为空,一张中最多只能有一个主键;主键所在列通常是整数类型。...这样可以使对应于SQL语句执行得更快,可快速访问数据库特定信息 七、唯一键 一张中有往往有很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...乍一听好像没啥区别,我们举一个例子: 假设一个场景(当然,具体可能并不是这样,仅仅为了帮助大家理解)比如在公司,我们需要一个员工管理系统,系统中有一个员工,员工中有两列信息,一个身份证号码,一个是员工工号...而我们设计员工工号时候,需要一种约束:而所有的员工工号都不能重复。 具体指的是在公司业务上不能重复,我们设计时候,需要这个约束,那么就可以将员工工号设计成为唯一键。

22340

MySQL约束

反过来,在 mysql 角度,凡是插入进来数据,都是符合数据约束约束最终目的就是保证数据完整性和可预期性。因此我们需要更多约束条件!...一个主键可以被添加到一列,或者多列上,这种叫做复合主键。 在创建时候,在所有字段之后,使用 primary key (主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。...而我们设计员工工号时候,需要一种约束:而所有的员工工号都不能重复。具体指的是在公司业务上不能重复,我们设计时候,需要这个约束,那么就可以将员工工号设计成为唯一键。...我们知道,一个学生一定是隶属于某一个班级,所以 stu 应该是从,我们要为从添加外键约束!主表则是 class. 所以我们需要重新创建一个 stu ,为 stu 添加外键约束。...建立外键本质其实就是把相关性交给 mysql 去审核了,提前告诉 mysql 之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql 不允许你插入。

11310

MySQL约束

约束本质: 通过技术手段倒逼程序员插入正确数据。反过来站在mysql视角,凡是插入进来数据,都是符合数据约束约束最终目标: 保证数据完整性和可预期性。 为什么数据库这么严格?...通过desc操作,其后四列就属于约束条件: 总结一下:约束就是结构设计者在其他人插入数据之前,预先把规则定好,再让被别人按照他规则进行数据增删改,不满足约束数据不会被插入到对应中,这样下来...二.非空约束 1.NULL与’ '比较 在MySQL数据类型已经说过,这二者是不同,NULL代表什么都没有,而' '代表一个空串。 在select语句中,NULL不会参与到相应计算操作中。...因此,为了避免这种情况,最好在创建时一并添加主键约束。 2.复合主键 回到上述定义,一张中最多只能有一个主键,但这并不意味着一个主键只能添加到一列。...看看定义是怎么 auto_increment:当对应字段,不给值,会自动被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个不同值。通常和主键搭配使用,作为逻辑主键。

18750

MySQL约束

一 介绍 约束条件与数据类型宽度一样,都是可选参数 作用:用于保证数据完整性和一致性 主要分为: PRIMARY KEY (PK) 标识该字段为该主键,可以唯一标识记录 FOREIGN...  分析步骤: #1、先站在左角度去找 是否左多条记录可以对应右一条记录,如果是,则证明左一个字段foreign key 右一个字段(通常是id) #2、再站在右角度去找 是否右多条记录可以对应左一条记录...如果步骤1和2同时成立,则证明这两张一个双向多对一,即多对多,需要定义一个这两张关系来专门存放二者关系 #一对一: 如果1和2都不成立,而是左一条记录唯一对应右一条记录,反之亦然...,即查询二者关系就可以了 create table author2book( id int not null unique auto_increment, author_id int not null...用户+相亲关系,相当于:用户+相亲关系+用户 多张:用户+用户与主机关系+主机 中间那一张存放关系,对外关联字段可以联合唯一 #一对一 两张:学生和客户 一对一:一个学生是一个客户

4.8K60

MySQL完整性约束

返回顶部 PRIMARY KEY 主键为了保证每一条数据该字段都是表格中唯一值。换言之,它是用来独一无二地确认一个表格中每一行数据。 主键可以包含一个字段或多个字段。...AUTO_INCREMENT 约束字段为自动增长,被约束字段必须同时被key约束 ? ?...解决方法: 我们完全可以定义一个部门 然后让员工信息关联该,如何关联,即foreign key ?...#类型必须是innodb存储引擎,且被关联字段,即references指定另外一个字段,必须保证唯一 create table department( id int primary key,...Restrict方式 同no action, 都是立即检查外键约束 . Set default方式 父有变更时,子表将外键列设置成一个默认值 但Innodb不能识别

3.5K20

MySQL数据库:约束

约束,实质上就是用数据类型去约束字段,但是数据类型约束手法很单一,比如,我们在设置身份证号这个字段,数据类型唯一起约束是它属于char类型或者varchar类型,不能是浮点型也不能是日期时间类型...主键 主键:primary key用来唯一约束该字段里面的数据,不能重复,不能为空,一张中最多只能有一个主键,主键所在列通常是整数类型。...2 | +------------------+ 1 row in set (0.00 sec) 唯一键 一张中有往往有很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...而我们设计员工工号时候,需要一种约束:而所有的员工工号都不能重复。具体指的是在公司业务上不能重复,我们设计时候,需要这个约束,那么就可以将员工工号设计成为唯 一键。...mysql去审核了,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入。

23830

MYSQL数据库-约束

零、前言 本章主要讲解学习MYSQl数据库中约束 约束 真正约束字段是数据类型,但是数据类型约束很单一,需要有一些额外约束,更好保证数据合法性,从业务逻辑角度保证数据正确性...字段列表) 删除主键: alter table 名 drop primary key; 复合主键: 在创建时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键...这样可以使对应于SQL语句执行得更快,可快速访问数据库特定信息 7、唯一键 一张中有往往有很多字段需要唯一性,数据不能重复,但是一张中只能有一个主键:唯一键就可以解决中有多个字段需要唯一性约束问题...而我们设计员工工号时候,需要一种约束:而所有的员工工号都不能重复。...解决方案就是通过外键完成。建立外键本质其实就是把相关性交给mysql去审核了,提前告诉mysql之间约束关系,那么当用户插入不符合业务逻辑数据时候,mysql不允许你插入

7.5K30

MySql增删

collate 校验规则,如果没有指定校验规则,则以所在数据库校验规则为准 现在创建一张user1: mysql> create table if not exists user1(...affected (0.00 sec) mysql> 创建user2: mysql> create table if not exists user2( -> id int, -...修改alter 在项目实际开发中,经常修改某个结构,比如字段名字,字段大小,字段类型,字符集类型,存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改。...xingming varchar(60) DEFAULT NULL; 向中插入数据insert into values mysql> insert into user values (1,'张三...54321','2010-11-1'); Query OK, 1 row affected (0.00 sec) 中添加一个字段 例如在userbirthday字段后面添加一个image_path

17220

MySQLMySQL增删改(初阶)

MySQL增删改(基础) 据库最主要操作就是增(create)删(update)改(retrieve)(delete)。(CURD) 注意:进行增删改操作时候,请务必选中数据库。...在MySQL中,当前一次插入一条记录,分10次插入,效率要远低于一次把10个记录一起插入。因为MySQL一个“客户端服务器”结构程序。 原因: 由于网络请求和响应时间开销引起。...全列查询 查询表里所有列 select* from 名; *指的是通配符。代表了所有的列。注意不要在大环境下使用select 因为服务器硬件资源是有限。...查询列为“表达式”,在查询过程中,进行一个简单地计算 select 列名 ,列名修改 from 名; 进行表达式查询时候,查询结果,是一个:临时; 这个临时,并不是写入到硬盘中去,临时类型也不是和原始完全一致...那么怎么做,才能保证数量可控呢?在查询操作中,引入了一个limit,通过limit来限制查询结果数量。 直接在查询语句末尾,加上limit指定N,N就表示这次查询结果最大值。

3.4K20

mysql常见选项和约束

engine:指定使用存储引擎 存储引擎:决定了数据如何存储以及如何访问,还有事务如何处理 show engines 用来查询所有支持存储引擎 CREATE TABLE约束 作用:可以为列定义约束...约束主要是防止非法数据进入中,保证数据正确性和一致性,统称为数据完整性 约束也可以防止一个被删除 MySQL约束保存在information_schema.table_constraints中...主键是用来唯一标识每一行,类型一般为整型或者字符串 具有主键约束列不允许有null值,不允许有重复值 每个最多只允许一个主键,可定义联合主键,主键名总是PRIMARY 联合主键 用几个列来进行唯一标识一行...参照完整性约束,保证一个或两个之间参照完整性,外键是构建于一个两个字段或者是两个两个字段之间参照关系 注意: 具有外键约束值不能随便给,必须满足外键所引用主键取值 一张中可以定义多个外键...MySQl中可以使用check约束,但是check约束对数据验证没有任何作用。

11910

MySQL操作『增删改

1.创建 首先创建一个 数据库 testForTable mysql> create database if not exists testForTable; 当前创建 数据库 testForTable...是否存在 主键/外键/唯一键 约束 Default 表示 是否有默认值 Extra 表示 额外信息 2.2.查看建信息 如果想查看关于更详细信息,可以通过指令查看建语句内容,语法为 SHOW...:列注释、字符集、存储引擎,这也证明了当我们不指定这些属性时,自动使用数据库默认属性 MySQL 会记录下用户所有操作痕迹,这也是备份后,恢复数据库关键,把所有指令再执行一遍,就能得到一模一样数据库了...中对应文件名也会被修改 注意: 如同修改字段名一样,修改名也是一个危险操作,同样会影响上层使用 修改 person 名为 students mysql> alter table person rename...to students; 可以看到,对应文件名,也被修改了 4.删除 删除语法为 DROP TABLE tablename; 注意: 删除很危险,删除之后,所有的数据就都没了,不要轻易删除

14410

MySQL数据库——约束(非空约束、唯一约束、主键约束、外键约束)

UNIQUE ); 注意:MySQL中唯一约束限定值可以有多个null 2)删除唯一约束: -- alter table stu modify number varchar(20); 不同于非空约束删除方法...主键约束:primary key 1)注意: 若某一列添加了该约束,则代表了非空,且唯一; 一张只能有一个字段为主键; 主键就是中记录唯一标识; 2)创建时添加主键约束 CREATE TABLE...以上仍然存在一个问题,当在员工中输入不存部门时,数据依然可以添加,不符合实际,因此,这里就可以通过使用外键约束来解决。 【概念】什么是外键约束?...外键,就是从中与主表主键对应那一列,如:员工dep_id,其中,主表是一方,用来约束别人,从可以是多方,被别人约束。 注意:外键可以为NULL,但是不能是不存在外键值。 ?...,在员工中添加一个不在部门范围内内容,则无法保存: ?

13.7K21

MySQL增删改(进阶)

注意: 实际开发中,大部分,一般都会带有一个主键,主键往往是一个整数表示id 在mysql中,一个表里,只能有一个主键,不能有多个 虽然主键不能有多个,mysql允许把多个列放到一起共同作为一个主键...(联合主键) 主键另外一个非常常用方法,就是使用mysql自带“自增主键”作为主键值。...mysql数据量比较小,所有的数据都在一个mysql服务器上,自增主键是可以很好地工作,如果mysql数据量很大,一台主机放不下就需要进行分库分,使用多个主机来进行存储。...此处起到约束作用班级,就叫做“父”(parent),被约束这个,就叫做子表(child)。 外键约束,是父对 子表做了约束,但与此同时。子表也在反过来约束了父。...先笛卡尔积 加上连接条件 加上聚合查询,把同一个同学行合并到同一个组中同时计算总分 任务3:查询所有同学成绩以及同学个人信息 分析:期望查询结果中,有个人信息(student),

3.1K20

MySQL增删改(二)

数据库约束 1.约束类型 NOT NULL - 指示某列不能存储 NULL 值。 UNIQUE - 保证某列每行必须有唯一值。 DEFAULT - 规定没有给列赋值时默认值。...FOREIGN KEY - 保证一个数据匹配另一个参照完整性。 CHECK - 保证列中值符合指定条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。...VARCHAR(20) comment '邮箱', sex varchar(1) comment '性别', mobile varchar(20) comment '手机号' ); -- 将学生所有数据复制到用户...名2 on 连接条件; 用例:查询所有同学成绩,及同学个人信息,如果该同学没有成绩,也需要显示 -- “老外学中文”同学 没有考试成绩,也显示出来了 select * from student...这里要用到数据查询技巧,把一个子查询当做一个临时使用。

2.5K10

MySQL增删改(一)

VARCHAR(20) comment '姓名', qq_mail VARCHAR(20) comment 'QQ邮箱' ); 单行数据+全列插入 -- 插入两条记录,value_list 数量必须和定义数量及顺序一致...指定列查询 -- 指定列顺序不需要按定义顺序来 SELECT id, name, math FROM exam_result; ?..., 不等于 BETWEEN a0 AND a1 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) IN (option, …) 如果是 option 中任意一个...% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符 逻辑运算符: 运算符 说明 AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1) OR 任意一个条件为 TRUE(1),...[LIMIT ...] -- 删除中某一数据 DELETE FROM 数据名 WHERE 条件; -- 删除整数据 DELETE FROM 数据库名; ?

2.2K30

怎么修改mysql名称_mysql怎么修改名?「建议收藏」

大家好,又见面了,我是你们朋友全栈君。 本篇文章将和大家讲述如何快速修改mysql名,有同样需要朋友学习一下吧,希望你看后能有所帮助。...mysql修改方法: 具体步骤:打开cmd->输入“mysql -u root -p”->输入密码,进入mysql->输入“alter table rename to/as new_tablename...;” 下面的代码包括了创建过程:#创建结构.这样方式,不仅仅是结构,连带着索引也会同时创建. mysql> create table ts01 like ti_o_sms; Query...OK, 0 rows affected (0.02 sec) #修改语法:alter table old_tablename rename to/as new_tablename; mysql>...alter table ts01 rename to ts01_new; Query OK, 0 rows affected (0.00 sec) mysql> show tables; +——————

15.9K20
领券