mysql约束

SQL约束

约束, 其实就是⼀种限制条件, 让你不能超出这个控制范围.
⽽在数据库中的约束, 就是指表中的数据内容不能胡乱填写, 必须按照要求填写. 好保证数据的完整性与安全性

-- 准备数据
CREATE TABLE persons (
pid int,
lastname varchar(255),
firstname varchar(255),
address varchar(255)
);
insert into persons values(1, '星驰','周','⾹港');
insert into persons values(1, '德华','刘','⾹港');
insert into persons values(2, '德华','刘',null);
insert into persons values(null, '润发','周','⾹港');

主键约束

PRIMARY KEY 约束:

  • 主键必须包含唯⼀的值, 不能重复。
  • 主键列不能包含 NULL 值。
  • 每个表都应该有⼀个主键,并且每个表只能有⼀个主键。

添加主键约束

  • ⽅式⼀:创建表时,在字段描述处,声明指定字段为主键:
    格式: 字段名 数据类型[⻓度] PRIMARY KEY
CREATE TABLE persons (
pid int primary key, -- 添加了主键约束
lastname varchar(255),
firstname varchar(255),
address varchar(255)
);
INSERT INTO persons VALUES(1, '星驰','周','⾹港');
INSERT INTO persons VALUES(1, '德华','刘','⾹港'); -- 设置主键后, 插⼊失败, 值
重复
INSERT INTO persons VALUES(2, '德华','刘',NULL);
INSERT INTO persons VALUES(NULL, '润发','周','⾹港'); -- 设置主键后, 插⼊失败,
值不能为 NULL
  • ⽅式⼆:创建表时,在constraint约束区域,声明指定字段为主键:
    格式: [constraint 名称] primary key (字段列表)
    关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称⼀般没
    ⽤。
    字段列表需要使⽤⼩括号括住,如果有多字段需要使⽤逗号分隔。声明两个以上字段为主
    键,我们称为联合主键。
CREATE TABLE persons (
pid int,
lastname varchar(255),
firstname varchar(255),
address varchar(255),
constraint pk_persons primary key (pid) -- 添加主键约束, 单⼀字段
);
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255),
CONSTRAINT pk_persons PRIMARY KEY (lastname, firstname) -- 添加主键约束,
多个字段, 我们称为联合主键。
);
INSERT INTO persons VALUES(1, '星驰','周','⾹港');
INSERT INTO persons VALUES(1, '德华','刘','⾹港');
INSERT INTO persons VALUES(2, '德华','刘',NULL); -- 插⼊失败
  • ⽅式三:创建表之后,通过修改表结构,声明指定字段为主键:
    格式: ALTER TABLE 表名 ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
CREATE TABLE persons (
pid int,
lastname varchar(255),
firstname varchar(255),
address varchar(255),
);
alter table persons add constraint pk_persons primary key (lastname,
firstname); -- 添加联合主键

删除主键约束

如需删除 PRIMARY KEY 约束,请使⽤下⾯的 SQL:
格式: ALTER TABLE 表名 DROP PRIMARY KEY

alter table persons drop primary key;

自动增长列

我们通常希望在每次插⼊新记录时,数据库⾃动⽣成字段的值。
我们可以在表中使⽤ auto_increment(自动增长列)关键字,自动增长列类型必须是整型,自动增长列必须为键(通常是⽤于主键)。

  • 下列 SQL 语句把 “persons” 表中的 “pid” 列定义为 auto_increment 主键
  • 格式: 字段名 整数类型[⻓度][约束] auto_increment
CREATE TABLE persons (
pid INT PRIMARY KEY AUTO_INCREMENT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255)
);
  • 向persons添加数据时,可以不为pid字段设置值,也可以设置成null,数据库将⾃动维护主键值:
insert into persons(lastname, firstname, address) values('富成','郭','⾹港');
insert into persons(pid,lastname, firstname, address)
values(null,'⻰','成','⾹港');
  • 默认AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使⽤下列 SQL 语法:
alter table persons auto_increment=100; -- 我这里设置的100,可按需求更改

非空约束

NOT NULL 约束:

  • 列不接受 NULL 值。
  • 要求字段始终包含值。这意味着,如果不向字段添加值,就⽆法插⼊新记录或者更新记录。

下面的 SQL 语句要求 “lastname” 列和 “firstname” 列不接受 NULL 值:

添加非空约束

格式: 字段名 数据类型[⻓度] NOT NULL

CREATE TABLE persons (
pid INT PRIMARY KEY AUTO_INCREMENT,
lastname VARCHAR(255) not null,
firstname VARCHAR(255) not null,
address VARCHAR(255)
);

删除非空约束

格式: ALTER TABLE 表名 MODIFY 字段名 数据类型[⻓度]

alter table persons modify lastname varchar(255);
alter table persons modify firstname varchar(255);

唯一约束

UNIQUE 约束:

  • 指定列的值不能重复.

注意:

  1. UNIQUE 和 PRIMARY KEY 约束均为列提供了唯⼀性的保证。PRIMARY KEY 是⾃动定义的
    UNIQUE 约束。
  2. 每个表可以有多个 UNIQUE 约束,但是每个表只能有⼀个 PRIMARY KEY 约束。
  3. UNIQUE 不限制 null 值 出现的次数

添加唯⼀约束

与主键添加方式相同,共有3种

  • 方式⼀:创建表时,在字段描述处,声明唯⼀:
    格式: 字段名 数据类型[⻓度] UNIQUE
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255) UNIQUE -- 添加唯⼀约束
);
INSERT INTO persons(pid,lastname, firstname, address) VALUES(1,'富
成','郭','⾹港');
INSERT INTO persons(pid,lastname, firstname, address) VALUES(2,'润
发','周','⾹港');-- 插⼊失败,值重复
  • 方式⼆:创建表时,在约束区域,声明唯⼀:
    格式: [constraint 名称] UNIQUE (字段)
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255),
CONSTRAINT uni_address UNIQUE (address) -- 添加唯⼀约束
);
  • 方式三:创建表后,修改表结构,声明字段唯⼀:
    格式: ALTER TABLE 表名 ADD [CONSTRAINT 名称] UNIQUE (字段)
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255)
);
ALTER TABLE persons ADD CONSTRAINT uni_address UNIQUE (address) -- 添加唯⼀约

删除唯一约束

  • 如需删除 UNIQUE 约束,请使⽤下⾯的 SQL:
  • 如果添加唯一约束时,没有设置约束名称,默认是当前字段的字段名。

格式: ALTER TABLE 表名 DROP INDEX 名称

alter table persons drop index uni_persons_address; -- 有唯⼀约束名称, 使⽤约束
名称删除
哦
alter table persons drop index address; -- 没有唯⼀约束名称, 使⽤字段名删除

默认约束

default 约束:

  • 用于指定字段默认值。

  • 当向表中插⼊记录时,如果没有明确的为字段赋值,则⾃动赋予默认值。

添加默认约束

  • 添加默认约束,在创建表时候添加
    格式: 字段名 数据类型[⻓度] DEFAULT 默认值
CREATE TABLE persons (
pid INT,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255) DEFAULT '⾹港' -- 添加默认约束
);
INSERT INTO persons(pid,lastname, firstname, address) VALUES(1,'富
成','郭','北京');
INSERT INTO persons(pid,lastname, firstname) VALUES(2,'⻰','成'); -- 使⽤
address的默认值
INSERT INTO persons(pid,lastname, firstname, address) VALUES(3,'润发','周',
NULL);

删除默认约束

格式: ALTER TABLE 表名 MODIFY 字段名 数据类型[⻓度]

ALTER TABLE persons MODIFY address VARCHAR(255); 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值