MySQL约束(一)

查看约束

SHOW CREATE TABLE TABLE_NAME

主键约束

  • 主键约束用于定义一个或多个列,这些列可以唯一标识表中的每一行。主键确保指定的列中的值是唯一的,并且不允许为NULL。这个约束对于维护数据完整性和优化查询性能非常重要。

  • 注意事项:

    1. 每个表只能有一个主键约束.

    2. 主键列必须具有唯一的值,并且不允许NULL(除非使用innDB存储引擎且设置了NULL属性,这样允许一个NULL值).

    3. MySQL会自动为主键创建索引,从而提高数据检索的性能.

    4. 在定义由多个列组成的主键时,这些列的值组合必须是唯一的.

  • 使用方法:

-- 在列定义时内联定义主键约束:
CREATE TABLE table_name(
    id INT PRIMARY KEY,
    name VARCAHAR(20)
);
-- 在创建表后添加主键约束:
CREATE TABLE table_name(
    id INT,
    name VARCAHR(20),
    PRIMARY KEY(id)
);
-- 在多个列上创建主键约束:
CREATE TABLE table_name(
    id INT,
    age INT,
    name VARCHAR(20),
    PRIMARY KEY(id,age...)
);

自增长列(标识列)

  • 自增长列是一种特殊的列类型,通常用于主键列(因为并不是所有表在设计完成后都能找到适合作为主键的列),它可以为每个插入的新纪录生成唯一的递增值,自增长列是数值类(int,float,double等),其值是由数据库自动维护的,是永远都不会重复的,因此适合作为主键列.在创建表时,通过 auto_increment 关键字来标识自增长列,在MySQL数据库中自增长列可以是主键列,也可以是唯一列(有唯一约束的列).

  • 特点

    1. 自动生成唯一值:自增长列会在每次插入新记录时自动生成唯一的递增值,确保每条记录都有一个独一无二的标识符。这样可以避免手动指定唯一标识符,简化了数据插入的过程。

    2. 标识列可以通过 SET auto_increment_increment = 3; SET @@auto_increment_increme

      nt = 3; 设置步长(全局),可以通过插入行时手动插入标识列值设置起始值.

    3. 只能有一个:通常情况下,每个表只能有一个自增长列,用作主键列。这样可以确保每条记录都有唯一的标识列,并且便于查询和连接操作

    4. 数值类型限制:自增长列只能应用于数值类型(如整数类型)的列,通常是 INTBIGINT。这是因为自增长的值需要具有递增性质,便于确保唯一性。

-- 在创建表时,可以使用以下语法来定义自增长列:
CREATE TABLE table_name (
  column_name data_type AUTO_INCREMENT PRIMARY KEY,
  other_columns data_type,
  ...
);
-- 设置自增长列的初始值
CREATE TABLE table_name(
cloum_id INT PRIMARY KEY AUTO_INCREMENT,
cloum_name VARCHAR(2)
) AUTO_INCREMENT=10;
-- 设置自增长列的初始值
ALTER TABLE table_name AUTO_INCREMENT = 10;
​
lter table 表名称 modify column id int auto_increment;
-- 删除自增长列
ALTER TABLE 表名称 MODIFY COLUMN id INT;

唯一约束

  • 唯一约束(Unique Constraint)是数据库中的一种约束,用于确保表中的某一列或多列的值是唯一的,不允许重复。唯一约束可以应用于单个列或多个列的组合,它保证了列中的每个值都是唯一的,这意味着任何两行都不会具有相同的唯一约束列值。

  • 特点

    1. 唯一性:唯一约束确保列中的每个值都是唯一的,不允许重复。这意味着数据库将拒绝插入或更新操作,如果违反唯一约束条件。

    2. 可以为空:唯一约束可以应用于允许空值(null)的列,但对于允许空值的列,多个空值是允许的,它们不会违反唯一约束。

    3. 可以在主键列上使用:唯一约束和主键约束有所不同,但主键约束实际上是一种特殊的唯一约束,它要求列是非空的、唯一的,且在表中每个记录都有唯一标识。

    4. 唯一约束创建后会自动创建一个唯一索引

-- 在创建表时定义唯一约束的示例:
CREATE TABLE example_table (
  id INT PRIMARY KEY AUTO_INCREMENT,
  column1 VARCHAR(50) UNIQUE,
  column2 INT,
  ...
);
​
​
CREATE TABLE `table_name` (
    `id` int NOT NULL,
`name` varchar(20),
constraint uq_name unique(name), #唯一约束
);
​
alter table table_name add constraint uq_name unique(列名);
-- 删除唯一约束
ALTER TABLE tb_name DROP CONSTRAINT constraint_name;
[alter table 表名称 drop index 设置唯一时的名称;] -- 删索引

默认约束

  • 默认约束是数据库中的一种约束,它用于在插入新记录时,为表的某一列设置默认值。如果在插入新记录时没有显式提供该列的值,数据库会使用默认约束定义的值来填充该列。默认约束可以应用于单个列或多个列,对于允许空值的列同样有效,如果已经定了值,默认值就无效了.

  • 特点

    1. 自动填充默认值:如果在插入新记录时没有提供具体的列值,数据库会自动填充默认约束定义的默认值

    2. 自动填充默认值:如果在插入新记录时没有提供具体的列值,数据库会自动填充默认约束定义的默认值

    3. 默认约束能和主键约束可以同时存在

    4. 默认约束不能和 AUTO_INCREMENT 同时使用

    5. 默认值类型要匹配:默认约束定义的默认值必须与列的数据类型相匹配。例如,不能将字符串类型的默认值赋给整数类型的列

    6. 覆盖默认值:如果在插入新记录时提供了具体的列值,将会覆盖默认约束定义的默认值。

-- 创建表时
CREATE TABLE `table_name` (
`id` int DEFAULT NULL,# 默认约束
`name` varchar(20) unique,
);
​
alter table table_name modify increment 列名 列类型 default 默认值;
-- 删除
alter table 表名称 modify column 列名 列类型; -- 将默认值改为 NULL
ALTER TABLE tb_name ALTER col_name DROP DEFAULT; -- 删除了默认值,新增时必须有值

非空约束

  • 非空约束是数据库中的一种约束,用于确保表的某一列不允许包含空值(NULL)。非空约束要求该列的值在插入新记录时必须存在且不能为空,否则数据库会拒绝插入或更新操作,从而保证该列中的值是有效的且不为空。例如学生表的学生姓名及学号等等

  • 可以与其他约束结合使用:非空约束可以与其他约束(如主键约束、唯一约束等)结合使用,确保表的数据完整性和一致性。

  • 可以应用于多个列:非空约束可以应用于多个列,确保这些列的值都不能为 NULL。

-- 创建表时
CREATE TABLE `table_name` (
`id` int NOT NULL, # 非空约束
`name` varchar(20),
);
​
alter table 表名称 modify column 列名 列类型 not null;
​
-- 删除
alter table 表名称 modify column 列名 列类型 [null];

外键约束

  • 外键约束是数据库中的一种约束,用于建立表与表之间的关联关系,确保一个表中的数据在另一个表中有对应的匹配数据。外键约束是表与表之间建立引用关系的一种方式,它保证了数据的完整性和一致性。

  • A表中列的值来自于另外一张表B的主键或唯一键的列称为 外键FK,将被引用值得表称为

    主表或父表,将引用值得表称为从表或子表。 例如: emp 表中有 deptno 列,值来自于 de

    pt 表的 主键 deptno 。 dept 是主表, emp 是从表。

  • 在 userinfo 表中添加或修改时, dept_no 列的值必须是 dept 表中 deptno 字段中的

    存在值或者 NULL

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

-- 创建表时
CREATE TABLE `dept`(
dept_no INT PRIMARY KEY,
dept_name VARCHAR(20),
)
CREATE TABLE `emp` (
`id` int NOT NULL,
`name` varchar(20),
`dept_no` int,
CONSTRAINT fk_dept_no FOREIGN KEY(deptP_no) REFERENCES dept(dept_no)
);
​
alter table userinfo add constraint fk_dept_no foreign key (dept_no) REFERENCES dept(deptno);
-- 删除
ALTER TABLE tb_name DROP CONSTRAINT constraint_name;
alter table 表名称 drop foreign key 设置外键时的名称;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值