什么数据约束

  对用户操作表的数据进行约束

2 默认值(缺省约束)

  作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值。

  注意:

  1)对默认值字段插入null是可以的

  2)对默认值字段可以插入非null

CREATE TABLE student(
id INT,
NAME VARCHAR(),
address VARCHAR() DEFAULT '默认值'

1.3 非空

  作用: 限制字段必须赋值

  注意:

  1)非空字符必须赋值  

  2)非空字符不能赋null

-- 需求: gender字段必须有值(不为null)
CREATE TABLE student(
id INT,
NAME VARCHAR(),
gender VARCHAR() NOT NULL -- 非空
)

1.4 唯一

  作用: 对字段的值不能重复

  注意:

  1)唯一字段可以插入null

  2)唯一字段可以插入多个null

CREATE TABLE student(
id INT UNIQUE, -- 唯一
NAME VARCHAR()
) INSERT INTO student(id,NAME) VALUES(,'zs');
INSERT INTO student(id,NAME) VALUES(,'lisi'); -- ERROR (): Duplicate entry '' for key 'id' INSERT INTO student(id,NAME) VALUES(,'lisi');

1.5 主键

  作用: 非空+唯一

  注意:

  1)通常情况下,每张表都会设置一个主键字段。用于标记表中的每条记录的唯一性。

  2)建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业务含义的id字段。

CREATE TABLE student(
id INT PRIMARY KEY, -- 主键
NAME VARCHAR()
) INSERT INTO student(id,NAME) VALUES(,'张三');
INSERT INTO student(id,NAME) VALUES(,'张三');
-- INSERT INTO student(id,NAME) VALUES(,'李四'); -- 违反唯一约束: Duplicate entry '' for key 'PRIMARY' -- insert into student(name) value('李四'); -- 违反非空约束: ERROR (): Column 'id' cannot be null

1.6 自增长

  作用: 自动递增

CREATE TABLE student(
id INT() ZEROFILL PRIMARY KEY AUTO_INCREMENT, -- 自增长,从0开始 ZEROFILL 零填充
NAME VARCHAR()
) -- 自增长字段可以不赋值,自动递增
INSERT INTO student(NAME) VALUES('张三');
INSERT INTO student(NAME) VALUES('李四');
INSERT INTO student(NAME) VALUES('王五'); SELECT * FROM student;
-- 不能影响自增长约束
DELETE FROM student;
-- 可以影响自增长约束
TRUNCATE TABLE student;

1.7 外键

  作用:约束两种表的数据

  出现两种表的情况:

  解决数据冗余高问题: 独立出一张表

  例如: 员工表  和  部门表

  问题出现:在插入员工表数据的时候,员工表的部门ID字段可以随便插入

  使用外键约束:约束插入员工表的部门ID字段值

  解决办法: 在员工表的部门ID字段添加一个外键约束

-- 部门表(主表)
CREATE TABLE dept(
id INT PRIMARY KEY,
deptName VARCHAR()
) -- 修改员工表(副表/从表)
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(),
deptId INT,-- 把部门名称改为部门ID
-- 声明一个外键约束
CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)
-- 外键名称 外键 参考表(参考字段)
)

   注意:

    1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!

    2)主表的参考字段通用为主键!

    3)添加数据: 先添加主表,再添加副表

    4)修改数据: 先修改副表,再修改主表

    5)删除数据: 先删除副表,再删除主表

-- 1.6 外键约束
-- 员工表
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(),
deptName VARCHAR() -- 部门名称
) INSERT INTO employee VALUES(,'张三','软件开发部');
INSERT INTO employee VALUES(,'李四','软件开发部');
INSERT INTO employee VALUES(,'王五','应用维护部'); SELECT * FROM employee; -- 添加员工,部门名称的数据冗余高
INSERT INTO employee VALUES(,'陈六','软件开发部'); -- 解决数据冗余高的问题:给冗余的字段放到一张独立表中
-- 独立设计一张部门表
CREATE TABLE dept(
id INT PRIMARY KEY,
deptName VARCHAR()
) DROP TABLE employee; -- 修改员工表
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(),
deptId INT,-- 把部门名称改为部门ID
-- 声明一个外键约束
CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id)
-- 外键名称 外键 参考表(参考字段)
) INSERT INTO dept(id,deptName) VALUES(,'软件开发部');
INSERT INTO dept(id,deptName) VALUES(,'应用维护部');
INSERT INTO dept(id,deptName) VALUES(,'秘书部'); INSERT INTO employee VALUES(,'张三',);
INSERT INTO employee VALUES(,'李四',);
INSERT INTO employee VALUES(,'王五',);
INSERT INTO employee VALUES(,'陈六',); -- 问题: 该记录业务上不合法,员工插入了一个不存在的部门数据
INSERT INTO employee VALUES(,'陈六',); -- 违反外键约束: Cannot add or update a child row: a foreign key constraint fails (`day16`.`employee`, CONSTRAINT `emlyee_dept_fk` FOREIGN KEY (`deptId`) REFERENCES `dept` (`id`)) -- 1)当有了外键约束,添加数据的顺序: 先添加主表,再添加副表数据
-- 2)当有了外键约束,修改数据的顺序: 先修改副表,再修改主表数据
-- 3)当有了外键约束,删除数据的顺序: 先删除副表,再删除主表数据
-- 修改部门(不能直接修改主表)
UPDATE dept SET id= WHERE id=;
-- 先修改员工表
UPDATE employee SET deptId= WHERE id=; -- 删除部门
DELETE FROM dept WHERE id=; -- 先删除员工表
DELETE FROM employee WHERE deptId=;
SELECT * FROM dept;
SELECT * FROM employee;

MySQL数据库——数据约束的更多相关文章

  1. MySQL数据库数据存放位置修改

    MySQL数据库数据存放位置修改 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方 ...

  2. 在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引

    什么是solr solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化. 准备工作 首先,去下载以下软件包: JDK8:jdk-8u60-linux-x64.tar.gz TOMCA ...

  3. Ubuntu上更改MySQL数据库数据存储目录

    之前写过一篇博客"MySQL更改数据库数据存储目录",当时的测试环境是RHEL和CentOS,谁想最近在Ubuntu下面更改MySQL数据库数据存储目录时遇到了之前未遇到的问题,之 ...

  4. mysql数据库数据(字段数过大)太多导入不了的解决方法

    mysql数据库数据(字段数过大)太多导入不了的决方法: 1.打开navicat 工具 2.在数据库上右键,执行右键菜单命令“命令列界面” 3.在打开的窗口中,运行set global max_all ...

  5. 两台Mysql数据库数据同步实现

    两台Mysql数据库数据同步实现 做开发的时候要做Mysql的数据库同步,两台安装一样的系统,都是FreeBSD5.4,安装了Apache 2.0.55和PHP 4.4.0,Mysql的版本是4.1. ...

  6. mysql 数据库数据订正

    mysql 数据库数据订正 http://blog.itpub.net/22664653/viewspace-717175/ 工作过程中时常遇到数据订正的需求,该操作本身不难.操作时要求能够保持回滚~ ...

  7. 第二百七十七节,MySQL数据库-数据表、以及列的增删改查

    MySQL数据库-数据表.以及列的增删改查 1.创建一个表 CREATE(创建) TABLE(表) ENGINE(引擎) ENGINE=INNODB(引擎)还有很多类引擎,这里只是简单的提一下INNO ...

  8. FLUME安装&环境(二):拉取MySQL数据库数据到Kafka

    Flume安装成功,环境变量配置成功后,开始进行agent配置文件设置. 1.agent配置文件(mysql+flume+Kafka) #利用Flume将MySQL表数据准实时抽取到Kafka a1. ...

  9. MySQL数据库-数据表(上)

    数据表的基本操作. MySQL 数据库支持多种数据类型,大致可以分为 3 类:数值类型.日期和时间类型.字符串(字符)类型. (1)数值类型 数值类型用于存储数字型数据,这些类型包括整数类型(TINY ...

随机推荐

  1. paypal支付平台如何使用二次验证码_虚拟MFA_两步验证_谷歌身份验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 paypal支付平台如何使用二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 ...

  2. vscode 无法自动补全第三方库

    点击Settings 找到“Extentions”下的“Python”,点击“Auto Completes: Extra Paths”的“Edit in settings.json”,如下图: 在se ...

  3. 服务质量分析:腾讯会议&腾讯云Elasticsearch玩出了怎样的新操作?

    导语 | 腾讯会议于2019年12月底上线,两个月内日活突破1000万,被广泛应用于疫情防控会议.远程办公.师生远程授课等场景,为疫情期间的复工复产提供了重要的远程沟通工具.上线100天内,腾讯会议快 ...

  4. git上传本地项目到gitlab

    <1>输入git config --global user.name "你的用户名" <2>输入git config --global user.email ...

  5. vue学习(十五) 过滤器简单实用

    vue过滤器: 概念:vue.js允许你自定义过滤器可被用作一些常见文本的格式化.过滤器可以用在两个地方:插值表达式   v-bind表达式  由管道符指示 //过滤器调用时候的格式 {{ name ...

  6. P1852 跳跳棋 [LCA思想+二分答案]

    题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有\(3\)颗棋子,分别在\(a,b,c\)这三个位置.我们要通过最少的跳动 ...

  7. vue-resource(搬运)

    一.vue-resource特点vue-resource插件具有以下特点: 1. 体积小vue-resource非常小巧,在压缩以后只有大约12KB,服务端启用gzip压缩后只有4.5KB大小,这远比 ...

  8. sed打印包含一个字符串的行到包含另一个字符串的行解答

    sed -n '/字符串1/,/字符串2/p' filename  这个命令为什么有时候打印不出来想要的东西,例如:sed -n '/root/,/adm/p'  /etc/passwd      我 ...

  9. nginx location proxy_pass 后面的url 加与不加/的区别

    在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走. 首先是l ...

  10. 项目管理--PMBOK 读书笔记(4)【项目整合管理】

    项目整合管理:包括对隶属于项目管理过程组的各种过程和项目管理活动进行识别.定义.组合.统一和协调的各个过程. 项目整合管理的核心概念: 1.确保产品.服务或成果的交付日期,项目生命周期以及效益管理计划 ...