MYSQL 约束添加
一、对已存在的表添加主键约束
mysql> alter table dept add primary key(deptno); Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> select * from dept; +--------+--------------+ | deptno | dept_name | +--------+--------------+ | 1 | zhaoyang | | 2 | zhouwenqiang | | 3 | 实施部 | | 4 | 产品部 | +--------+--------------+ 4 rows in set (0.00 sec) mysql>
2. 第二种格式:alter table 表名 add constraint 主键约束的名字 primary key(列名);
mysql> update employees set empno = 1 where ename= -> 'zhaoyang'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from employees; +-------+--------------+------+------------+------------+---------+--------+ | empno | ename | age | birth | hiredate | sal | deptno | +-------+--------------+------+------------+------------+---------+--------+ | 1 | zhaoyang | 24 | 1993-07-17 | 2021-10-18 | 5000.00 | 1 | | NULL | chenqian | 21 | 1996-05-12 | 2021-10-21 | 3001.00 | 1 | | NULL | dengdesheng | 19 | 1999-02-25 | 2021-11-15 | 4000.00 | 1 | | NULL | zhouwenqiang | 21 | 2001-01-01 | 2021-08-19 | 7000.00 | 2 | +-------+--------------+------+------------+------------+---------+--------+ 4 rows in set (0.00 sec) mysql> update employees set empno=2 where ename='chenqian'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> update employees set empno=3 where ename='dengdesheng'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> alter table employees add constraint pk_emp primary key(empno); ERROR 1138 (22004): Invalid use of NULL value mysql> update employees set empno=4 where ename='zhouwenqiang'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> alter table employees add constraint pk_emp primary key(empno); Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0.
第三种格式:alter table 表名 modify 列名 数据类型 primary key;
mysql> alter table employees modify empno int primary key; Query OK, 0 rows affected (0.10 sec) Records: 0 Duplicates: 0 Warnings: 0
删除主键约束:
mysql> alter table employees drop primary key; Query OK, 4 rows affected (0.05 sec) Records: 4 Duplicates: 0 Warnings: 0
二、在创建表的时候同时创建主键约束
第一种格式:
create table 表名(
列名1 数据类型 primary key,
列名2 数据类型 );
mysql> create table if not exists location( -> localno int primary key, -> localname varchar(30)); Query OK, 0 rows affected (0.03 sec)
第二种格式:
create table 表名(
列名1 数据类型,
列名2 数据类型,
constraint 主键约束的名字 primary key(列名1) );
mysql> create table if not exists student_info( -> number int, -> name varchar(5), -> sex enum('M','F'), -> id_number char(18), -> department varchar(30), -> major varchar(30), -> enrollment_time date, -> constraint pk_student_info primary key(number)); Query OK, 0 rows affected, 1 warning (0.01 sec)
第三种格式:
create table 表名(
列名1 数据类型,
列名2 数据类型,
primary key(列名1) );
mysql> create table if not exists student_info( -> number int, -> name varchar(5), -> sex enum('M','F'), -> id_number char(18), -> department varchar(30), -> major varchar(30), -> enrollment_time date, -> primary key(number)); Query OK, 0 rows affected (0.03 sec)
对于多个列构成的列组合的主键,则必须使用单独声明的形式。例如:
mysql> create table if not exists student_score( -> number int, -> subject varchar(30), -> score tinyint, -> primary key(number, subject)); Query OK, 0 rows affected (0.02 sec)
mysql> alter table student_score add constraint pk_student_score_number_subject primary key(number, subject); Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0
设置外键的时候需要注意以下几点:
(1)外键是用于两个表的数据之间建立连接,可以是一列或者多列,即一个表可以有一个或多个外键。
(2)这个表里面设置的外键必须是另外一个表的主键!
(3)外键可以不是这个表的主键,但必须和另外一个表的主键相对应(字段的类型和值必须一样)。
(4)带有主键的那张表称为父表,含外键的是子表,必须先删除外键约束才能删除父表。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!