MySQL基础——约束

约束

基本介绍

约束用于确保数据库的数据满足特定的商业规则。在 MySQL 中,约束包括: not null、unique、primary key、foreign key 和 check 五种。

primary key (主键)

1.用于唯一标识每条记录,字段添加后,该列的所有值不能重复。主键默认不能为 null
2.一张表只能有一个主键,但可以是复合主键
3.添加 primary key 主键可以:1.字段名 primary key;2.所有字段后 primary key (字段名)
4.使用 desc 表名,可以查看那个字段是 primary key



// 主键
CREATE TABLE tab01(
    id INT PRIMARY KEY ,
    username VARCHAR (32)
);

// 复合主键,插入数据时,只要有一个字段不同,就不会报错
CREATE TABLE tab02(
    id INT,
    username VARCHAR (32),
    PRIMARY KEY (id, username)
);
INSERT INTO tab02 VALUES (1, 'Gin'),(2, 'Gin'),(2, 'Vodka');


not null ( 非空 )

如果在列上定义了 not null ,那么当插入数据时,必须为列提供数据。

unique ( 唯一 )

当定义了唯一约束后,该列值是不能重复的
如果没有指定 not null,则 unique 字段可以有多个 null 一张表可以有多个 unique 字段

foreign key 外键约束

用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主键约束或是 unique 约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为 null

如下:学生表为 从表,班级表为 主表
在这里插入图片描述

细节

  1. 外键指向的表的字段,要求是 primary key 或者是 unique
  2. 表的类型是 innodb ,这样的表才支持外键
  3. 外键字段的类型要和主键字段的类型一致(长度可以不同)
  4. 外键字段的值,必须在主键字段中出现过,或者为 null【前提是外键字段允许为null】
  5. 一旦建立主外键的关系,数据不能随意删除了。


// FOREIGN KEY 外键约束
// 创建表
CREATE TABLE my_class(
    id INT PRIMARY KEY,
    name VARCHAR (32) NOT NULL DEFAULT ''
);
INSERT INTO my_class VALUES (100, 'Java'),(200, 'Web');

CREATE TABLE my_stu(
    id INT PRIMARY KEY,
    name VARCHAR (32) NOT NULL DEFAULT '',
    class_id INT,
    FOREIGN KEY (class_id) REFERENCES my_class(id)
);
// 从表中定义外键时,只要不设置外键 NOT NULL,则在插入数据时可以插入外键值为 NULL 的数据
INSERT INTO my_stu VALUES (1, 'Gin', 200),(2, 'Vodka', 100),(3, 'Vermouth', null);



check

用于强制行数据必须满足的条件,假定在 sal 列上定义了 check 约束,并要求 sal 列值在 1000 - 2000 之间如果不再 1000~2000 之间就会提示出错。



// check 约束
// 创建表
CREATE TABLE person(
    id INT PRIMARY KEY ,
    name VARCHAR (32),
    sex VARCHAR (6) CHECK (sex IN ('man', 'woman')),
    sal DOUBLE CHECK ( sal > 1000 AND sal < 2000 )
);
INSERT INTO person VALUES (1, 'Gin', '男', '5000'); // 报错


练习创建表


// 练习
// 现有一个商店的数据库shop_db,记录客户及其购物情况,由下面三个表组成:
// 商品goods(商品号goods_id,商品名goods_name,单价unitprice,商品类别category,供应商provider);
// 客户customer(客户号customer_id,姓名name,住址address,电邮email性别sex,身份证card_id);
// 购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums);
create database shop_db;
use shop_db;
create table goods(
    goods_id int primary key,
    goods_name varchar (100) not null default '',
    unitprice double check (unitprice >= 1.0 and unitprice <= 9999.99),
    category int not null default 0,
    provider varchar (32) not null default ''
);

create table customer(
    customer_id varchar (8) primary key,
    name varchar (32) not null default '',
    address varchar (100) not null default '',
    email varchar (50) unique not null,
    sex enum('男', '女') not null,
    card_id varchar (18)
);

create table purchase(
    order_id int primary key,
    customer_id varchar (8) not null default '',
    goods_id int not null default 0,
    nums int not null default 0,
    foreign key (customer_id) references customer(customer_id),
    foreign key (goods_id) references goods(goods_id)
);


auto_increment 自增长

自增长使用细节

  1. 一般来说自增长是和 primary key 配合使用的
  2. 自增长也可以单独使用【但是需要配合一个unique】
  3. 自增长修饰的字段为整数型的(虽然小数也可以但是非常非常少这样使用)
  4. 自增长默认从 1 开始,你也可以通过如下命令修改
    alter table 表名 auto_increment = 新的开始值;
  5. 如果你添加数据时,给自增长字段(列)指定的有值,则以指定的值为准,如果指定了自增长,一般来说,就按照自增长的规则来添加数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值