查看约束
SHOW CREATE TABLE TABLE_NAME
主键约束
-
主键约束用于定义一个或多个列,这些列可以唯一标识表中的每一行。主键确保指定的列中的值是唯一的,并且不允许为NULL。这个约束对于维护数据完整性和优化查询性能非常重要。
-
注意事项:
-
每个表只能有一个主键约束.
-
主键列必须具有唯一的值,并且不允许NULL(除非使用innDB存储引擎且设置了NULL属性,这样允许一个NULL值).
-
MySQL会自动为主键创建索引,从而提高数据检索的性能.
-
在定义由多个列组成的主键时,这些列的值组合必须是唯一的.
-
-
使用方法:
-- 在列定义时内联定义主键约束: 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数据库中自增长列可以是主键列,也可以是唯一列(有唯一约束的列).
-
特点
-
自动生成唯一值:自增长列会在每次插入新记录时自动生成唯一的递增值,确保每条记录都有一个独一无二的标识符。这样可以避免手动指定唯一标识符,简化了数据插入的过程。
-
标识列可以通过 SET auto_increment_increment = 3; SET @@auto_increment_increme
nt = 3; 设置步长(全局),可以通过插入行时手动插入标识列值设置起始值.
-
只能有一个:通常情况下,每个表只能有一个自增长列,用作主键列。这样可以确保每条记录都有唯一的标识列,并且便于查询和连接操作
-
数值类型限制:自增长列只能应用于数值类型(如整数类型)的列,通常是
INT
或BIGINT
。这是因为自增长的值需要具有递增性质,便于确保唯一性。
-
-- 在创建表时,可以使用以下语法来定义自增长列: 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)是数据库中的一种约束,用于确保表中的某一列或多列的值是唯一的,不允许重复。唯一约束可以应用于单个列或多个列的组合,它保证了列中的每个值都是唯一的,这意味着任何两行都不会具有相同的唯一约束列值。
-
特点
-
唯一性:唯一约束确保列中的每个值都是唯一的,不允许重复。这意味着数据库将拒绝插入或更新操作,如果违反唯一约束条件。
-
可以为空:唯一约束可以应用于允许空值(null)的列,但对于允许空值的列,多个空值是允许的,它们不会违反唯一约束。
-
可以在主键列上使用:唯一约束和主键约束有所不同,但主键约束实际上是一种特殊的唯一约束,它要求列是非空的、唯一的,且在表中每个记录都有唯一标识。
-
唯一约束创建后会自动创建一个唯一索引
-
-- 在创建表时定义唯一约束的示例: 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 设置唯一时的名称;] -- 删索引
默认约束
-
默认约束是数据库中的一种约束,它用于在插入新记录时,为表的某一列设置默认值。如果在插入新记录时没有显式提供该列的值,数据库会使用默认约束定义的值来填充该列。默认约束可以应用于单个列或多个列,对于允许空值的列同样有效,如果已经定了值,默认值就无效了.
-
特点
-
自动填充默认值:如果在插入新记录时没有提供具体的列值,数据库会自动填充默认约束定义的默认值
-
自动填充默认值:如果在插入新记录时没有提供具体的列值,数据库会自动填充默认约束定义的默认值
-
默认约束能和主键约束可以同时存在
-
默认约束不能和 AUTO_INCREMENT 同时使用
-
默认值类型要匹配:默认约束定义的默认值必须与列的数据类型相匹配。例如,不能将字符串类型的默认值赋给整数类型的列
-
覆盖默认值:如果在插入新记录时提供了具体的列值,将会覆盖默认约束定义的默认值。
-
-- 创建表时 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 设置外键时的名称;