SQL基础-约束&索引
一、约束
1、约束简介
约束(constraint):
表中数据的限制条件。 完整性 有效性 约束的种类:
主键约束
外键约束
唯一约束
检查约束
非空约束
2、主键约束
主键约束:
唯一标识表中每一行的一列或多个列,可以定义一列或多列为主键;
主键列上没有任何两行具有相同值(即重复值),不允许空(NULL);
主健可作外健,唯一索引不可;
不能或者很难更新; 定义表的主键:
方法一:建表时定义
CREATE TABLE student (
student_id varchar(50) NOT NULL COMMENT '学生编号',
student_name varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
gender varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
birth_day date NOT NULL COMMENT '生日',
age int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
class_id varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
score decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
teacher_id varchar(20) DEFAULT NULL COMMENT '老师编号',
PRIMARY KEY(student_id)
)COMMENT='学生'; 方法二:建表后创建
REATE TABLE student (
student_id varchar(50) NOT NULL COMMENT '学生编号',
student_name varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
gender varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
birth_day date NOT NULL COMMENT '生日',
age int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
class_id varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
score decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
teacher_id varchar(20) DEFAULT NULL COMMENT '老师编号'
)COMMENT='学生’; ALTER TABLE student ADD PRIMARY KEY(student_id);
3、外键约束
外键约束:
约定某一列的值必须出现在另一个表的主键中;
表的外键是另一表的主键, 外键可以有重复的, 可以是NULL;
用来和其他表建立联系用的;
一个表可以有多个外键; 方法一:建表时创建
CREATE TABLE student (
student_id varchar(50) NOT NULL COMMENT '学生编号',
student_name varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
gender varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
birth_day date NOT NULL COMMENT '生日',
age int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
class_id varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
score decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
teacher_id varchar(20) DEFAULT NULL COMMENT '老师编号',
FOREIGN KEY(teacher_id) REFERENCES teacher(teacher_id)
)COMMENT='学生'; 方法二:建表后创建
CREATE TABLE student (
student_id varchar(50) NOT NULL COMMENT '学生编号',
student_name varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
gender varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
birth_day date NOT NULL COMMENT '生日',
age int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
class_id varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
score decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
teacher_id varchar(20) DEFAULT NULL COMMENT '老师编号'
)COMMENT='学生’; ALTER TABLE student ADD FOREIGN KEY(teacher_id) REFERENCES teacher(teacher_id);
4、唯一约束
唯一约束:
约定某一列或某几列的值在表中不重复。 唯一约束和主键约束的区别:
唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,不但不允许有重复,而且也不允许有空值。 约束和索引:
前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同; #创建唯一约束
方法一:UNIQUE关键字,这种直接定义在列名后,适合单字段
CREATE TABLE student (
student_id varchar(50) NOT NULL COMMENT '学生编号',
student_name varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名' UNIQUE,
gender varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
birth_day date NOT NULL COMMENT '生日',
age int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
class_id varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
score decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
teacher_id varchar(20) DEFAULT NULL COMMENT '老师编号'
)COMMENT='学生'; 方法二:定义在最后,可以指定多个字段唯一
CREATE TABLE student (
student_id varchar(50) NOT NULL COMMENT '学生编号',
student_name varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
gender varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
birth_day date NOT NULL COMMENT '生日',
age int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
class_id varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
score decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
teacher_id varchar(20) DEFAULT NULL COMMENT '老师编号',
UNIQUE (calss_id,student_name)
)COMMENT='学生';
5、检查约束
检查约束:
约定某一列的值必须满足指定的条件。 与其他约束不同,MySQL虽然支持CHECK约束,但并没有强制限制。也就是说,违反约束的数据也会被接受。 CREATE TABLE student (
student_id varchar(50) NOT NULL COMMENT '学生编号',
student_name varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
gender varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
birth_day date NOT NULL COMMENT '生日',
age int(11) NOT NULL DEFAULT '0' COMMENT '年龄' CHECK ( age >= 10 AND age <= 20 ),
class_id varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
score decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
teacher_id varchar(20) DEFAULT NULL COMMENT '老师编号'
)COMMENT='学生';
6、非空约束
非空约束:
约定某一列的值不可为NULL。 CREATE TABLE student (
student_id varchar(50) NOT NULL COMMENT '学生编号',
student_name varchar(100) NOT NULL DEFAULT '' COMMENT '学生姓名',
gender varchar(10) NOT NULL DEFAULT '' COMMENT '性别',
birth_day date NOT NULL COMMENT '生日',
age int(11) NOT NULL DEFAULT '0' COMMENT '年龄',
class_id varchar(50) NOT NULL DEFAULT '' COMMENT '班级编号',
score decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '数学成绩',
teacher_id varchar(20) DEFAULT NULL COMMENT '老师编号'
)COMMENT='学生';
二、索引
1、索引
索引定义:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,
数据库索引是用于提高数据库表的数据访问速度的。
数据库索引的特点:
a)避免进行数据库全表的扫描,大多数情况,只需要扫描较少的索引页和数据页,而不是查询所有数据页。而且对于非聚集索引,有时不需要访问数据页即可得到数据。
b)聚集索引可以避免数据插入操作,集中于表的最后一个数据页面。
c)在某些情况下,索引可以避免排序操作。
索引背后的数据结构基础是b tree或者 b+ tree,后续有机会再详细看;
2、索引的创建及使用
比如:
查询2006年6月12日出生的学生有哪些? SELECT * FROM student WHERE birth_day = '2006-06-12'; 如果birth_day这一列查询频率很高,可以创建索引: CREATE INDEX idx_birth_day ON student(birth_day); #为多个列创建索引
CREATE UNIQUE INDEX idx_2 ON student(class_id,student_name);
SELECT * FROM student WHERE class_id = 'G0102' AND student_name = '牛思静';
3、删除索引
比如:删除student表上创建的名为idx_2的索引:
DROP INDEX idx_2 ON student;
4、索引的优缺点
优点:
提高查询(SELECT、GROUP BY、ORDER BY)速度;
唯一索引可保证数据唯一性; 缺点:
创建的索引需要占用物理存储空间;
建立并维护索引需要花费时间,且随着表中数据量的增加,花费的时间也会增加;
SQL基础-约束&索引的更多相关文章
- (2.10)Mysql之SQL基础——约束及主键重复处理
(2.10)Mysql之SQL基础——约束及主键重复处理 关键词:mysql约束,批量插入数据主键冲突 [1]查看索引: show index from table_name; [2]查看有约束的列: ...
- SQL基础(3)-索引/触发器/视图操作
本文只列出索引,触发器,视图的简单操作语句 1.索引 a.创建 create index idx_name on fdh_client_info(name); --普通索引(单列索引) create ...
- SQL基础--> 约束(CONSTRAINT)
--============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...
- SQL Server - 约束 CONSTRAINT
总结 约束放置在表中,以下五种约束: NOT NULL 非空约束C 指定的列不允许为空值 UNIQUE 唯一约束U 指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的 PRIMARY KE ...
- SQL Server基础之索引
索引用于快速找出在某个列中有某一特定值的行,不使用索引,数据库必须从第一条记录开始读完整个表,直到找出相关的行.表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,数据库能快速到达一个位置 ...
- SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束
SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束 其实这里知识不难,只是好久不接触突然被问的话有时还真的一时答不上,自己写一遍胜过盲扫.当然,也有些常读常新的地方会 ...
- 基础篇 - SQL 的约束
基础篇 - SQL 的约束 约束 一.实验简介 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性.本节实验将在实践操作中熟悉 MySQL 中的几种约束. 二 ...
- (2.9)Mysql之SQL基础——索引的查看与删除
(2.9)Mysql之SQL基础——索引的查看与删除 关键词:mysql索引查看,mysql索引删除 1.索引查询(以下包括主键,唯一,普通,复合,全文,但不包括外键) (1)按库查询 select ...
- (2.8)Mysql之SQL基础——索引的分类与使用
(2.8)Mysql之SQL基础——索引的分类与使用 关键字:mysql索引,mysql增加索引,mysql修改索引,mysql删除索引 按逻辑分类: 1.主键索引(聚集索引)(也是唯一索引,不允许有 ...
随机推荐
- NET Core 3.0 AutoFac替换内置DI的新姿势
原文:NET Core 3.0 AutoFac替换内置DI的新姿势 .NET Core 3.0 和 以往版本不同,替换AutoFac服务的方式有了一定的变化,在尝试着升级项目的时候出现了一些问题. 原 ...
- Spring AOP无法拦截Controller的原因
因为Spring的Bean扫描和Spring-MVC的Bean扫描是分开的, 两者的Bean位于两个不同的Application, 而且Spring-MVC的Bean扫描要早于Spring的Bean扫 ...
- 【转载】 C#中使用decimal.Parse方法将字符串转换为十进制decimal类型
在C#编程过程中,很多时候涉及到数据类型的转换,例如将字符串类型的变量转换为十进制decimal类型就是一个常见的类型转换操作,decimal.Parse方法是C#中专门用来将字符串转换为decima ...
- Kali 2019(debian linux)安装MySql5.7.x
Kali 2019(debian linux)安装MySql5.7.x MySQL安装 确认是否安装MySQL 终端输入:mysql 如出现Welcome to the MariaDB monitor ...
- 美国LangeEylandt长岛
LangeEylandt n.长岛(美国) 纽约长岛 纽约长岛 (LongIsland)是北美洲在大西洋内的一个岛,最早追溯到十七世纪的1650年被命名为Lange Eylandt [1] ,位于北美 ...
- DataPipeline CTO 陈肃:我们花了3年时间,重新定义数据集成
目前,中国企业在大数据流通.交换.利用等方面仍处于起步阶段,但是企业应用数据集成市场却是庞大的.根据 Forrester 数据看来,2017 年全球数据应用集成市场纯软件规模是 320 亿美元,如果包 ...
- Xshell设置全局配色
1.个人比较喜欢的配色: [XTerm] text=00ff80 cyan(bold)=00ffff text(bold)=e9e9e9 magenta=c000c0 green=80ff00 gre ...
- pinpoint的只是总结
1,对于拓扑图不显示的原因,可能是hbase版本和pp版本不匹配的原因2,calltree中出现 API-METADATA-NOT-FOUND时是因为HBASE中的元数据被清除了,需要重启应用才可以. ...
- k8s包管理工具helm - 介绍和安装
目录 1.Kubernetes 应用部署的挑战 2.Helm 是什么 3.Helm 组件及相关术语 4.Helm 工作原理 5.Helm 安装 5.1 客户端安装 5.2 安装服务端 Tiller 5 ...
- 使用Xpath+多进程爬取诗词名句网的史书典籍类所有文章。update~
上次写了爬取这个网站的程序,有一些地方不完善,而且爬取速度较慢,今天完善一下并开启多进程爬取,速度就像坐火箭.. # 需要的库 from lxml import etree import reques ...