python之SQL表的约束

1 前言

表的约束是为了限定每一个字段的数值。

2 约束类型

在这里插入图片描述

2.1 主键约束

  • 前言
    在这里插入图片描述
    一个表中只能有一个主键,主键其实是一个抽象的概念,一个表可以由两个或者两个以上的字段组成主键(称为联合主键或者复合主键,性能较差,不建议使用,联合主键时建议采用ID做主键),在联合主键情况下,只有当组成字段的所有数值相同了,才能称为一个主键相同;

主键是表中能够唯一确定一个行数据的字段或者字段组合(联合主键)。

-- 1. 在字段后面加primary key
mysql> create table t_user(
    -> id int(10) primary key,
    -> name varchar(32)
    -> );


-- 2. 使用constraint 主键名 primary key(字段名)
mysql> create table t_user(
    -> id int(10),
    -> name varchar(32) not null,
    -> constraint t_user_id_pk primary key(id)
    -> );

-- 3. 联合主键的声明
mysql> create table t_user(
    -> id int(10),
    -> name varchar(32) not null,
    -> email varchar(128) unique,
    -> primary key(id,name)
    -> );

2.2 非空约束

  • 前言
    确保字段值不能为空;只能在字段级定义。
  • 规定
    不许为空
  • 语法
    在创建表字段的时候,后面加上not null。
mysql> create table t_user(
    -> id int(10) primary key,
    -> name varchar(32) NOT NULL
    -> );

2.3 唯一约束

  • 前言
    确保所在的字段或者字段组合不能出现重复值,但是可以为空值,且可以为多个空值;
    在Oracle中,会将唯一约束条件创建对应的唯一索引
  • 规定
    唯一;
  • 语法
    (下面实例参考:浅然言而信的MySQL——约束(constraint)详解)
-- 1. 使用列级: 在字段声明后面加unique
mysql> create table t_user(
    -> id int(10),
    -> name varchar(32) not null,
    -> email varchar(128) unique
    -> );
    
-- 2. 表级: 使用unique(字段名)
mysql> create table t_user(
    -> id int(10),
    -> name varchar(32) not null,
    -> email varchar(128-> unique(email)
    -> );
    
-- 3. 联合唯一约束unique(字段名1, 字段名2)
mysql> create table t_user(
    -> id int(10),
    -> name varchar(32) not null,
    -> email varchar(128),
    -> unique(name,email)
    -> );
    
-- 4. 约束起别名constraint 约束别名 unique(字段名)
mysql> create table t_user(
    -> id int(10),
    -> name varchar(32) not null,
    -> email varchar(128),
    -> constraint t_user_email_unique unique(email)
    -> );

2.4 检查约束check约束

  • 前言
    用于对于一个属性的值加以限制,即限制数据满足的设置的条件
  • 规定
    某一个字段取值限制,格式限定等,如对年龄的约束
  • 语法
    在创建字段的后面加上check + 限制范围
mysql> create table t_user(
    -> id int(10) primary key,
    -> name varchar(32) NOT NULL-> age number(2) check(age >0 and age < 100)
    -> );

加了check约束后,插入或者修改记录时,系统都要测试新的数据是否满足条件。

2.5 外键约束

  • 前言
    外键是表中的一个列,其值必须在另一表的主键或者唯一键中列出。
    作为主键的表称为"主表", 作为外键的关系称为“依赖表”。
    外键参考的时主表的主键或者唯一键。

  • 对主表的操作会影响依赖关系。
    对于账户表的删除和修改主键值的操作,会对依赖关系产生影响,
    与关有关;一张表的一列值(主表)与另外的一张表(副表)的一个字段的取值相等,从而将两个表进行关联;

  • 语法
    在依赖表中添加:

foreign key(字段名) references 主表表名(主表中的字段名)

如:
(下面实例参考:浅然言而信的MySQL——约束(constraint)详解)

-- 主表  
mysql> create table t_class(
    -> cno int(10) primary key,
    -> cname varchar(128) not null unique
    -> );

-- 依赖表
mysql> create table t_student(
    -> sno int(10) primary key auto_increment,
    -> sname varchar(32) not null,
    -> classno int(3),
    -> foreign key(classno) references t_class(cno)
    -> );
-- 或者 使用constraint 约束别名 unique(字段名)
mysql> create table t_student(
    -> sno int(10) primary key auto_increment,
    -> sname varchar(32) not null,
    -> classno int(3)-> constraint ’cls_for‘ foreign key (classno) references t_class(cno)
    -> );

注意点

  • 外键字段去引用一张表的某个字段的时候,被引用的字段必须具有unique约束
  • 有了外键引用之后,表分为父表和子表
  • 创建先创建父表,再创建依赖表

3 约束的其它操作

3.1 添加约束

alter table 表名
	add constraint 约束名 约束类型 具体约束说明;

3.2 删除约束

alter table 表名
	frop constraint 约束名;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值