MYSQL对六个约束的理解 (笔记)

 六个约束

目录

PRIMARY KEY约束

NOT NULL 约束

DEFAULT 约束

UNIQUE 约束

 CHECK 约束

FOREIGN KEY 外键约束:


PRIMARY KEY约束

PRIMARY KEY约束又称主键约束,定义表中构成主键的一列或者多列。主键用于唯一标识表示每条记录,作为主键的字段值,不能为空且必须唯一。

一 、首先是教你如何创建主键约束

        在 CREATE TABLE 语句中,主键是通过 PRIMARY KEY 关键字来指定。

        语法create table 表名

               (字段1 字段类型 PRIMARY KEY ,#-----设置它为主键,

                字段2 字段类型     [comment 字段3注释],    # [ ] 这个注释可以省略不写 但最好加上

                字段3 字段3类型   [comment 字段3注释]     #最后一个不需要,

                );

select * from py_key;#查看表

另外一种就是在已创建好的表上添加主键

( Alter table 表名 drop primary key;)语句 删除表中的主键

  然后重新输入

ALTER TABLE <数据表名> ADD PRIMARY KEY(<列名>); 小括号别忘记

  ps:如果在ID内加入一个自增(AUTO_INCREMENT属性)的主键,想删除的话,要先将这个列的自动增长属性去掉,才可以删除主键。

# modify:只能用于修改字段的属性

  alter table 表明 modify 字段 字段属性;

例如 

表示 此列是自动增长列,无法直接删除

列的属性还带有AUTO_INCREMENT,那么要先将这个列的自动增长属性去掉,才可以删除主键

我们可以用   alter table 表明 modify 字段 字段属性; 修改他的自增属性,然后在删除主键 

 修改完之后还是存在主键,此时我们可以用,删除主键啦!

alter table pr_key drop primary key;

复合主键             

1.问主键可不可以有多个?

        答案是 NO, 主键本身不能有多个,但可以有多个列进入到主键当中。可以有多个列设置为主键,成为联合主键。

语句是:

create table pr_key
(
    ID     INT auto_increment comment '主键',#-----设置它为主键
    IDcard int         not null,
    Name   varchar(30) NOT NULL,
    price  DECIMAL(8, 2),
    primary key (ID,IDcard) # 复合主键
);

联和主键           

      与复合主键不同,他常出现于多表之间的链接,而复合主键只体现在一个表中的多个字段间链接。

create table student01(
id int auto_increment comment '主键id',
name varchar(30) comment '姓名',
age smallint comment '年龄', # smallint 大小为 2bytes ,int/integer 为5 bytes
primary key(id)
)COMMENT '学生表';

create table course01(
id int auto_increment comment '主键id',
name varchar(30) comment '课程名称',
primary key(id)
)comment '课程表';

create table  stu_cour01(
id int  auto_increment comment '主键id',
stu_id mediumint comment '学生表id',#mediumint  3(24bit)	加上unsigned/zerofill:8
cour_id mediumint comment '课程表id',                    # 不加unsigned/zerofill:9
primary key(id)                                
)comment '学生课程表';

摘抄CSDN博主「迷你酷吧」的文章的一句话 觉得很好
原文链接:https://blog.csdn.net/weixin_43381988/article/details/119733989

        此时stu_course01中id就表示联合主键,通过id可以获取学生和课程的一条记录所以联合主键,顾名思义就是多个主键联合形成一个主键组合,体现在联合。 (主键原则上是唯一的,别被唯一值所困扰) 索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。 简单的例子 主键A跟主键B组成联合主键C,主键A跟主键B的数据可以完全相同,联合就在于主键A跟主键B形成的联合主键C是唯一的

NOT NULL 约束

非空约束(NOT NULL):指定字段不能为空

创建表时设置非空约束

       

 CREATE TABLE <数据表名> 
(
 字段1,字段属性 PRIMARY KEY; #如果设置主键就不用设置NOT NULL ,因为主键本身就有非空的属性
 字段2,字段属性 NOT NULL;
 ···
);

给表中添加非空约束

        

ALTER TABLE <数据表名> CHANGE COLUMN <旧字段名> <新字段名> <数据类型> NOT NULL;

例如           

修改 列的名字 列类型的变更 change column
ALTER TABLE pr_key CHANGE COLUMN price price decimal NOT NULL;

DEFAULT 约束

(6条消息) SQL研习录(23)——默认值约束(DEFAULT)_默认约束的基本语法格式_清风不渡的博客-CSDN博客https://blog.csdn.net/WXKKang/article/details/103871208?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167774584616800213055605%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167774584616800213055605&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-103871208-null-null.142%5Ev73%5Einsert_down4,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=DEFAULT%20%E7%BA%A6%E6%9D%9F&spm=1018.2226.3001.4187

UNIQUE 约束

作用:通常用于用户名,可以防止用户名重复的情况出现。

需要注意的是unique可以有多个且设置唯一约束的列允许有空值,但是只能有一个空值。

语句 :


CREATE  TABLE 表明(
    字段名 字段属性 PRIMARY KEY AUTO_INCREMENT COMMENT'',
    字段名 字段属性 not null unique
) ;

例句:

CREATE TABLE users(
    uID int(11) PRIMARY KEY AUTO_INCREMENT COMMENT '用户名',
    uName varchar(30) NOT NULL UNIQUE,----定义为唯一约束
    uPwd varchat(30) not null,
    uSex ENUM('男','女')DEFAULT '男' 
);

增加/删除 UNIQUE 约束

ALTER TABLE <数据表名> ADD CONSTRAINT <字段名> UNIQUE(<列名>);

ALTER TABLE <数据表名> DROP CONSTRAINT <唯一约束名 / 字段名>;

 CHECK 约束

(6条消息) MySql -- check 约束_mysql check约束__im.m.z的博客-CSDN博客https://blog.csdn.net/weixin_44681025/article/details/123036222?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167775376416800227437610%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167775376416800227437610&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-123036222-null-null.142%5Ev73%5Einsert_down4,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=mysql%20check&spm=1018.2226.3001.4187

FOREIGN KEY 外键约束:

了解它的语句:

foreign key (子表的字段) references 父表名称(父表字段给) on delete cascade on update cascade

#NO ACTION  当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与 RESTRICT一致)

#RESTRICT 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。
(与 NO ACTION 一致)

#ASCADE  当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。

#SET NULL 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为nul (这就要求该外键允许取nul)

#SET DEFAULT  父表有变更时,子表将外键列设置成一个默认的值(innodb不支持)

添加外键表有2种方式

一个是创建表时添加

CREATE TABLE 表明(

        字段名 数据类型,

        ····

        FOREIGN KEY (外键字段名)  主表(主表列名)

);

第2中方法就是在已创建好的表中添加

ALRER TABLE 表明 ADD CONSTRAINT 外键名

      FOREIGN KEY(外键字段民) REFERENCES 主表(主表字段);

注意如果报出 1822 的错误
 

原因:作为被引用的外键,它必须是唯一值,因此得添加约束unique或者primary key.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值