美文网首页
mysql 常见约束

mysql 常见约束

作者: 暴躁程序员 | 来源:发表于2023-03-07 17:42 被阅读0次

一、主键约束 primary key

1. 一个表中只能有一个主键,可将一字段或者多个字段设置成联合主键
2. 主键值不能重复,不能为null空值
  1. 建表时定义主键约束
    每个表只能定义一个主键
CREATE TABLE `user`(
    id INT PRIMARY KEY, -- PRIMARY KEY 主键约束
    username VARCHAR(22),
    `password` VARCHAR(22)
)
  1. 修改表时添加和删除主键约束
-- 添加主键约束
ALTER TABLE `user` ADD PRIMARY KEY (id);
-- 添加联合主键约束
ALTER TABLE 表名 ADD PRIMARY KEY (字段1,字段2);

-- 删除主键约束
ALTER TABLE `user` DROP PRIMARY KEY;
  1. 主键自增长 auto_increment
-- 默认从1开始,每插入一条数据 +1
CREATE TABLE `user`(
    id INT PRIMARY KEY AUTO_INCREMENT, 
    username VARCHAR(22),
    `password` VARCHAR(22)
)

-- 设置自增的初始值,从100开始
CREATE TABLE `user`(
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(22),
    `password` VARCHAR(22)
)
INSERT INTO `user` (id,username,`password`) VALUES (99,'azbycx','qe213dsd376'); -- 先初始插入一个id为99的列,再正式插入数据
INSERT INTO `user` (username,`password`) VALUES ('alias1','123456'); -- 100
INSERT INTO `user` (username,`password`) VALUES ('alias2','123456'); -- 101

二、外键约束 foreign key

1. 外键约束将两个或多个表表关联起来,一个表中可以有多个外键
2. 外键所在的表为从表,外键关联的主键所在的表为主表,从表的外键只能是主表的主键,不可以是其他值
3. 一般通过主表查询和删除从表,删除主表前,必须先删除从表(删除用户前,必须把用户相关的信息都删掉)
创建从表前必须先创建主表
4. 创建外键时不设置外键名,会自动添加默认的外键名 pk_主表名
  1. 建表时定义外键约束
    用户详情表的uid作为外键,关联user表的主键id
-- 主表
CREATE TABLE `user`(
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(22),
    `password` VARCHAR(22)
)

-- 从表,添加外键约束:CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 主表名(主表主键)
CREATE TABLE user_info(
    id INT PRIMARY KEY AUTO_INCREMENT,
    age SMALLINT,
    height SMALLINT,
    uid INT,
    CONSTRAINT fk_user FOREIGN KEY(uid) REFERENCES user(id)  -- FOREIGN KEY 外键约束
)
  1. 修改表时添加和删除外键约束
-- 添加外键约束:ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 主表名(主表主键);
ALTER TABLE user_info ADD CONSTRAINT fk_user FOREIGN KEY(uid) REFERENCES user(id);

-- 删除外键约束:ALTER TABLE 从表名 DROP FOREIGN KEY 外键名;
ALTER TABLE user_info DROP FOREIGN KEY fk_user;

三、唯一约束 unique

字段值不能重复,只能有一个值为null空值

  1. 建表时定义唯一约束
CREATE TABLE `user`(
    id INT,
    username VARCHAR(22) UNIQUE, -- UNIQUE 唯一约束
    `password` VARCHAR(22)
)
  1. 修改表时添加和删除唯一约束
-- 添加唯一约束:ALTER TABLE 表名 ADD CONSTRAINT 唯一约束名 UNIQUE(字段名);
ALTER TABLE `user` ADD CONSTRAINT un_username UNIQUE(username);

-- 删除唯一约束:ALTER TABLE 表名 DROP INDEX 唯一约束名;
ALTER TABLE `user` DROP INDEX un_username;

四、非空约束 not null

字段的值不能为空

  1. 建表时定义非空约束
CREATE TABLE `user`(
    id INT,
    username VARCHAR(22) NOT NULL, -- NOT NULL 非空约束
    `password` VARCHAR(22) NOT NULL -- NOT NULL 非空约束
)
  1. 修改表时添加和删除非空约束
-- 添加非空约束:ALTER TABLE 表名 CHANGE COLUMN 字段名 字段名 数据类型 NOT NULL;
ALTER TABLE `user` CHANGE COLUMN username username int NOT NULL;

-- 删除非空约束:ALTER TABLE 表名 CHANGE COLUMN 字段名 字段名 数据类型 NULL;
ALTER TABLE `user` CHANGE COLUMN username username int NULL;

五、默认值约束 default

插入数据时,如果没有给默认值字段插入值,那么这个字段自动写入默认值

  1. 建表时定义默认值约束
-- 不插入password时,默认 '123456'
CREATE TABLE `user`(
    id INT,
    username VARCHAR(22),
    `password` VARCHAR(22) DEFAULT '123456' -- DEFAULT 默认值约束
)

-- 插入数据测试
INSERT INTO `user`(id,username) VALUES (1,'alias1');
INSERT INTO `user`(id,username) VALUES (2,'alias2');
  1. 修改表时添加和删除默认值约束
-- 添加默认值约束:ALTER TABLE 表名 CHANGE COLUMN 字段名 字段名 数据类型 DEFAULT 默认值;
ALTER TABLE `user` CHANGE COLUMN `password` `password` VARCHAR(22) DEFAULT '123456';


-- 删除默认值约束:ALTER TABLE 表名 CHANGE COLUMN 字段名 字段名 数据类型 DEFAULT NULL;
ALTER TABLE `user` CHANGE COLUMN `password` `password` VARCHAR(22) DEFAULT NULL;

六、检查约束 check

插入和修改数据时,对数据的值进行约束,可使用查询子句

  1. 建表时定义检查约束
-- age的范围大于0,小于150
CREATE TABLE user_info(
    id INT,
    age SMALLINT,
    CHECK(age > 0 AND age<150)
)

-- 插入数据测试
INSERT INTO user_info (id,age) VALUES (1,0);
INSERT INTO user_info (id,age) VALUES (2,100);
INSERT INTO user_info (id,age) VALUES (3,170);
  1. 修改表时添加和删除检查约束
-- 添加检查约束:ALTER TABLE 表名 ADD CONSTRAINT 检查约束名 CHECK检查约束表达式;
ALTER TABLE user_info ADD CONSTRAINT check_age CHECK(age > 0 AND age<250);

-- 删除检查约束:ALTER TABLE 表名 DROP CONSTRAINT  检查约束名;
ALTER TABLE user_info DROP CONSTRAINT check_age;

查看表约束

-- 方式一:查看表结构和表约束
DESC 表名;

-- 方式二:可查看表的所有约束信息
SHOW CREATE TABLE user_info;
-- Create Table 值如下:
-- CREATE TABLE `user_info` (
--   `id` int(11) DEFAULT NULL,
--   `age` smallint(6) DEFAULT NULL,
--   CONSTRAINT `check_age` CHECK (`age` > 0 and `age` < 250)
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

-- 方式三:可查看表的约束名和约束类型
SELECT 
CONSTRAINT_CATALOG, -- 约束方案
CONSTRAINT_SCHEMA, -- 库名
CONSTRAINT_NAME, -- 约束名
TABLE_SCHEMA, -- 库名
TABLE_NAME,  -- 表名
CONSTRAINT_TYPE -- 约束类型
FROM
information_schema.TABLE_CONSTRAINTS
WHERE
CONSTRAINT_SCHEMA = '库名' AND TABLE_NAME='表名'

相关文章

  • mysql常见约束

    常见约束 /* 含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 分类:六大约束NOT NUL...

  • MySQL常见约束

    1、含义: 一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性###一、常见的约束 2、分类:六大约束...

  • mysql 约束

    mysql 中常见的约束: 默认约束 非空约束 主键约束 唯一约束 外键约束 自增长约束 顾命思议,主要讲几个容易...

  • MySql笔记

    Mac安装并运行MySql MySql数据库、数据表的操作 MySql数据类型及常见约束 MySql表操作 MyS...

  • MySql 中的约束

    MySql 中的约束 作用:给表添加约束值,从而约束用户操作数据库的行为 数据库常见的约束值如下: 默认值约束(d...

  • mysql DDL语言常见约束

    一、常见的约束NOT NULL:非空,该字段的值必填UNIQUE:唯一,该字段的值不可重复DEFAULT:默认,该...

  • MySQL常见约束条件

    约束 约束是一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性。 创建表时可以添加约束 修改表时可以添...

  • MySQL Demo 06

    阅读原文 MySQL Demo 06 1. 常见约束 1.向表emp2的id列中添加PRIMARY KEY约束(m...

  • mysql 学习语句

    MySQL学习笔记 登录和退出MySQL服务器 基本语法 建表约束 主键约束 唯一主键 非空约束 默认约束 外键约...

  • 常见约束

    含义 一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 分类 六大约束 NOT NULL:非空,用于...

网友评论

      本文标题:mysql 常见约束

      本文链接:https://www.haomeiwen.com/subject/xuibldtx.html