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. Android一些问题

    1.wait()与sleep() wait()方法会释放占有的对象锁,当前线程进入等待池,释放cpu, 而其他正在等待的线程即可抢占此锁,获得锁的线程即可运行程序: sleep()方法则表示,当前线程 ...

  2. 使用systemback制作Ubuntu自定义系统镜像和系统备份(抄)

    使用systemback制作Ubuntu自定义系统镜像和系统备份 2017年06月23日 16:17:51 BWBOT 阅读数:10714   原链接:https://community.bwbot. ...

  3. react16 渲染流程

    前言 react升级到16之后,架构发生了比较大的变化,现在不看,以后怕是看不懂了,react源码看起来也很麻烦,也有很多不理解的地方. 大体看了一下渲染过程. react16架构的变化 react ...

  4. pwn-GUESS

    参考了其他wp之后才慢慢做出来的 记录一下 首先checksec一下 有canary 放到IDA看下源码 运行流程大概是 有三个fork 即三次输入机会,于是无法爆破cannary 本题用的是SSP ...

  5. MySQL 主从复制实战解析

    前言:前面几篇文章讲解了在应用层读写分离的配置和使用,这篇文章将来个主从复制的实战解析. 说明:主从复制,读写分离结构图 原理图 主库生成一个线程: Binlog Dump线程 1.此线程运行在主库, ...

  6. 第四十六篇--解析和保存xml文件

    新建assets资源文件夹,右键app --> new --> Folder --> Assets Folder,将info.xml放入此文件夹下面. info.xml <?x ...

  7. 树莓派安装 MySQL 时出现错误的解决方法

    今天被要求解决一个树莓派无法正常安装 MySQL 的问题.以下是解决过程记录. 我在 Mac 上利用 SSH 连接到树莓派,执行 sudo apt-get install mysql-server m ...

  8. JAVA开发环境搭建(Mac)

    1. 打开Terminal, 执行命令: java -version 即可查看到我们所安装的jdk版本. 2.安装jdk成功之后,我们还需要配置jdk环境变量. 使用命令: /usr/libexec/ ...

  9. java(11)带参数的方法

    一.java中的包(package) 1.1 包,对应到磁盘中的文件夹 1.2 新建一个class,默认保存在缺省包中 1.3 声明包的关键字:package package语句,置顶位置 1.4 导 ...

  10. Java中方法定义和调用的学习

    方法其实就是若干语句的功能集合. 参数(原料):就是进入方法的数据.返回值(原产物):就是从方法中出来的数据. 定义方法的完整格式:修饰符  返回值类型  方法名称(参数类型 参数名称,...){ 方 ...