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

使用主键约束

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值