MySQL学习笔记3 约束

一、主键约束 primary key

1.简介

-- 主键约束 FK
/*
1.一个列或者多个列组合,其值唯一的表示每一行方便查找。
2.唯一约束+非空。
不允许重复,不允许出现空值。
3.最多允许一个主键
4.主键约束关键词:primarykey
5.创建主键约束时,系统默认在所在列、列组合上建立对应的唯一索引。
 */

2.构造

-- 操作:添加单列主键
/*语法格式
create table 表名(
  ···
  <字段名><数据类型> primary key
 */
 
-- 操作:添加联合主键
/*
 1.联合主键也只能有一个
 2.联合主键不能在定义时声明,需要在之后声明
 3.语法
 create table 表名(
    ···
    primary key(字段1,···,字段n)
 );
 */

例、单列主键与联合主键的声明

#单列主键
-- 方法1
create table emp1(
    -- 使用 primary key来指定主键
    eid int primary key, #
    name VARCHAR(20),
    deptId int,
    salary double
);

-- 添加主键后 该主键会有一个钥匙标记

-- 方法2,使用constraint指定

create table emp2(
    eid int,
    name VARCHAR(20),
    deptId int,
    salary double,
    -- 在之后使用primary key()来指定主键
    constraint pk1 primary key(eid) #constraint pk1 可省略
);

#联合主键
-- 例,(name,Salary)构成联合主键
create table emp3(
    name varchar(20),
    deptId int,
    Salary double,
    primary key (name,deptid)
    -- 给主键起名pk2的写法
    #constraint pk2 primary key(name,deptId)
)

3.例子

# 单列主键
insert into emp2 (eid,name,deptId,salary)
values (1001,'李静',10,5000);

-- 1.如果eid相同,则不予通过
insert into emp2 (eid,name,deptid,salary)
values (1001,'马飞飞',10,8000);
#报错 [23000][1062] Duplicate entry '1001' for key 'emp2.PRIMARY'

-- 2.如果主键为空 不予通过
insert into emp2 (eid,name,deptid,salary)
values (NULL,'周鹏',10,8000);
#报错 [23000][1048] Column 'eid' cannot be null

#联合主键
-- 例,联合主键
insert into emp3 values('张三',10,5000);
insert into emp3 values('张三',20,5000);
#name 相同 但deptId不同,不会报错
insert into emp3 values('张三',10,5000);
insert into emp3 values('张四',10,5000);
#name不同 deptid相同,不会报错
insert into emp3 values(NULL,10,5000);
insert into emp3 values('张三',NULL,5000);
#这两种都会报错,联合主键的任何一列元素都不能为空

4.修改表结构的方式添加主键

-- 修改表结构的方式添加主键

/* 语法
create table 表名(
    ...
);
alter table <表名> add primary key(...);
*/

create table emp4(
    eid int,
    name varchar(20),
    deptId int,
    Salary double
);

#追加主键eid (可以追加多个列名从而添加联合主键)
alter table emp4 add primary key (eid);

5.删除主键

-- 删除主键约束
/*语法
# 单行/联合主键都可以用此方法移除
alter table <表名> drop primary key;
*/

示例 删除主键

alter table emp4 drop primary key;

二、自增长约束 auto_increment

1.简介

/*
  自增长约束通常与主键约束同时使用
  进行自增长约束后
  该主键的值就不再进行赋值
  而是按照给定的步长进行增长
  主键默认为1
  约束的字段只能是整数类型
  #语法:
  字段名 数据类型 auto_increment
*/

2.构造

-- 例,自增长约束

create table t_userl(
    id int primary key auto_increment,
    name varchar(20)
);

-- 自增长主键赋值为NULL,其会被自动赋值
insert into t_userl
values (NULL,'张三');
-- 只用赋值给非主键值
insert into t_userl (name)
values('张三');

3.指定自增长初始值

-- 指定自增字段初始值
-- 1.在创建表时指定
create table t_userl2(
    id int primary key auto_increment,
    name varchar(20)
)auto_increment = 100;
#初始值为100

-- 2.在之后指定
create table t_userl3(
    id int primary key auto_increment,
    name varchar(20)
);

alter table t_userl3 auto_increment = 200;

6.其他

delete之后数据增从断点开始
truncate数据自动增长从默认起始值开始

三、非空约束 not null

1.简介

/*
非空约束字段值禁止为空。
使用了非空约束的字段如果在添加数据时,没有指定值,数据库系统会报错。

-- 方法1.创建表时添加后缀 not null

2.构造

-- 方法1.创建表时添加后缀 not null

-- 例
create table t_user6(
    id int,
    name varchar(20) not null,
    address varchar(20) not null
);

-- 方法2.之后指定
alter table  t_user6 modify name varchar(20) not null;

3.实例

insert into t_user6 ()
values (1,'asd',NULL);#为NULL会报错
#[23000][1048] Column 'address' cannot be null

4.删除非空约束

-- 删除非空约束
-- alter table 表名 modify 字段 类型

alter table t_user6 modify name varchar(20);

四、唯一约束 unique

1.简介

-- 关键字  unique 与前面类似
/*
唯一约束指该关键词不能重复
NULL可以存在多个
*/

2.构造

-- 直接构造
create table t_user9(
    id int,
    name varchar(20),
    phone_number varchar(20) unique #指定唯一约束
);

-- 之后添加
alter table t_user9 add constraint unique_pn unique (phone_number);

3.删除约束

-- 删除唯一约束
-- 格式 alter table <name> drop index <约束名>

alter table t_user9 drop index unique_pn;

五、默认约束 default

1.简介

-- # 默认约束
-- 该列自动添加默认值
/*语法
1.<字段名><数据类型>default<默认值>;
2.alter table 表名 modify 列名 类型 default 默认值;
*/

2.构造

-- 例1,直接构造
create table t_user10 (
    id int,
    name varchar(20),
    address varchar(20) default 'beijing'
);

-- 例2,创建表后指定
create table t_user11(
    id int,
    name varchar(20),
    address varchar(20)
);

3.删除默认约束

-- 删除默认约束
alter table t_user11 modify address varchar(20) default null;

六、零填充约束 zerofill

1.简介

-- 零填充约束(略)
/*zerofill
该字段长度小于定义的长度时在前面填充0
*/

2.构造

-- 1.添加约束
create table  t_user12(
    id int zerofill,
    name varchar(20)
);

3.示例

insert into t_user12 (id, name)
values (123,'zhangs');
-- 0000000123,zhangs
-- 自动向前面填充n个0

4.删除约束

-- 删除约束
alter table t_user12 modify id int;
  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值