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)带有主键的那张表称为父表,含外键的是子表,必须先删除外键约束才能删除父表。

 

posted @   熊猫怪物  阅读(306)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示