MySQL数据库:第十三章:常见约束
#常见约束
理解:约束是用于限定表的字段的,为了保证数据表的完整性 常见约束:★ (not null)NOT NULL 非空:用于限定某字段为必填项,比如姓名、id等 (default)DEFAULT 默认:用于限定某字段如果没有显式的插入值,默认存储的选项,比如性别、成绩等 (primary key)PRIMARY KEY主键:用于限定某字段是唯一的、非空的,比如学号 (unique)UNIQUE 唯一:用于限定某字段是唯一的,可以为空,比如:座位号 (check)CHECK检查:用于限定某字段必须满足指定条件,比如 check (gender = ‘男’ or gender =‘女’) 但是:mysql不支持 (foreign key)FOREIGN KEY外键:用于限定两个表的关系,比如学员信息表和专业表通过专业编号关联 【面试题】主键和唯一的对比 主键:唯一、非空、一个表至多有一个主键 唯一:唯一、可以为空、一个表可以有多个唯一键
#一、创建表时添加约束 √
分类: 列级约束:直接放在字段的后面,对当前字段有效 not null、default、unique、primary key 表级约束:放在所有字段的下面,对显式指定的字段有效 primary key、unique、foreign key 二者的区别: ①表级约束可以起名,语法: 【constraint 约束名】 约束类型(字段) 其中主键起名后,也无效! ②列级约束不能起名 语法: create table 表名( 字段名 字段类型 约束类型, 字段名 字段类型 约束类型, … 约束 )
#示例1:主键和唯一放在列级约束上
CREATE TABLE grade(
id INT PRIMARY KEY,
gradename VARCHAR(20)
)
CREATE TABLE testTab1(
id INT PRIMARY KEY,#主键
tname VARCHAR(20) NOT NULL,#非空
gender CHAR DEFAULT '男',#默认
seat INT UNIQUE NOT NULL,#唯一+非空
gradeId INT ,
FOREIGN KEY(gradeid) REFERENCES grade(id)
);
#示例2:主键和唯一放在表级约束上
DROP TABLE IF EXISTS testTab1;
CREATE TABLE testTab1(
id INT ,#主键
tname VARCHAR(20) NOT NULL,#非空
gender CHAR DEFAULT '男',#默认
seat INT ,#唯一+非空
gradeId INT ,
FOREIGN KEY(gradeid) REFERENCES grade(id),
PRIMARY KEY(id),
UNIQUE(seat)
);
#二、修改表时添加约束【了解】
DROP TABLE IF EXISTS testTab1;
CREATE TABLE testTab1(
id INT ,
tname VARCHAR(20) ,
gender CHAR,
seat INT ,
gradeId INT
);
#1、添加非空 ALTER TABLE testTab1 MODIFY COLUMN tname VARCHAR(20) NOT NULL; #2、添加默认 ALTER TABLE testTab1 MODIFY COLUMN gender CHAR DEFAULT ‘女’; #3、添加唯一 #列级约束的方式 #ALTER TABLE testTab1 MODIFY COLUMN seat int unique; #表级约束的方式 ALTER TABLE testTab1 ADD CONSTRAINT uq UNIQUE(seat); #4、添加主键 #列级约束的方式 ALTER TABLE testTab1 MODIFY COLUMN id INT PRIMARY KEY; #表级约束的方式 #ALTER TABLE testTab1 ADD primary key(id); #5、添加外键 ALTER TABLE testTab1 ADD CONSTRAINT fk_t_g FOREIGN KEY(gradeid) REFERENCES grade(id); #三、修改表时删除约束【了解】
#1、删除非空
ALTER TABLE testTab1 MODIFY COLUMN tname VARCHAR(20) NULL;
#2、删除默认
ALTER TABLE testtab1 MODIFY COLUMN gender CHAR;
#3、删除唯一(唯一约束的名字默认和字段名一致)
ALTER TABLE testtab1 DROP INDEX seat;
#4、删除主键
ALTER TABLE testtab1 DROP PRIMARY KEY;
#5、删除外键
ALTER TABLE testtab1 DROP FOREIGN KEY fk_t_g;
SHOW INDEX FROM testtab1;
相关文章
- MySQL中指定分隔符的技巧(mysql指定分隔符)
- 数据库 MySQL: Unlock the Power of a Reliable Database Solution(mysqlmsql)
- MySQL数据库安装指南(mysql数据库怎么安装)
- MySQL连接数优化:实现最佳性能(mysql连接数修改)
- MySQL : 全表锁定的解决方案(mysql锁所有表)
- 限制MySQL数据库连接数的限制问题(mysql数据库的连接数)
- MySQL处理逗号转义的技巧(mysql逗号转义)
- 环境的搭建Linux系统下MySQL环境搭建实战指南(linux系统mysql)
- MySQL数据库中的交叉连接技术(mysql交叉连接)
- 「mysql 数据库封装」:让你的数据库操作更高效的利器(mysql数据库封装)
- MySQL数据库:如何进行字段赋值操作(mysql字段赋值)
- MySQL主主复制和主从的区别及作用(mysql主主复制主从)
- MySQL参数指南:完整指引你完善数据库构建(mysql参数大全)
- MySQL单步调试:了解最佳实践(mysql单步调试调试)
- 如何利用SPSS连接MySQL进行数据分析?(spss连接mysql)
- MySQL 快速切换数据库的最佳方式(mysql 切换 数据库)
- MySQL 10060:一个重要的数据库关键码(10060 mysql)
- MySQL如何查看数据库表结构(mysql查看数据库的表)
- MySQL中map用作参数的实现方法(mysql中map做参数)
- MySQL 简介:一个全面的数据库管理系统(mysql大全)
- C语言操作MySQL数据库的快捷命令(c 中mysql命令)
- MySQL数据库监控从C语言到安全运行(c mysql数据库监听)
- 借助Canal实现对MySQL的数据采集(canal采集mysql)
- MySQL数据库恢复从bak文件中重建你的数据库(bak文件还原mysql)
- 用CMD命令行删除MySQL数据库中的表(cmd删除mysql表)
- 一亿数据,MySQL保驾护航(1亿 mysql)
- MySQL数据库中的锁类型及其区别(mysql一共有几种锁)
- MySQL数据库如何不使用主键进行数据操作(mysql 不使用主键)
- MySQL双数据查询实现数据联合检索(mysql 两数据库查询)