1. 数据库有六大约束

  主键(primary key)
  外键(foreign key):被参照的键必须有唯一约束或是主键
  非空(not null)
  默认(default)
  检查(check):oracle独有
  唯一(unique)

2. 六大约束的用法

以下所有演示的SQL语句都是基于Oracle,可能在MySQL中使用有些出入。不过不用担心,后面会指出一些MySQL与Oracle的不同之处

-- 1.创建部门表dept 用于演示外键
create table test_dept(
deptno varchar2(20) primary key,
dname varchar2(20),
loc varchar2(20)unique
);

-- 2.创建员工表emp
create table test_emp(
-- 1.员工id:添加主键约束primary key
eid varchar(20) primary key,
-- 2.员工名字:添加非空约束not null,唯一约束unique
ename varchar(20) not null unique,
-- 3.员工性别与年龄:添加检查约束check
sex char(2) check(sex in ('男','女')),
age number(3) check(age>0),
-- 4.员工工资:添加默认约束default
sal number(7,2) default('3000'),
-- 5.员工所属部门:添加外键约束forein key
deptno references test_dept(deptno),
-- 6.部门地址:用于单独添加外键约束演示
loc varchar2(20)
);

-- 单独添加或修改check约束
alter table test_emp add constraint age check (age>0 and age<140);
--- 单独添加外键约束
alter table test_emp add constraint fk_loc foreign key(loc) references test_dept(loc);

-- 也可以将check约束和主键约束放在最后
create table test_emp2(
-- 1.员工id:主键约束primary key
eid varchar(20),
-- 2.员工名字:非空约束not null,唯一约束unique
ename varchar(20) not null unique,
-- 3.员工性别与年龄:检查约束check
sex char(2),
age number(3),
-- 4.员工工资:默认约束default
sal number(7,2) default('3000'),
-- 5.员工所属部门:外键约束forein key
deptno references test_dept(deptno),
-- 6.部门地址:用于单独添加外键约束演示
loc varchar(20),
primary key(eid),check(sex in ('男','女')),check(age>0)
);

-- default约束用法:
-- 1.默认为空:default null
-- 2.默认值类型为字符串:default '普通用户' 或default('普通用户')
-- 3.默认值类型为数值:default 2000 或default(2000)
-- 推荐使用不需要括号方式:default 'admin' 或 default 2000
-- oracle中:default约束必须放在非空约束(not null)前面
create table test_emp3(
-- 1.员工id:主键约束primary key
eid varchar(20),
-- 2.员工名字:非空约束not null,唯一约束unique
ename varchar(20),
-- 3.员工性别与年龄:检查约束check
sex char(2),
age number(3),
-- 4.员工工资:默认约束default
sal number(7,2) default(533) not null ,
-- 5.员工所属部门:外键约束foreign key
deptno references test_dept(deptno),
-- 6.部门地址:用于单独添加外键约束演示
loc varchar2(20),
check(sex in ('男','女')),check(age>0)
);
-- 单独添加主键
alter table test_emp3 add constraint pk_ename primary key(ename);

-- 一次添加多个主键
-- 注意:1.一次添加多个主键,只能采取下列方式(使用GUI工具除外);
-- 2.不能使用分别在eid和ename后面加primary key
-- 3.也不能先给eid设置为primary key ,在表创建完毕后在使用alter去给ename添加主键
create table test_emp4(
-- 1.员工id:主键约束primary key
eid varchar(20),
-- 2.员工名字:非空约束not null,唯一约束unique
ename varchar(20),
-- 3.员工性别与年龄:检查约束check
sex char(2),
age number(3),
-- 4.员工工资:默认约束default
sal number(7,2) default(533) not null ,
-- 5.员工所属部门:外键约束forein key
deptno references test_dept(deptno),
-- 6.部门地址:用于单独添加外键约束演示
loc varchar2(20),
primary key(eid,ename),check(sex in ('男','女')),check(age>0)
);

3. mysql中如何实现类似于oracle的检查约束

可以采用枚举enum来实现类似检查约束的功能。

CREATE TABLE `testuser` (
`user_id` INT(11) NOT NULL AUTO_INCREMENT,
`user_name` VARCHAR(12) NOT NULL DEFAULT '',
`real_name` VARCHAR(12) NOT NULL DEFAULT '',
`password` VARCHAR(8) NOT NULL DEFAULT '',
`sex` ENUM('0','1') NOT NULL DEFAULT '0',
`degree` ENUM('1','2','3','4') NOT NULL DEFAULT '1',
`birthday` DATETIME DEFAULT NULL,
PRIMARY KEY (`user_id`)
);

4.mysql创建外键

(1)创建表时添加外键

添加一个外键

create table users(
username varchar(50),
role_id int ,
constraint fk_users_roles foreign key (role_id) references roles(roleid)
);

可以添加两个主键

CREATE TABLE roles_menus (
roles_id INT ,
menus_id INT,
PRIMARY KEY (roles_id, menus_id),
CONSTRAINT fk_users_roles FOREIGN KEY (roles_id) REFERENCES roles(roleid),
CONSTRAINT fk_users_menus FOREIGN KEY (menus_id) REFERENCES menus(menuid)
);

(2)创建表后,单独添加外键约束

create table users(
username varchar (50) primary key,
role_id int
);

alter table users add constraint fk_users_roles foreign key (role_id) references roles(roleid);

原文:https://blog.csdn.net/baidu_37107022/article/details/75443794

数据库六大约束用法:主键(primary key)、外键(foreign key)、非空(not null)、默认(default)、检查(check)、唯一(unique)的更多相关文章

  1. 关于数据库主从表、主键PRIMARY KEY 外键约束 FOREIGN KEY 约束----NOT NULL,DEFAULT,CHECK

    如果由两个列共同组成主键,而且一个子表将主键作为可为空值的外键来继承,就可能得到错误的数据.可在一个外键列中插入有效的值,但在另一个外键列中插入空值.然后,可添加一个数据表检查约束,在可为空的外键中检 ...

  2. FOREIGN KEY 外键约束; UNIQUE和PRIMARY KEY 主键约束、CREATE INDEX建立索引的使用

    1)foreign key 是个约束,意思是说如果你给A字段设置了外键约束,以后你要往A字段插入数据,这个数据一定是要在foreign key 后面跟的那个字段中存在的值.这个的意义就是约束了数据的完 ...

  3. MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表

    摘要: 外键 一对多 外键 多对多 外键 一对一 --------------------------------------------------------------------------- ...

  4. MySql数据库在表中添加新字段,设置主键,设置外键,字段移动位置,以及修改数据库后如何进行部署和维护的总结

    1,为当前已有的表添加新的字段 alter table student add studentName varchar(20) not null; 2,为当前已有的表中的字段设置为主键自增 alter ...

  5. SQL学习:主键,外键,主键表,外键表,数据库的表与表之间的关系;

    在数据库的学习中,对于一个表的主键和外键的认识是非常重要的. 主键:在一个表中,能唯一的表示一个事物(或者一条记录)的字段,我们称之为主键 注意: 主键的设置可以不只是用一个字段,也可以用若干个字段的 ...

  6. Navicat For MySQL--外键建立与cannot add foreign key constraint分析

    hrm_job.png 参考资料: https://blog.csdn.net/ytm15732625529/article/details/53729155 https://www.cnblogs. ...

  7. mysql foreign key(外键) 说明与实例

    一,什么是foreign key,及其完整性 个人觉得,foreign key就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强.关于完整性,关连性 ...

  8. Hibernate中映射一对一关联(按主键映射和外键映射)和组件映射

                                                        Hibernate中映射一对一关联(按主键映射和外键映射)和组件映射 Hibernate提供了两 ...

  9. MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别

    DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...

随机推荐

  1. Capability配置简介

    什么是Capability desired capability的功能是配置Appium会话.他们告诉Appium服务器您想要自动化的平台和应用程序. Desired Capabilities是一组设 ...

  2. hdu-4612(无向图缩点+树的直径)

    题意:给你n个点和m条边的无向图,问你如果多加一条边的话,那么这个图最少的桥是什么 解题思路:无向图缩点和树的直径,用并查集缩点: #include<iostream> #include& ...

  3. Nmap小技巧——探测大网络空间中的存活主机

    Nmap快速探测空间主机是否存活的技巧(来自lijiejie师傅): nmap -v -sn -PE -n --min-hostgroup --min-parallelism -oX nmap_out ...

  4. bugku web 变量1

    flag In the variable ! <?php error_reporting(0);include "flag1.php";highlight_file(__fi ...

  5. Spring MVC 使用介绍(十六)数据验证 (三)分组、自定义、跨参数、其他

    一.概述 除了依赖注入.方法参数,Bean Validation 1.1定义的功能还包括: 1.分组验证 2.自定义验证规则 3.类级别验证 4.跨参数验证 5.组合多个验证注解 6.其他 二.分组验 ...

  6. Comet OJ - Contest #1

    A:随便怎么暴力. #include<bits/stdc++.h> using namespace std; #define ll long long #define N 25 char ...

  7. <知识整理>2019清北学堂提高储备D1

    一.枚举: 枚举是最简单最基础的算法,核心思想是将可能的结果都列举出来并判断是否是解. 优点:思维简单,帮助理解问题.找规律.没头绪时 缺点:时空复杂度较高,会有很多冗余的非解(简单的枚举几乎没有利用 ...

  8. 转载:Linux命令之查看文件占用空间大小-du,df

    转载自:<du命令>-linux命令五分钟系列之三 du(disk usage),顾名思义,查看目录/文件占用空间大小 #查看当前目录下的所有目录以及子目录的大小$ du -h $ du ...

  9. Httpclient发送json请求

    一.Httpclient发送json请求 public String RequestJsonPost(String url){    String strresponse = null;    try ...

  10. Angular记录(7)

    文档资料 箭头函数--MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_fun ...