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. springdata 动态查询之分页

  2. Ubuntu16设置Redis开机自启动

    Ubuntu16设置Redis开机自启动   Ubuntu16设置Redis开机自启动 设置条件: -Ubuntu16.04 -Redis-4.0.11 在redis目录下找到  utils/redi ...

  3. LOJ2083 [NOI2016] 优秀的拆分 【哈希】【调和级数】

    题目分析: 好题!我们发现题目实际是要求出从某个左端点开始跑出去的BB型有多少个和从某个右端点开始跑出去的AA型有多少个. 发现这个问题是对称的,所以只考虑从左端点跑出去的BB型有多少个就可以了. 我 ...

  4. bzoj 3282: Tree (Link Cut Tree)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3282 题面: 3282: Tree Time Limit: 30 Sec  Memory L ...

  5. P1438 无聊的数列 (差分+线段树)

    题目 P1438 无聊的数列 解析: 先考虑修改,用差分的基本思想,左端点加上首项\(k\),修改区间\((l,r]\)内每个数的差分数组都加上公差\(d\),最后的\(r+1\)再减去\(k+(r- ...

  6. 学习STM32F769DK-OTA例程之百度云平台建立MQTT服务器

    @2019-04-17 [小记] 百度云平台建立MQTT服务器时需要设置权限组,否则连接失败

  7. Python 练习——计算1-2+3-4...+99

    # 求1-99的所有数的和 count = 1 s = 0 while count < 100: s += count count += 1 print(s) 当都为正数时,即1+2+3+... ...

  8. atomic详解

    http://www.360doc.com/content/14/1120/21/203028_426770242.shtml

  9. 局域网配置dnsmasq

    一.安装dnsmasq centos下安装dnsmasq: yum install dnsmasq 二.配置dnsmasq: 1.编辑配置文件/etc/dnsmasq.conf # 配置上行DNS,对 ...

  10. 如何设置Maven代理

    1.公司的网络走的是代理,那么如何设置maven下载jar包时也走代理呢. 根据百度出来的两篇文章 设置了一下,但是还是报错. Plugin org.apache.maven.plugins:mave ...