mysql数据库中的主键、外键、非空、外键、自增约束

本文详细介绍了数据库表约束的各种类型,包括主键约束确保数据唯一且不允许NULL,自增长列的设置与管理,唯一约束用于保证非主键列的唯一性,默认约束设定列的默认值,非空约束确保字段不为空,以及外键约束建立表间关系。这些约束在数据库设计中起到确保数据完整性和一致性的重要作用。
摘要由CSDN通过智能技术生成

主键约束

主键约束的特征

  1. 主键列的值不容许重复,通过主键约束,可以强制表的实体完整性
  2. 一个表中只能有一个主键
  3. 主键约束的列不接受NULL
  4. 主键约束通过PRIMARY KEY来创建主键
  5. 删除主键推荐使用ALTER TABLE emp MODIFY id INT PRIMARY KEY
##1.在建表的时候添加主键约束
CREATE TABLE emp(
 id INT primary key,
 name VARCHAR 
);
##删除主键约束
ALTER TABLE emp DROP PRIMARY KEY;

##创建表后添加主键约束
ALTER TABLE emp MODIFY id INT PRIMARY KEY;修改列的属性来添加主键约束
ALTER TABLE 表名称 ADD PRIMARY KEY(id);
ALTER TABLE dept ADD CONSTRAINT pk_name PRIMARY KEY(deptno);

主键自增长约束

自增长列的特征

  1. 并不是所有的表在设计完后都能提供合适的主键,为此数据库提供了自增长列

    1. 自增长列的数值类型 INT,FLOAT,DOUBLE
    2. 其值由数据库自动维护
    3. 是永远都不会重复的
    4. 设置自增长列用AUTO_INCREMENT来设置
    5. 标识符必须用一个KEY搭配使用(key指主键、唯一、外键)
    6. 一个表最多有一个标识符
    7. 标识列的类型只能是数值型的
    8. 标识符可以通过SET AUTO_INCREMENT_INCREMENT = 3设置步长(全局)
    9. 如果设置了步长就会从1+步长 依次递增
    10. 如果表中已经有了数据,会安1+步长进行计算,如果这个值已有,则再加知道没有

    自增与主键

    CREATE TABLE emp(
    empNo INT PRIMARY KEY AUTO_INCREMENT,
    job VARCHAR(10),
    mgr INT,
    sal DOUBLE,
    comm DOUBLE,
    deptno INT
    )CHARACTER SET utf8;
    -- 设置自增长列的初始值
    CREATE TABLE temp(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(2)
    ) AUTO_INCREMENT=10;
    -- 设置自增长列的初始值
    ALTER TABLE emp AUTO_INCREMENT = 10;
    alter table 表名称 modify column id int auto_increment;
    -- 删除自增长列
    ALTER TABLE 表名称 MODIFY COLUMN id INT;
    
##创建时候添加逐渐增长
CREATE TABLE emp(
id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(30)
);
##删除主键自增
ALTER TABLE emp MODIFY id INT;

##创建表后再添加主键自增
ALTER TABLE emp MODIFY id INT AUTO_INCREMENT;

设置AUTO_INCREMENT的初始值

ALTER TABLE emp1 AUTP_INCREMENT = 10;

#也可以在创建表的时候给auto_increment设置初始值
CREATE TABLE EMP1(
ID INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCAHR(20)
)AOTO_INCREMENT = 10;

唯一约束

对于非主键列中的值也要求唯一性时,就需要唯一约束

#创建表的时候给除主键外的列添加唯一约束
create table emp(
id int primary key auto_increment,
    name varchar(10) unique
);

#给唯一约束起一个别名
create table emp(
id int primary key auto_increment;
    name varchar(10),
    constraint uq unique(name)  --这行就是给name的唯一约束起一个别名
    );
    
    
##表创建完成后给表的非主键添加唯一
ALTER TABLE emp ADD CONSTRAINT UNIQUE(name);

alter table emp add unique(name);

-删除唯一约束
alter  table  表名称  drop  index  设置唯一时的名称;

默认约束

为列中的值设置默认值,default…,如果已经定了值,默认值就无效了

#创建表时
 CREATE TABLE course(
    -> id INT DEFAULT 1,
    -> name VARCHAR(11)
    -> );
    
    #删除默认值===》将默认值改为null
    ALTER TABLE course MODIFY COLUMN id INT;
    
    #添加默认值
    ALTER TABLE course MODIFY COLUMN id INT DEFAULT 1;
  • 创建表时,不写默认值都默认是null,(在无主键约束的条件下)
  • 默认约束和主键可以同时存在
  • 默认约束不可以和AUTO_INCREMENT同时存在

非空约束

NOT NULL :非空,用于保证该字段的值不能为空。例如学生表的学生姓名及学号等等

#创建表时添加非空约束
CREATE TABLE math(
id INT NOT NULL,
    name VARCAHR(10)
);

#删除非空约束
ALTER TABLE math MODIFY id INT;

#添加非空约束
ALTER TABLE math MADIFY id INT NOT NULL;

外键约束

A表中列的值来自于另外一张表B的主键或唯一键的列称为 外键FK,将被引用值得表称为

主表或父表,将引用值得表称为从表或子表。 例如: emp 表中有 deptno 列,值来自于 `de

pt表的 主键deptno dept 是主表, emp 是从表。

外键约束中创建主表

| dept  | CREATE TABLE `dept` (
  `dept_no` int NOT NULL,
  `dept_name` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`dept_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |

外键约束中创建从表

| emp   | CREATE TABLE `emp` (
  `id` int NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `deptno` int DEFAULT NULL,
  KEY `fk_dept_no` (`deptno`),
  CONSTRAINT `fk_dept_no` FOREIGN KEY (`deptno`) REFERENCES `dept` (`dept_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |

删除外键

ALTER TABLE emp DROP CONSTRAINT fk_dept_no;

添加外键

 ALTER TABLE emp add constraint foreign key kf_kf_dept_one (deptno) references dept(dept_no);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值