MySQL约束篇

MySql 约束

1.主键约束 primary key

特点:

  • 不允许重复
  • 不允许为null
  • 一个表只能有一个主键约束

语法:

-- 添加约束
-- 在创建表时:
-- 方式一:
create  table [表名]  (
	id  int  PRIMARY KEY,
	name varchar(10)
);
-- 方式二:
create table [表名] (
	id  int ,
	name varchar(10),
	PRIMARY KEY(id)
);
-- 方式三:
-- 通过为主键列指定约束名称,可以在以后引用该约束名称进行约束的删除、修改等操作。
create table  [表名] (
	id  INT ,
	name varchar(10),
	constraint pk_name  primary key(id)
);


-- 修改列为主键
-- 方法一:
alter table [表名]  modify id  int primary key;
-- 方法二:
alter table [表名] add primary key(id);
-- 方式三:
alter table [表名] add contraint pk_name  primary key(id);

-- 删除主键约束
-- 方法一:较为推荐
alter table [表名] drop primary key;
-- 方法二:
alter table [表名] modify id int;

自增长列

特点:

  • 必须和一个key搭配使用
  • 一个表最多只能有一个标识列
  • 只能是数值型
  • 可以自定义步长
  • 可以设置自增长列初始值

语法:

-- 添加自增长列
-- 在创建表时
create table [表名] (
  id int   primary  key  auto_increment,
  name varchar(10),
);

-- 修改列属性
alter table [表名] modify id int primary key auto_increment;


-- 删除自增长列
alter table [表名] modify id int primary key;

-- 设置自增长列步长
set auto_increment_increment = 2

-- 设置自增长列初始值
-- 在创建表时设置
create table [表名] (
  id int   primary  key  auto_increment,
  name varchar(10),
) auto_increment 8;


alter table [表名] set auto_increment = 10;

2.唯一约束 unique

唯一约束:当要求列名中的字段不能重复时,使用唯一约束

特点:

  • 可以设置多个
  • 设置唯一约束的列名,值不能重复
  • 可以为null

注意:在添加唯一约束时,请确保要添加的列中没有重复的数据

语法:

-- 添加唯一约束
-- 在创建表时添加
-- 方法一
create table [表名](
	id int primary key ,
        name varchar(10) unique
);

-- 方法2
--  constraint给约束命名,下次使用时可以直接用约束名
--  如果不起约束名,那么唯一约束的约束名为列名
create table [表名](
	id int primary key ,
        name varchar(10) ,
        constraint  un_name unique (name);
);

--  修改列属性
alter table [表名] add unique(name);
alter table [表名] add constraint uq_name unique(name);
alter table [表名] modify name varchar(10) unique;

-- 删除列的唯一索引
alter table [表名] modify name varchar(10);
alter table [表名] drop index 唯一约束的名称,没有设置就是列名

3.默认约束 default

默认约束,为列设置默认值,在添加数据时如果没有给设置默认约束的列添加数据,则此列的值为默认值

  • 默认约束能和主键约束可以同时存在
  • 默认约束不能和 AUTO_INCREMENT 同时使用

语法:

-- 创建表时
create table [表名](
	id int default 1,
        name varchar(10)
);
-- 修改列属性
alter table 表名称 modify column 列名 列类型 default 默认值;
-- 删除
alter table 表名称 modify column 列名 列类型;

4.非空约束 not null

设置该约束,代表此列的值不能为空

语法:

-- 创建表时
create table [表名](
	id int not null default 1,
        name varchar(10)
);

-- 修改列属性
alter table 表名称 modify column 列名 列类型 not null;
-- 删除
alter table 表名称 modify column 列名 列类型;

5.外键约束 foreign key

A表中的列值来自另一张表B的主键或者唯一键,将被引用值的表称为主表从表,引用值得表称为从表子表

语法:

-- 首先创建主表
create table dept(
	dept_no int primary key,
        dept_name varchar(10) 
);
-- 再去创建从表
create table emp(
	emp_no int primary key,
        emp_name varchar(10),
        dept_id int,
        constraint  fk_dept_no foreign key(dept_id) references dept(dept_no)
);


-- 添加外键约束
alter table dept add constraint fk_dept_no  foreign key(dept_id) references dept(dept_no);

dept 表是主表,emp 是从表

  • 在emp表中,要给dept_id添加数据时,必须是dept表中存在的数据或者是null

  • 从表中的数据可以直接删除

  • 主表中的删除dept_no列的数据时,应该先检查是否在从表中被引用,如果被引用则不能直接删除

  • 如果要删除,可以使用级联删除,当删除主表中的数据时,从表中引用主表数据的行也会被删除

    只需在创建表时加上ON DELETE CASCADE或者修改列属性时

级联删除代码:

 CONSTRAINT `fk_dept_no` FOREIGN KEY (`dept_id`) REFERENCES `dept` (`dept_no`) ON DELETE CASCADE

级联更新:

当主表中的数据被修改时,那么从表中与之相关联的数据也会被修改

代码

ON DELETE CASCADE

如果级联删除和更新同时使用,将它们两依次写上

6.细节补充

如果只想要让一个列是唯一的使用unique(列名)

在MySQL中,使用唯一约束时,如果要在多个列上创建唯一约束,可以使用 UNIQUE 关键字

CREATE TABLE table_name (  
  column1 VARCHAR(50) NOT NULL,  
  column2 VARCHAR(50) NOT NULL,  
  UNIQUE (column1, column2)  
);

这将确保 column1column2 两列的组合在表中是唯一的。

如果您已经创建了一个表,并想在已有的列上添加唯一约束,可以使用 ALTER TABLE 语句,例如:

ALTER TABLE table_name  
ADD UNIQUE (column1, column2);

这将向 table_name 表中添加一个唯一约束,确保 column1column2 两列的组合是唯一的。

在查看表结构时,如果约束被正确添加,您应该能在 key 列中看到 MUL(表示多个列的唯一约束)而不是 UNI(表示单列的唯一约束)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值