MySQL_约束

版权声明:由于作者水平有限,文中难免有误,欢迎各位业界同仁斧正! https://blog.csdn.net/UserPython/article/details/82793921

约束的介绍

  • 约束是一种限制,他通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性

约束的类型

  • MySQL中常用的几种约束类型:
约束类型 非空约束 主键约束 唯一约束 默认约束 外键约束
关键字 NOT NULL PRIMARY KEY UNIQUE DEFAULT FOREIGN KEY

NOT NULL : 被非空约束的列是不能为空的
PRIMARY KEY : 约束表中的一行,通过主键能准确定位到表中的一行数据,一个表只能有一个PRIMARY KEY,如果表中没有设置主键,而某些程序需要主键,MySQL将返回第一个没有任何NULL列的UNIQUE键,作为主键
UNIQUE:规定一张表当中,指定的一列的值不能有重复,每一个值都是唯一的
DEFAULT:当插入数据时,如果没有明确为字段赋值,自动赋予默认值
FOREIGN KEY:用来两个表的数据之间建立连接,可以确保两个数据表之间的完整性和一致性

非空约束

空值与非空

  • NULL:字段值可以为空
  • NOT NULL:字段值禁止为空
  • 非空约束指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时,没有指定值,数据库系统会报错。

语法规则:
列名 数据类型 NOT NULL

创建表时添加非空约束

CREATE TABLE bookinfo(
  book_id INT,
  book_name VARCHAR(20) NOT NULL
);

创建时没有指定非空约束可以通过修改表为指定列添加非法空约束

CREATE TABLE bookinfo(
  book_id INT,
  book_name VARCHAR(20)
);


ALTER TABLE bookinfo MODIFY book_name VARCHAR(20) NOT NULL;

删除非空约束

ALTER TABLE bookinfo MODIFY book_name VARCHAR(20) [NULL];

主键约束

  • 主键约束要求主键列的数据唯一,并且不允许为空,主键能够唯一地标识表中的一条记录

主键的类型

  • 主键分为单字段主键多字段联合主键
    单子段主键
  • 单子段主键是由一个字段(列)组成

在定义列的同时指定主键
列名 数据类型 PRIMARY KEY;

在列定义的后边指定主键
[CONSTRAINT <约束名> PRIMARY KEY (列名);

在这里插入图片描述

多字段联合主键(或者叫复合主键)

  • 主键有多个字段(列)联合组成

PRIMARY KEY(字段1, 字段2,…字段n);

  • 例:
    CREATE TABLE borrowinfo(
      book_id INT,
      card_id CHAR(18),
    PRIMARY KEY(book_id, card_id)
    );

如果在创建表时没有指定主键,可以通过修改表为列添加主键

CREATE TABLE bookinfo(
  book_id INT,
  book_name VARCHAR(20) NOT UNLL
);
有三种方式:

  • ALTER TABLE bookinfo MODIFY book_id INT PRIMARY KEY;
  • ALTER TABLE bookinfo ADD PRIMARY KEY(book_id);
  • ALTER TABLE bookinfo ADD CONSTRAIN PK_ID PRIMARY KEY(book_id);

删除主键

ALTER TABLE bookinfo DROP PRIMARY KEY;

唯一约束

  • 唯一约束要求该列唯一,允许为空,唯一约束可以确保一列或者几列不出现重复值
  • 语法规则如下:

定义完列之后直接指定唯一约束
 列名 数据类型 UNIQUE


定义完所有列之后指定唯一约束
[CONSTRAINT <约束名>] UNIQUE(<列名>)

  • 创建表时添加唯一约束

create table bookinfo(
  book_id INT PRIMARY KEY,
  book_name varchar(20) UNIQUE NOT NULL
);
或者:
create table bookinfo(
  book_id INT PRIMARY KEY,
  book_name VARCHAR(20) NOT NULL,
  CONSTRINT uk_bname UNIQUE(book_name)
);

如果创建表时没有指定唯一约束,可以通过修改表添加唯一约束

1、ALTER TABLE bookinfo MODIFY book_name varchar(20) UNIQUE;
2、ALTER TABLE bookinfo ADD UNIQUE(book_name);
3、ALTER TABLE bookinfo ADD CONSTRAINT uk_name UNIQUE(book_name);

删除唯一约束

ALTER TABLE bookinfo DROP INDEX uk_bname
ALTER TABLE bookinfo DROOP KEY uk_bname

唯一约束和主键约束的区别

  • 一个表中可以有多个UNIQUE声明,但只能有一个PRIMARY KEY声明
  • 声明为PRIMARY KEY的列不允许有空值
  • 但是声明为UNIQUE的列允许有空值

默认约束

  • 默认约束指定某列的默认值
  • 语法规则:

列名 数据类型 DEFAULT 默认值

创建表时添加约束

REATE TABLE bookinfo(
  book_id INT PRIMARY KEY,
  press VARCHAR(20) DEFAULT “哈哈哈出版社”
);

创建表时没有添加默认约束,可以通过修改表添加约束

1、ALTER TABLE bookinfo MODIFY press VARCHAR(10) DEFAULT “哈哈哈出版社”;


2、ALTER TABLE bookinfo ALTER COLUMN press SET DEFAULT “哈哈哈出版社”;

删除约束

1、ALTER TABLE bookinfo MODIFY press VARCHAR(20);


2、ALTER TABLE bookinfo ALTER COLUMN press DROP DEFAULT;

外键约束

  • 外键用来在两个表的数据之间建立链接,它可以是一列或者多列,一个表可以有一个或多个外键
  • 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值
  • 外键的作用是保持数据的一致性,完整性
  • 语法格式:

[CONSTRAINT <外键约束名>] FOREIGN KEY (列名) refernces <主键名> (主键);

创建表时添加外键约束

CREATE TABLE bookcategory(
  category_id INT PRIMARY KEY,
  category VARCHAR(20)
);


CREATE TABLE bookinfo(
  book_id INT PRIMARY KEY,
  book_category_id INT,
CONSTRAINT fk_cid FOREIGN KEY(book_category_id) REFERENCES bookcategory(category_id)
);

创建表时没有创建外键,可以通过修改表添加外键约束

ALTER TABLE bookinfo ADD FOREIGN KEY(book_category_id) REFERENCES bookcategory(category_id);

删除外键约束

ALTER TABLE bookinfo DROP FOREIGN KEY 外键约束名称fk_cid;

外键约束的参照操作

  • CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行

CREATE TABLE bookinfo(
  book_id INT PRIMARY KEY,
  book_category_id INT,
  CONSTRAINT fk_cid FOREIGN KEY(book_category_id) REFERENCES bookcategory(category_id) ON DELETE CASCADE
);

猜你喜欢

转载自blog.csdn.net/UserPython/article/details/82793921