数据库六大约束用法:主键(primary key)、外键(foreign key)、非空(not null)、默认(default)、检查(check)、唯一(unique)
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)的更多相关文章
- 关于数据库主从表、主键PRIMARY KEY 外键约束 FOREIGN KEY 约束----NOT NULL,DEFAULT,CHECK
如果由两个列共同组成主键,而且一个子表将主键作为可为空值的外键来继承,就可能得到错误的数据.可在一个外键列中插入有效的值,但在另一个外键列中插入空值.然后,可添加一个数据表检查约束,在可为空的外键中检 ...
- FOREIGN KEY 外键约束; UNIQUE和PRIMARY KEY 主键约束、CREATE INDEX建立索引的使用
1)foreign key 是个约束,意思是说如果你给A字段设置了外键约束,以后你要往A字段插入数据,这个数据一定是要在foreign key 后面跟的那个字段中存在的值.这个的意义就是约束了数据的完 ...
- MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表
摘要: 外键 一对多 外键 多对多 外键 一对一 --------------------------------------------------------------------------- ...
- MySql数据库在表中添加新字段,设置主键,设置外键,字段移动位置,以及修改数据库后如何进行部署和维护的总结
1,为当前已有的表添加新的字段 alter table student add studentName varchar(20) not null; 2,为当前已有的表中的字段设置为主键自增 alter ...
- SQL学习:主键,外键,主键表,外键表,数据库的表与表之间的关系;
在数据库的学习中,对于一个表的主键和外键的认识是非常重要的. 主键:在一个表中,能唯一的表示一个事物(或者一条记录)的字段,我们称之为主键 注意: 主键的设置可以不只是用一个字段,也可以用若干个字段的 ...
- Navicat For MySQL--外键建立与cannot add foreign key constraint分析
hrm_job.png 参考资料: https://blog.csdn.net/ytm15732625529/article/details/53729155 https://www.cnblogs. ...
- mysql foreign key(外键) 说明与实例
一,什么是foreign key,及其完整性 个人觉得,foreign key就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强.关于完整性,关连性 ...
- Hibernate中映射一对一关联(按主键映射和外键映射)和组件映射
Hibernate中映射一对一关联(按主键映射和外键映射)和组件映射 Hibernate提供了两 ...
- MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别
DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...
随机推荐
- Java 获取指定日期范围内的每个月,每季度,每一年
/** *根据时间范围获得月份集 * @return */ public static List<String> getRangeSet(String beg ...
- HTML&CSS_基础03
一.Meta标签: 1.可以设置网页的关键字 2.用来指定网页描述 3.可以用来网页重定向 具体参数参见:http://www.w3school.com.cn/html5/tag_meta.asp 二 ...
- opencv debug版本在linux下编译,并写了一个DEMO
用如下方法编译opencv: git clone "https://github.com/opencv/opencv.git" mkdir opencv_debug cd open ...
- 05--STL序列容器(List)
一:List双向链表简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.It++(ok) it+5(err)list不 ...
- 布隆过滤器(Bloom Filter) 未完待续
布隆过滤器雏形 未完待续..... 计算错误率 现在有一个空额布隆过滤器, 过滤器里的bit array的大小是m. 咱来插入一个元素. 这次插入过程中的第一个hash函数会算出一个位置, 然后把这个 ...
- Maven之阿里云镜像仓库配置
方式一:全局配置:修改maven的setting.xml配置 在mirrors节点下面添加子节点: <mirror> <id>nexus-aliyun</id> & ...
- python入门篇
第一篇:python入门 第二篇:数据类型.字符编码.文件处理 第三篇:函数 第四篇:模块与包 第五篇:常用模块 第六篇:面向对象 第七篇:面向对象高级 第八篇:异常处理 第九篇:网络编程 第十篇:并 ...
- IScroll5不能滑到最底端的解决办法
IScroll总体上用起来比较简单,但是如果用不好的可能会产生底部一点滚动不上去的问题. 环境:weui+iscroll5 整体布局及id如下 searchbarwrapper divscroll ...
- jmeter中的参数化
1.那些场景需要参数化? 1.登陆认证信息 2.一些和时间相关的,违反时间约束的[时间点和当前时间不一致的情况等等] 3.一些受其他字段约束的[例如字段的一些限制条件] 4.一些来自于其他数据源[例如 ...
- iview-admin安装
桌面创建project文件夹. 文件夹内右键选择gitbash here,输入git init.文件夹内会生成.git文件夹. 再输入git config --global user.name &qu ...