mysql 非主键外键_sql-约束constraint(非空,唯一,主键,外键,检查)自学笔记...

约束(constraint)即完整性约束

在表上强制执行的数据校验规则,

对表执行DML(insert,update,delete)操作时,如果不符合规则则无法执行。

种类:

非空约束 NOT NULL -> NN

唯一性约束 UNIQUE KEY -> UK

主键约束 PRIMARY KEY -> PK

外键约束 FOREIGN KEY -> FK

检查约束 CHECK KEY -> CK

■ 非空 NOT NULL

要求此项目数据内容不能为空

用法:

1.建表时直接追加

create table user{

'user_id' varchar(8)not null COMMENT '用户id',

'user_name' varchar(32)not null COMMENT '用户名',

'password' varchar(128) COMMENT '密码',

primary key ('user_id') ,

unique key ('user_name')

} ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.对已存在的表增加非空约束

ALTER table user MODIFY(‘password’ varchar(128) not Null);

3.对已存在的表删除非空约束

ALTER table user MODIFY(‘password’ varchar(128) Null);

■ 唯一性约束 unique key

字段或字段的组合不能有重复值(不包括null)

用法

1.建表时直接追加

create table user{

'user_id' varchar(8) not null COMMENT '用户id',

'user_name' varchar(32) not null COMMENT '用户名',

'password' varchar(128) COMMENT '密码',

primary key ('user_id') ,

unique key ('user_name')

} ENGINE=InnoDB DEFAULT CHARSET=utf8;

create table user{

'user_id' varchar(8) not null COMMENT '用户id',

'user_name' varchar(32) not null uniqueCOMMENT '用户名',

'password' varchar(128) COMMENT '密码',

primary key ('user_id')

} ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.对已存在的表增加唯一性约束

ALTER table user ADD unique('user_name');

3.同时对多个字段增加唯一性约束

ALTER table user ADD constraint user_namepwd unique('user_name','password');

■ 主键约束 PRIMARY KEY

一个表中只能有一个主键(可以是单列,也可以是多个字段的组合)

主键:对应的字段既要是not null也要是unique key;尽量是单列;对系统无意义的数据;不要更新主键;不要是动态数据(如时间戳);尽量是自动生成数据,

用途:仅是唯一标识行

1.建表时直接追加

create table user{

'user_id' varchar(8) not nullprimary key COMMENT '用户id',

'user_name' varchar(32) not null COMMENT '用户名',

'password' varchar(128) COMMENT '密码',

unique key ('user_name')

} ENGINE=InnoDB DEFAULT CHARSET=utf8;

create table user{

'user_id' varchar(8) not null COMMENT '用户id',

'user_name' varchar(32) not null COMMENT '用户名',

'password' varchar(128) COMMENT '密码',

primary key ('user_id') ,

unique key ('user_name')

} ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.对已存在的表增加主键约束

create table user{

'user_id' varchar(8) not null COMMENT '用户id',

'user_name' varchar(32) not null COMMENT '用户名',

'password' varchar(128) COMMENT '密码',

unique key ('user_name')

} ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE user ADD constraint pkid primary key ('user_id') ;

3.删除主键

Alter table user Drop Constraint PrimaryKey(默认名);

Alter table user Drop Constraint pkid (主键约束的别名);

■ 外键约束 FOREIGN KEY

两个表的字段,或一个表的2个字段保持相关的关系

主表/父表 PK

从表/子表 FK (子表参照父表数据)

注意事项:子表列的值必须从主表得到,不能为null;主表字段的数据被子表参照使用后,数据不能删除。

1.建表时直接追加

create table note{

'note_id' varchar(8) COMMENT '笔记id',

'notebook_id' varchar(8) COMMENT '笔记本id',

'user_id' varchar(8) COMMENT '用户id',

'note_name' varchar(128) COMMENT '笔记名称',

'note_title' varchar(256) not nullCOMMENT '笔记标题',

'note_text' text not null COMMENT '笔记内容',

'note_status' varchar(8) not null COMMENT '笔记状态',

'creat_time' date default sysdate COMMENT '创建时间',

'current_fixtime' date default sysdate COMMENT '最后修改时间',

primary key ('note_id'),

CONSTRAINT FK_note_notebookid FOREIGN KEY (notebook_id) REFERENCES notebook (notebook_id),

unique key('note_name')

} ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.对已存在的表增加外键约束

ALTER TABLE note ADD constraint FK_note_userid FOREIGN KEY (user_id) REFERENCES user (user_id);

■ 检查约束 check

自定义硬性的检查条件,不满足时DML语句不执行。

ALTER TABLE note ADD CONSTRAINT 'check_notebook_id' CHECK('notebook_id' >100);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计用户信息表(User): | 字段名 | 数据类型 | 约束 | 说明 | | ---------- | -------- | ------------ | ------------ | | id | int | 主键非空唯一 | 用户ID | | username | varchar | 非空唯一 | 用户名 | | password | varchar | 非空 | 密码 | | name | varchar | 非空 | 真实姓名 | | gender | varchar | 非空 | 性别 | | birthday | date | 非空 | 出生日期 | | phone | varchar | 非空 | 手机号码 | | email | varchar | 非空唯一 | 邮箱地址 | | address | varchar | | 地址 | | create_time | datetime | 非空 | 注册时间 | 设计银行卡信息表(BankCard): | 字段名 | 数据类型 | 约束 | 说明 | | -------- | -------- | ------------ | ------------ | | id | int | 主键非空唯一 | 银行卡ID | | user_id | int | 非空外键 | 用户ID | | card_num | varchar | 非空唯一 | 银行卡号 | | balance | decimal | 非空、默认为0 | 银行卡余额 | | create_time | datetime | 非空 | 银行卡开户时间 | 设计交易信息表(Transaction): | 字段名 | 数据类型 | 约束 | 说明 | | ------------ | -------- | ------------ | ---------------- | | id | int | 主键非空唯一 | 交易ID | | user_id | int | 非空外键 | 用户ID | | card_num | varchar | 非空外键 | 银行卡号 | | trans_type | varchar | 非空 | 交易类型(存款、取款、转账) | | trans_amount | decimal | 非空 | 交易金额 | | trans_time | datetime | 非空 | 交易时间 | 三个表之间的约束: - 用户信息表(User)与银行卡信息表(BankCard)的关系为一对多关系,即一个用户可以拥有多张银行卡,银行卡信息表(BankCard)中的user_id为外键,指向用户信息表(User)中的id。 - 银行卡信息表(BankCard)与交易信息表(Transaction)的关系为一对多关系,即一张银行卡可以进行多次交易,交易信息表(Transaction)中的card_num为外键,指向银行卡信息表(BankCard)中的card_num。 - 用户信息表(User)与交易信息表(Transaction)的关系为一对多关系,即一个用户可以进行多次交易,交易信息表(Transaction)中的user_id为外键,指向用户信息表(User)中的id。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值