MySQL学习笔记7——约束
约束
约束
*约束是添加在列上的,用来约束列的! 1.主键约束(唯一标识) ***非空***
***唯一***
***被引用*** *当表的某一列被指定为主键后,该列就不能为空,不能有重复值出现。
*创建表时指定主键的两种方式:
>CREATE TABLE stu(
sid CHAR(6) PRIMARY KEY,
sname VARCHAR(20),
age INT,
gender VARCHAR(10)
);
指定sid列为主键列,即为sid列添加主键约束
>CREATE TABLE stu(
sid CHAR(6),
sname VARCHAR(20),
age INT,
gender VARCHAR(10),
PRIMARY KEY(sid)
);
*修改表时指定主键:ALTER TABLE stu ADD PRIMARY KEY(sid);
*删除主键:ALTER TABLE stu DROP PRIMARY KEY; 2.主键自增长 *因为主键列的特性是:必须唯一、不能为空,所以我们通常会指定主键列为整型,然后设置其自动增长,这样可以保证在插入数据时主键列的唯一和非空特性。
*创建表时指定主键自增长
>CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20),
age INT,
gender VARCHAR(10)
);
*修改表时设置主键自增长:ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;
*修改表时删除主键自增长:ALTER TABLE stu CHANGE sid sid INT; 3.非空约束 *因为某些列不能设置为NULL值,所以可以对列添加非空约束。
*例如:
>CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
age INT,
gender VARCHAR(10)
);
*NOT NULL是对sname列设置了非空约束 4.唯一约束 *数据库中的某些列不能设置重复的值,所以可以对列添加唯一约束。
*例如:
>CREATE TABLE stu(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL UNIQUE,
age INT,
gender VARCHAR(10)
);
*UNIQUE是对sname列设置了唯一约束 5.概念模型 当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。
例如部门、员工都是系统中的实体,概念模型中的实体最终会成为Java中的类、数据库中的表。
实体之间还存在着关系,关系有三种:
*1对多:例如每个员工都从属一个部门,而一个部门可以有多个员工,其中员工是多,部门是1。
*1对1:例如老公和老婆是一对一的关系,一个老公和只能有一个老婆,一个老婆只能有一个老公。
*多对多:老师和学生的关系就是多对多,一个老师可以有多个学生,一个学生可以有多个老师。 6.外键约束 *外键必须是另一个表的主键的值
*外键可以重复
*外键可以为空
*一张表可以有多个外键!
>CREATE TABLE emp(
empno INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(50),
dno INT,
CONSTRAINT id_fk FOREIGN KEY(dno) REFERENCES dept(deptno)
);
id_fk是外键约束名,FOREIGN KEY(dno)表示这张表的外键是dno,REFERENCES dept(deptno)表示dept表中deptno是主键。
也可以在创建好两张表后再添加外键约束
ALTER TABLE emp ADD CONSTRAINT id_fk FOREIGN KEY(dno) REFERENCES dept(deptno); 7.数据库一对一关系
在表中建立一对一关系比较特殊,需要让其中一张表的主键,既是主键又是外键。
CREATE TABLE husband(
hid INT PRIMARY KEY,
...
);
CREATE TABLE wife(
wid INT PRIMARY KEY,
...
CONSTRAINT fk_wife_wid FOREIGN KEY(wid) REFERENCES husband(hid)
);
其中wife表wid既是主键,又是相对husband表的外键。
所以如果在wife表中有一条记录wid为1,那么wife表中的其他记录的wid就不能再是1了,因为wid是主键。
同时husband.hid中必须存在1这个值,因为wid是外键,这样就完成了1对1的关系了。 8.数据库多对多关系
在表中建立多对多关系需要使用中间表,即需要三张表,在中间表中使用两个外键,分别引用两个表的主键。
>CREATE TABLE student(
sid int PRIMARY KEY,
...
);
CREATE TABLE teacher(
tid int PRIMARY KEY,
...
);
CREATE TABLE stu_tea(
sid INT,
tid INT,
CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),
CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES student(tid)
);
这时在stu_tea这个中间表中的每条记录都是来说明student和teacher表的关系的。
MySQL学习笔记7——约束的更多相关文章
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- MySQL学习笔记一
MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...
- 【mysql学习笔记整理】
/*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...
- MySql学习笔记四
MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...
- MySql学习笔记三
MySql学习笔记三 4.DML(数据操作语言) 插入:insert 修改:update 删除:delete 4.1.插入语句 语法: insert into 表名 (列名1,列名2,...) val ...
- 一千行MySQL学习笔记 (转)
出处: 一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...
- mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记
mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- Mysql学习笔记(一)数据类型
原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型 Mysql数据类型 含义(有符号) tinyint(m ...
随机推荐
- (转)玩转Koa -- koa-bodyparser原理解析
地址:http://www.imooc.com/article/274059 一.前置知识 在理解koa-bodyparser原理之前,首先需要了解部分HTTP相关的知识. 1.报文主体 HT ...
- LG5239 回望京都 组合数+暴力
问题描述 LG5239 题解 我就是个傻逼,鉴定完毕. 连 \(C_m^n=C_{m-1}^n+C_{m-1}^{n-1}\) 都忘了. 所以暴力求出 \(1000\) 以内的 \(C_i^j\) , ...
- Javascript模块化开发4——Grunt常用模块
一.copy 用于复制文件与目录. grunt-contrib-copy 二.eslint 检测代码的合理性. grunt-eslint 常见参数: 1.quiet 是否只显示errors.默认值fa ...
- Annotation-specified bean name 'userDaoImpl' for bean class [***] conflicts with existing, non-compatible bean definition of same name and class [***]
使用Spring开发的时候报错如下: Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionExcept ...
- oracle学习笔记(十六) PL/SQL 异常和goto语句
PL/SQL 异常和goto语句 异常 预定义异常 oracle常见预定义异常: 错误号 异常错误信息名称 说明 ORA-0001 DUP_VAL_ON_INDEX 试图破坏一个唯一性限制 ORA-0 ...
- wpf 当DataGrid列模版是ComboBox时,显示信息
实际工作中,有时DataGrid控件某一列显示数据是从Enum集合里面选择出来的,那这时候设置列模版为ComboBox就能满足需求.而关于显示的实际内容,直接是Enum的string()返回值可能 ...
- Python 容器使用的 5 个技巧和 2 个误区
"容器"这两个字很少被 Python 技术文章提起.一看到"容器",大家想到的多是那头蓝色小鲸鱼:Docker,但这篇文章和它没有任何关系.本文里的容器,是 P ...
- String substring(int start,int end)截取当前字符串中指定范围内的字符串
package seday01;/** * String substring(int start,int end) * 截取当前字符串中指定范围内的字符串. * java api有一个特点:通常用两个 ...
- 为什么要学 Python? python该怎么学
很多童鞋对为什么学习Python感到迷茫,小编来跟大家说说学习Python的10个理由,希望可以帮助到大家!!! 摘要: 看完这十个理由,我决定买本python从入门到精通! 如果你定期关注现今的科技 ...
- 敏捷软件开发_设计原则<三>
敏捷软件开发_设计原则 单一职责原则(single responsibilities principle,SRP) 原理:一个类应该只有一个变化 分离职责:如果不耦合的职责那么很简单,如果两个职责耦合 ...