mysql表约束---主键、外键、非空等

本文详细介绍了数据库中主键的概念及其定义方式,包括单字段主键和多字段联合主键,并阐述了如何使用外键约束来维护不同表间的关系。此外还探讨了非空约束、唯一性约束、默认约束及自动增长属性的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用主键约束

主键又称主码,是表中一列或多列的组合。主键约束要求主键列的数据唯一,并且不允许为空。主键能够唯一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键和记录之间的关系如同身份证和人之间的关系是一一对应的。主键分为两种类型,单字段主键和多字段联合主键。

定义的方式也分为两种,一种是在定义列的同时指定主键,一种是完成所有列之后指定主键

CREATE TABLE tr_user
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
dept_id INT(11),
salary FLOAT
)

#或者
CREATE TABLE tr_user
(
id INT(11),
name VARCHAR(25),
dept_id INT(11),
salary FLOAT,
PRIMARY KEY(id)
)

#定义联合主键的时候为
CREATE TABLE tr_user
(
id INT(11),
name VARCHAR(25),
dept_id INT(11),
salary FLOAT,
PRIMARY KEY(id,name)
)

使用外键约束

外键用来在两个表的数据之间建立连接,它可以是一列或多列,一张表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以是空值,若不为空值,则每一个外键值必须等于另一张表中主键的某个值。

外键是表中的一个字段,它可以不是本表的主键,但对应另外一张表的主键。外键的主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一张表中具有关联关系的行。

====================================

2016.7.30验证,外键关联主表的字段可以不是主键

====================================

主表:对于两个具有关联关系的表,相关联字段中主键所在的表是主表。

子表:对于两个具有关联关系的表,相关联字段中外键所在的表是子表。

创建外键的语法规则:

[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [,字段名2,...]

REFERENCES <主表名> 主键列1 [,主键列2,...]

#创建一个部门表
CREATE TABLE tr_dept
(
id INT(11) COMMENT '部门编号',
name VARCHAR(25) COMMENT '部门名称',
location VARCHAR(50) COMMENT '部门位置',
PRIMARY KEY(id)
);

#创建一个员工表
CREATE TABLE tr_user
(
id INT(11) COMMENT '员工id',
name VARCHAR(25) COMMENT '员工姓名',
deptId INT(11) COMMENT '部门编号',
salary FLOAT COMMENT '薪水',
PRIMARY KEY(id)
CONSTRAINT fk_user1 FOREIGN KEY(deptId) REFERENCES tr_dept(id)
);

执行成功后,在表tr_user上添加了名为fk_user1的外键约束,外键的名称为deptId,其依赖表tr_deot的主键id。

关联指的是在关系型数据库中,相关表之间的联系。它是通过相容或相同的属性或属性组来表示。子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果类型不一样,则创建字表时,就会出现错误。

使用非空约束

非空约束指字段的值不能为空。对于使用了非空约束的字段,如果再添加数据时没有指定值,数据库系统就会报错。

创建方式: 字段名 数据类型 not null。

使用唯一性约束

唯一性约束,要求该列唯一,允许为空,但只能出现一次。保证一列或几列不出现重复值。

也有两种语法方式:

字段名 数据类型 UNIQUE;

[CONSTRAINT <约束名>] UNIQUE(<字段名>[,<字段名>,...]);

PRIMARY KEY 跟UNIQUE的区别在于,PRIMAEY只能有一个而UNIQUE可以多个,且主键值不能为空。

使用默认约束

指定某一列的默认值,如果新增一条记录时,没有给值,就会使用默认值

使用语法 : 字段名 数据类型 DEFAULT 默认值

使用表的属性值自动增加

在数据库的应用中,经常希望每次插入新纪录时,系统自动生成字段的主键值自动加1,这个时候就可以通过表主键添加AUTO_INCREMENT来实现。一张表只能有一个字段使用AUTO_INCREMENT,且该字段必须是主键的一部分

使用语法为:字段名 数据类型 AUTO_INCREMENT

转载于:https://my.oschina.net/OSrainn/blog/719278

### 创建 MySQL 的语法与特性 在 MySQL 中,`CREATE TABLE` 语句用于定义新及其结构。以下是创建包含主键 (`PRIMARY KEY`)、 (`FOREIGN KEY`)、约束 (`NOT NULL`)、唯一性约束 (`UNIQUE`) 和自动增长属性 (`AUTO_INCREMENT`) 的格的具体方法。 #### 主键 (Primary Key) 主键是一种特殊的唯一索引,它不允许 `NULL` 值并确保每行记录具有唯一的标识符。可以通过以下方式声明: ```sql id INT AUTO_INCREMENT PRIMARY KEY, ``` 此代码片段示列 `id` 是整数类型,并启用自动递增功能作为主键[^1]。 #### (Foreign Key) 用来建立两个之间的关系。例如,如果存在另一个名为 `t2` 的,则可以这样设置关联: ```sql FOREIGN KEY (t2ID) REFERENCES t2(id), ``` 这里假设当前有一个字段叫作 `t2ID`,而目标 `t2` 存在一个叫做 `id` 的主键或者唯一[^2]。 #### 约束 (Not Null Constraint) 指定某列为不可为时,在该列名后面加上关字 `NOT NULL` 即可。比如对于用户名字这一项可能要求不能为: ```sql name VARCHAR(50) NOT NULL, ``` 这明名字长度不超过五十字符且必填[^3]。 #### 唯一性约束 (Unique Constraint) 当希望某些特定的数据项目在整个数据库里保持独一无二的时候就可以应用这个选项。像电子邮件地址通常应该在全球范围内都是独特的: ```sql email VARCHAR(100) UNIQUE, ``` 这条命令使得邮箱栏位中的每一个值都必须与其他所有条目不同。 #### 自动增加 (Auto Increment) 为了让每次新增加一条新的纪录都会让某个数值型别的资料域自行依序增大一位数字,我们可以利用 `AUTO_INCREMENT` 属性来做设定。一般会配合主键一起使用以便于追踪每一笔独立交易或事件的发生次序。 综合以上各点,下面给出一个完整的例子展示如何构建这样的数据模型: ```sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, -- 设置为主键并且开启自增模式 name VARCHAR(50) NOT NULL, -- 用户名称不得为白 email VARCHAR(100) UNIQUE, -- E-mail 地址需维持独有状态 password_hash CHAR(64), -- 密码哈希存储间预留充足大小 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,-- 记录创建时间戳默认现在时刻 updated_at DATETIME ON UPDATE NOW(), -- 更新时间为最后修改日期/时间 FOREIGN KEY (another_table_id) REFERENCES another_table(primary_key_column)-- 定义对部资源链接的关系图谱 ); ``` 上述脚本展示了怎样去设计一张涵盖了多种常见SQL概念的基础用户信息登记册样式的电子档案库架构方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值