mysql约束,主键,外键

本文详细介绍了MySQL中的各种约束,包括主键、唯一、非空和外键,以及它们的作用、创建和修改方法。重点讲解了主键的唯一性和非空特性,并探讨了级联约束在外键关联中的应用。适合初学者理解数据库设计最佳实践。

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

mysql学习笔记2

约束

数据库表约束:对表中的数据进行限制,保证数据的正确性、有效性和完整性,一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。

约束名约束关键字
主键primary key
唯一unique
非空not null
外键foreign key
检查约束check 注:mysql 不支持

主键的作用

用来唯一标识数据库中的每一条记录;

主键关键字: primary key

主键的特点:

  1. 非空 not null
  2. 唯一 unique
主键的增删改语法:
创建表时设置主键:
(俩种:一种直接跟在字段后面加上primary key 第二种 在最后一句加上primary key (id)):
create table st4 (
   id int primary key auto_increment,
   name varchar(20)
   --primary key(id)
 ) auto_increment = 1000; 
 
创建好以后修改(increment)起始值:
alter table st4 auto_increment = 2000;

-- 删除st5表的主键 
alter table st5 drop primary key;

-- 和添加主键 
alter table st5 add primary key(id);

注意:设置auto_increment自增后,delete 和truncate对自增是俩种影响
DELETE:删除所有的记录之后,自增长没有影响,自增长不重置,
TRUNCATE:删除以后,自增长又重新开始。自增长重置为初始,

主键数在一个表中,只能有一个。但这一个主键可以单列,也可以是多列。
自增长只能用在主键上;

唯一约束:unique

创建表的时候添加唯一约束:在字段后面直接加上unique
create table st7 (
   id int,
   name varchar(20) unique
 ) 
 
 注意:多个null并不重复,因为null没有数据

非空约束:not null

创建表学生表st8, 包含字段(id,name,gender)其中name不能为NULL 
create table st8 (
  id int,  
  name varchar(20) not null,
  gender char(1)
 ) 

默认值:default

 创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州 
create table st9 (
   id int,
   name varchar(20),
   address varchar(20)  default '广州' 
) 
 
-- 添加一条记录,使用默认地址 
insert into st9 values (1, '李四', default); 
select * from st9; 
 
insert into st9 (id,name) values (2, '李白'); 
 
-- 添加一条记录,不使用默认地址

外键约束:

当表内数据需要借助其他表数据来表示的时候 ,应对该表内的数据进行外键约束(防止设置非法数据,在另一个表内无法查到) 但也可以不设置外键约束…依旧还可以认为他是外键

创建外键约束的语法:

新建表时增加外键:(在[ ]内的字段属于可填可不填)
[CONSTRAINT] [外键约束名称] FOREIGN KEY 已有表增加外键:
ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主 键字段名);

创建一个dep_id的外键约束,主表是department:

create table employee(
  id int primary key auto_increment,
  name varchar(20),
  age int,
  dep_id int,  -- 外键对应主表的主键
  -- 创建外键约束
  constraint emp_depid_fk foreign key (dep_id) references department(id)
 ) 
 
 -- 删除employee表的emp_depid_fk外键 
alter table employee drop foreign key emp_depid_fk; 
 
-- 在employee表情存在的情况下添加外键 
alter table employee add constraint emp_depid_fk foreign key (dep_id) references department(id); 
外键的级联
create table employee(
  id int primary key auto_increment,
  name varchar(20),
  age int,
  dep_id int,  -- 外键对应主表的主键
  -- 创建外键约束
  constraint emp_depid_fk foreign key (dep_id) references department(id) ON UPDATE CASCADE
 ) 

结尾加上on update cascade或on delete cascade俩种情况,同时级联的关系有四种;no action,cascade,...
 
alter table 参照表
Add constraint 外键
Foreign key( 外键名) references 被参照表(主键)
on update cascade  --级联更新 
on delete cascade  --级联删除 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值