1.如何查看约束


SHOW CREATE TABLE table_name


mysql给主键设置排序规则 mysql怎样设置主键_主键

下面是添加了主键的展示

mysql给主键设置排序规则 mysql怎样设置主键_自增长_02

一、主键约束

  • 主键约束最显著的特征是主键列中的值是不允许重复(唯一)的,通过主键约束可强制表 的实体完整性。
  • 当创建或更改表时可通过定义 primary key约束来创建主键。一个表只 能有一个primary key约束,且primary key约束中的列不能接受NULL值。

alter table tab_name add constraint pk_name primary key (deptno);


1.如何设置主键
1.创建表时设置主键


CREATE TABLE `表名`( `id` int [NOT null] PRIMARY KEY,  --设置主键    `name` varchar(20) );


mysql给主键设置排序规则 mysql怎样设置主键_表名_03


CREATE TABLE `table_name` ( `id` int [NOT NULL], `name` varchar(20) , PRIMARY KEY (`id`) -- 设置主键 );


CREATE TABLE `table_name` ( `id` int [NOT NULL], `name` varchar(20) , constraint pk primary key(id) -- 设置主键 );


mysql给主键设置排序规则 mysql怎样设置主键_表名_04

2.通过ALTER TABLE修改列属性设置主键


ALTER TABLE emp MODIFY empno INT PRIMARY KEY; -- 修改列的属性来添加主键约束


mysql给主键设置排序规则 mysql怎样设置主键_自增长_05

成功添加主键约束


ALTER TABLE dept ADD CONSTRAINT pk_name PRIMARY KEY(deptno);


mysql给主键设置排序规则 mysql怎样设置主键_表名_06

3.删除主键约束


-- 删除主键 ALTER TABLE 表名 DROP PRIMARY KEY; -- 主键是唯一的,可以这样删除


mysql给主键设置排序规则 mysql怎样设置主键_mysql给主键设置排序规则_07

二、自增长列(标识列)

并不是所有表在设计完成后都能找到适合作为主键的列,为此数据库提供了自增长列,自 增长列是数值类型( INT , FLOAT , DOUBLE 等)的,其值是由数据库自动维护的,是永远都不 会重复的,因此自增长是最适合作为主键列的。在创建表时,通过 auto_increment 关键 字来标识自增长列,在MySQL数据库中自增长列可以是主键列,也可以是唯一列(有唯一 约束的列)。

特点:

  1. 标识列必须和一个key搭配(key指主键、唯一、外键)
  2. 一个表最多有一个标识列
  3. 标识列的类型只能是数值型
  4. 标识列可以通过 SET auto_increment_increment = 3; SET @@auto_increment_increme nt = 3; 设置步长(全局),可以通过插入行时手动插入标识列值设置起始值。
    (思 考:什么情况下此设置会失效)

如果设置步长会从 1 + 步长 依次递增。

** 如果表中已有数据,会按照 1 + 步长进行计算,如果这个 值 已有则再加直到没有**

自增长与主键

1.创建


CREATE TABLE 表名( id INT PRIMARY KEY AUTO_INCREMENT, name varchar(20), age INT );


mysql给主键设置排序规则 mysql怎样设置主键_表名_08

2.设置初始值


-- 创建设置 CREATE TABLE temp( id INT PRIMARY KEY AUTO_INCREMENT, age INT )AUTO_INCREMENT=10; -- 添加 ALTER TABLE emp AUTO_INCREMENT; alter table 表名称 modify column id int auto_increment;


mysql给主键设置排序规则 mysql怎样设置主键_表名_09

3.删除自增长列


ALTER TABLE 表名 MODIFY COLUMN id INT;


mysql给主键设置排序规则 mysql怎样设置主键_自增长_10

三、唯一约束

当非主键列要求唯一性时,就需要唯一性约束。

1.创建唯一约束


-- 创建表时 (第一种不建议) CREATE TABLE `table_name` ( `id` int NOT NULL, `name` varchar(20) UNIQUE, # 唯一约束 ); CREATE TABLE `table_name` ( `id` int NOT NULL, `name` varchar(20), constraint uq_name unique(name), #唯一约束 );


mysql给主键设置排序规则 mysql怎样设置主键_表名_11

2.修改唯一约束


alter table 表名称 ADD unique(列名称); ALTER TABLE dept ADD CONSTRAINT uq_name UNIQUE(deptname);


mysql给主键设置排序规则 mysql怎样设置主键_主键_12

3.删除唯一约束


-- 删除唯一约束 ALTER TABLE tb_name DROP CONSTRAINT constraint_name; [alter table 表名称 drop index 设置唯一时的名称;] -- 删索引


mysql给主键设置排序规则 mysql怎样设置主键_表名_13

  • 唯一约束值不能重复
  • 可以存在多个空值(NULL) 的数据
  • 一张可以有多个唯一约束列
  • 约束默认的名称是其列名
  • 唯一约束创建后会自动创建一个唯一索引

四、默认约束

为列中的值设置默认值,default ....,如果已经定了值,默认值就无效了

1.创建默认约束


-- 创建表时 CREATE TABLE `table_name` ( `id` int DEFAULT NULL,# 默认约束 `name` varchar(20), );


mysql给主键设置排序规则 mysql怎样设置主键_mysql给主键设置排序规则_14

在创建时默认约束一般跟在列后面直接设置

2.修改默认约束


alter table 表名称 modify column 列名 列类型 default 默认值;


mysql给主键设置排序规则 mysql怎样设置主键_自增长_15

如图所示我们给id添加了默认约束让他的默认值为10

3.删除默认约束


alter table 表名称 modify column 列名 列类型; -- 将默认值改为 NULL ALTER TABLE tb_name ALTER col_name DROP DEFAULT; -- 删除了默认值,新增时必须有值


mysql给主键设置排序规则 mysql怎样设置主键_mysql给主键设置排序规则_16

五、非空约束

NOT NULL :非空,用于保证该字段的值不能为空。

非空约束一般也跟在后面写

1.创建非空约束


-- 创建表时 CREATE TABLE `table_name` ( `id` int NOT NULL, # 非空约束 `name` varchar(20), );


mysql给主键设置排序规则 mysql怎样设置主键_mysql给主键设置排序规则_17

2.修改非空约束


alter table 表名称 modify column 列名 列类型 not null;


mysql给主键设置排序规则 mysql怎样设置主键_主键_18

注意修改时,要看表内数据是否满足非空约束,不满足时会报错

3.删除非空约束


-- 删除 alter table 表名称 modify column 列名 列类型 [null];


mysql给主键设置排序规则 mysql怎样设置主键_表名_19

非空约束的效果

mysql给主键设置排序规则 mysql怎样设置主键_自增长_20

六、外键约束

A表中列的值来自于另外一张表B的主键或唯一键的列称为 外键FK,将被引用值得表称为 主表或父表,将引用值得表称为从表或子表。 例如: emp 表中有 deptno 列,值来自于 de pt 表的 主键 deptno 。 dept 是主表, emp 是从表。

1.创建外键约束


-- 创建表时 CREATE TABLE `dept`( dept_no INT PRIMARY KEY, dept_name VARCHAR(20), ) CREATE TABLE `emp` ( `id` int NOT NULL, `name` varchar(20), `deptno` int, CONSTRAINT fk_dept_no FOREIGN KEY(deptno) REFERENCES dept(dept_no) );


mysql给主键设置排序规则 mysql怎样设置主键_主键_21

2.修改外键约束


alter table userinfo add constraint foreign key fk_dept_no (dept_no) REFERENCES dept(deptno);


3.删除外键约束


-- 删除 ALTER TABLE tb_name DROP CONSTRAINT constraint_name; alter table 表名称 drop foreign key 设置外键时的名称;


mysql给主键设置排序规则 mysql怎样设置主键_mysql给主键设置排序规则_22