Mysql数据库表的约束

目录

概述

约束种类

主键约束

1.  在创建表的时候给字段添加主键

2.  在已有表中添加主键

删除主键:

主键自增:

创建好以后修改起始值

DELETE 和 TRUNCATE 对自增长的影响:

唯一约束

唯一约束的基本格式:

实现唯一约束:

非空约束

非空约束的基本语法格式:

默认值:

组合主键演示:


概述

对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。

约束种类

约束名

约束关键字

主键  

primary key

唯一   

unique

非空

not null

外键

foreign key

检查约束

check 注:mysql 不支持

主键约束

主键的作用:用来唯一标识数据库中的每一条记录。

通常不用业务字段作为主键,单独给每张表设计一个 id 的字段,把 id 作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。

如:身份证,学号不建议做成主键。

主键关键字: primary key , 特点: 非空 not null 唯一。

  • 1.  在创建表的时候给字段添加主键

字段名  字段类型 PRIMARY KEY

  • 2.  在已有表中添加主键

ALTER TABLE  表名 ADD PRIMARY KEY(字段名);

演示:

-- 创建表学生表 st5, 包含字段(id, name, age)将 id 做为主键

create table st5 (

id int primary key, -- id 为主键

name varchar(20),

age int

);

desc st5;

-- 插入重复的主键值

insert into st5 values (1, '关羽', 30);

-- 错误代码: 1062 Duplicate entry '1' for key 'PRIMARY'

insert into st5 values (1, '关云长', 20);

select * from st5;

-- 插入 NULL 的主键值, Column 'id' cannot be null

insert into st5 values (null, '关云长', 20);

  • 删除主键:

-- 删除 st5 表的主键

alter table st5 drop primary key;

-- 添加主键

alter table st5 add primary key(id);

  • 主键自增:

主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值

AUTO_INCREMENT  表示自动增长( 字段类型必须是整数类型 )

演示:

-- 创建表学生表 st6, 包含字段(id, name, age)将 id 做为主键

create table st6 (

id int primary key auto_increment, -- id 为主键

name varchar(20),

age int

);

-- 插入数据

insert into st6 (name,age) values ('小乔',18);

insert into st6 (name,age) values ('大乔',20);

-- 另一种写法

insert into st6 values(null,'周瑜',35);

select * from st6;

修改自动增长的默认起始值:

默认地 AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法

  • 创建表时指定起始值:

CREATE TABLE  表名(

列名 int primary key AUTO_INCREMENT

) AUTO_INCREMENT=起始值;

演示:

-- 指定起始值为 1000

create table st4 ( 

id int primary key auto_increment,

name varchar(20)

) auto_increment = 1000;

insert into st4 values (null, '孔明');

select * from st4;

  • 创建好以后修改起始值

ALTER TABLE  表名 AUTO_INCREMENT= 起始值;

演示:

alter table st4 auto_increment = 2000;

insert into st4 values (null, '刘备');

select * from st4;

DELETE 和 TRUNCATE 对自增长的影响:

DELETE:删除所有的记录之后,自增长没有影响。

TRUNCATE:删除以后,自增长又重新开始。TRUNCATE是把表结构DROP 之后 再CREATE。

唯一约束

什么是唯一约束: 表中某一列不能出现重复的值。

  • 唯一约束的基本格式:

字段名  字段类型 UNIQUE

  • 实现唯一约束:

-- 创建学生表 st7, 包含字段(id, name),name 这一列设置唯一约束,不能出现同名的学生

create table st7 (

id int,

name varchar(20) unique

);

-- 添加一个同名的学生

insert into st7 values (1, '张三');

select * from st7;

-- Duplicate entry '张三' for key 'name'

insert into st7 values (2, '张三');

-- 重复插入多个 null 会怎样?

insert into st7 values (2, null);

insert into st7 values (3, null);

null 没有数据 , 不存在重复的问题

非空约束

什么是非空约束:列值不能为 null。

  • 非空约束的基本语法格式:

字段名  字段类型 NOT NULL

演示:

-- 创建表学生表 st8, 包含字段(id,name,gender)其中 name 不能为 NULL

create table st8 (

id int,

name varchar(20) not null,

gender char(1)

);

-- 添加一条记录其中姓名不赋值

insert into st8 values (1,'张三疯','男');

select * from st8; 

-- Column 'name' cannot be null

insert into st8 values (2,null,'男');

  • 默认值:

字段名  字段类型 DEFAULT  默认值

演示:

-- 创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州

create table st9 (

id int,

name varchar(20),

address varchar(20) default '广州'

);

-- 添加一条记录,使用默认地址

insert into st9 values (1, '李四', default);

insert into st9 (id,name) values (2, '李白');

-- 添加一条记录,不使用默认地址

insert into st9 values (3, '李四光', '深圳');

select * from st9;

疑问:如果一个字段设置了非空与唯一约束,该字段与主键的区别?

1)  主键在一个表中,只能有一个。不能出现多个主键。主键可以单列,也可以是多列。

2)  自增长只能用在主键上

  • 组合主键演示:

-- 创建一个学生表 st10,组合主键 (id , name)

create table st10 (

id int,

name varchar(20),

sex char(1),

address varchar(20) default '广州',

PRIMARY key (id,name)

);

insert into st10 values(1,'小美','女','东京');

-- [Err] 1062 - Duplicate entry '1-小美' for key 'PRIMARY'

insert into st10 values(1,'小美','男','长清');

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值