MySQL进阶13--常见六大约束: 非空/默认/主键/唯一约束/检查约束/外键约束--表级约束 / 列级约束
/* MySQL进阶13
常见六大约束:
1.not null 非空
2.default :默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10
3.primary key : 主键,用于保证该字段的值具有唯一性,并且非空
4.unique : 唯一约束,保证该字段的值可以为空,具有唯一性
5.check : 检查约束[mysql不支持,不报错,没有实际效果]
6.foreign key : 外键约束; 用于限制两个表的关系, 用于保证该字段的值必须来自于主表的关联列的值;
在从表中添加外键约束,用于引用主表中的某列的值;
比如: 学生表的专业编号,员工表的部门编号,员工表的工种编号;
添加约束的时机:
1.创建表时
2.修改表时
----------
约束的添加分类:
列级约束 : 六大约束语法上都支持,但外键没有效果!!
表级约束 :
除了非空,默认, 其他的都支持!
语法 : constraint 约束名 约束类型(字段名)
主键和唯一:
都可以组合! #二. 修改表的时候
添加列级约束
alter table 表名 modify column 字段名 字段类型 新类型;
添加表级约束
alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键的引用]; #********添加表名
# alter table 表名 add column 字段名 字段类型;
*/ CREATE TABLE 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
); #一: 创建表时添加约束
CREATE DATABASE students;
#1.添加列级约束
USE students;
CREATE TABLE stuinfo(
id INT PRIMARY KEY, #主键
stuName VARCHAR(20) NOT NULL, #非空
gender CHAR(1) CHECK(gender IN ('男','女')), #检查约束
seat INT UNIQUE, #唯一
age INT DEFAULT 18 , #默认约束
majorId INT REFERENCES major(id) #设置为外键
);
DESC stuinfo;
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
#2 添加表级约束
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT , #主键
stuName VARCHAR(20), #非空
gender CHAR(1), #检查约束
seat INT, #唯一
age INT , #默认约束
majorid INT, CONSTRAINT pk PRIMARY KEY(id), #设置主键
CONSTRAINT uq UNIQUE(seat), #唯一键
CONSTRAINT ck CHECK(gender ='男' OR gender ='女'), #检查
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外键
);
SHOW INDEX FROM stuinfo; #组合写法,更常用! 主键和唯一:都可以组合!
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT , #主键
stuName VARCHAR(20), #非空
gender CHAR(1), #检查约束
seat INT, #唯一
age INT , #默认约束
majorid INT, PRIMARY KEY(id,stuName), #设置主键
UNIQUE(seat), #唯一键
CHECK(gender ='男' OR gender ='女'), #检查
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外键
); #二. 修改表的时候添加约束
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT ,
stuName VARCHAR(20),
gender CHAR(1),
seat INT,
age INT ,
majorid INT
);
DESC stuinfo;
#1.添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
#2 添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
#3添加主键: 1)列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
#2) 表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id); #4.添加唯一
#1.列级约束
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
#2) 表级约束
ALTER TABLE stuinfo ADD UNIQUE(id); #5.添加外键
ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);
ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id); #三 .删除约束 #1.删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
#2 删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT;
#3删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;
#4删除唯一
ALTER TABLE stuinfo DROP INDEX seat;
#5.删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major; DESC stuinfo;
MySQL进阶13--常见六大约束: 非空/默认/主键/唯一约束/检查约束/外键约束--表级约束 / 列级约束的更多相关文章
- oracle之约束-主键、非空、唯一、check、外键、默认
--首先添加主键约束alter table studentadd constraint PK_student_sno primary key(sno) --删除约束alter table studen ...
- MSSQL系列 (二):表相关操作、列操作、(唯一、主键、默认、检查、外键、非空)约束、临时表
1.创建表 --创建学生班级表 create table StuClass ( ClassId int primary key, --班级ID 主键约束 ClassName nvarchar(30) ...
- MySQLWorkbench里的稀奇事之timestamp的非空默认值
在创建表时,某字段为非空时间戳,timestamp not null 问题来了,使用workbench建表时,如果值非空,是需要有一个默认值的,不然会报错. 那么,如果是更新时自动填充可以使用DEFA ...
- SQL Server 数据库添加主键,唯一键,外键约束脚本
-- 声明使用数据库use 数据库;go -- 添加主键(primary key)约束-- 基本语法-- 判断主键约束是否存在,如果存在则删除,不存在则添加if exists(select * fro ...
- 测试脚本配置、ORM必知必会13条、双下划线查询、一对多外键关系、多对多外键关系、多表查询
测试脚本配置 ''' 当你只是想测试django中的某一个文件内容 那么你可以不用书写前后端交互的形式而是直接写一个测试脚本即可 脚本代码无论是写在应用下的test.py还是单独开设py文件都可以 ' ...
- Mysql AVG() 值 返回NULL而非空结果集
[1]select 查询返回一行NULL 先来模拟复现一下遇到的问题. (1)源数据表grades,学生成绩表 (2)查询SQL语句 查询‘080601’班的各门课平均成绩 SELECT sClass ...
- Oracle获取表结构信息:表名、是否视图、字段名、类型、长度、非空、主键
select a.TABLE_NAME as "TableName", then 'V' else 'U'end as "TableType", a.COLUM ...
- mysql 查询指定数据库所有表, 指定表所有列, 指定列所有表 所有外键及索引, 以及索引的创建和删除
查询指定 数据库 中所有 表 (指定数据库的,所有表) // 可以把 TABLE_NAME 换成 * 号, 查看更丰富的信息 SELECT TABLE_NAME FROM information_sc ...
- 数据库六大约束用法:主键(primary key)、外键(foreign key)、非空(not null)、默认(default)、检查(check)、唯一(unique)
1. 数据库有六大约束 主键(primary key) 外键(foreign key):被参照的键必须有唯一约束或是主键 非空(not null) 默认(default) 检查(check):orac ...
随机推荐
- 微信小程序填坑,wx.request() 内调用setData()方法错误的解决办法
再方法内添加一行代码,把this对象赋值给给一个变量供success()方法内调用 核心代码: var v = this.txt; 完整示例 abc:function(e){//该函数用于和后台交互 ...
- Python标准库: functools (cmp_to_key, lru_cache, total_ordering, partial, partialmethod, reduce, singledispatch, update_wrapper, wraps)
functools模块处理的对象都是其他的函数,任何可调用对象都可以被视为用于此模块的函数. 1. functools.cmp_to_key(func) 因为Python3不支持比较函数,cmp_to ...
- 任务调度之Quartz.Net基础
最近公司要求将之前的系统设计文档补上,于是大家就都被分配了不同的任务,紧锣密鼓的写起了文档来.发现之前项目中使用了Quartz.Net来做一些定时任务的调度,比如定时的删除未支付的订单,定时检查支付状 ...
- Java注解-注解处理器、servlet3.0|乐字节
大家好,我是乐字节的小乐,上次给大家带来了Java注解-元数据.注解分类.内置注解和自定义注解|乐字节,这次接着往下讲注解处理器和servlet3.0 一.注解处理器 使用注解的过程中,很重要的一部分 ...
- TCP/UDP网络编程调试助手下载
下载地址:可能需要谷歌:软件干净,挺好用的,如果有更好的,欢迎留言! https://www.waveshare.com/wiki/File:TCP-UDP-Debug.7z
- 如何将生产环境的服务Docker镜像拉取到本地进行调试
背景 很多时候我们在将开发环境的代码推送到GitLab上面以后,我们在测试的时候发现了问题后无法通过现有的日志输出级别来定位问题,比如我们需要看EFCore生成的SQL语句,在生产环境我们是不可能输出 ...
- Ubuntu 18.04安装arm-linux-gcc交叉编译器
Ubuntu 18.04安装arm-linux-gcc交叉编译器
- Java中final与C++中const的关系
Java中的final有三种主要用法: (1)修饰变量: final变量是不可改变的,但它的值可以在运行时刻初始化,也可以在编译时刻初始化,甚至可以放在构造函数中初始化,而不必在声明的时候初始化,所以 ...
- C语言变量和常量
常量 在程序执行过程中,其值不能被改变 常量一般出现在表达式或者赋值语句 利用const 修饰的变量为常量,不可修改 利用define定义的一般为常量,定义时候不需要分号 利用extern修饰的量知识 ...
- wc 指令
统计文件的行数, 字符数, 字节数. wc 命令的功能相对简单,参数也较少,但是是统计文本行数,字符数的利器.具体的参数和用法如下 语法 wc [OPTION]... [FILE]... wc [OP ...