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 使用 JustAssembly 比较两个不同版本程序集的 API 变化
原文:.NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化 最近我大幅度重构了我一个库的项目结构,使之使用最新的项目文件格式(基于 Microsoft.NET.Sdk)并使 ...
- Windows 2003 服务器 关闭IIS中FTP匿名访问
控制面板 –> 管理工具 –> Internet信息服务管理器打开后左侧选择相应的FTP站点右击 –> 属性 –> 安全帐户允许匿名连接 前面的√取消掉,点击确定完成
- 浅谈有趣的 //go: 指令
前言 如果你平时有翻看源码的习惯,你肯定会发现.咦,怎么有的方法上面总是写着 //go: 这类指令呢.他们到底是干嘛用的? 今天我们一同揭开他们的面纱,我将简单给你介绍一下,它们都负责些什么 go:l ...
- RHEL6搭建网络yum源软件仓库
RHEL的更新包只对注册用户生效,所以需要自己手动改成Centos的更新包 一.查看rhel本身的yum安装包 rpm -qa | grep yum 二.卸载这些软件包 rpm -qa | grep ...
- 长期作业:web框架源码剖析
Tornado框架 1.1. 手动安装 1.2. 从简单的开始:分析红框部分的源码 Django框架
- java服务端集成极光消息推送--详细开发步骤
1.极光推送账号准备 要使用极光消息推送必须先在官方网站上注册账号,并添加应用. 产品介绍:https://docs.jiguang.cn/jpush/guideline/intro/ 注册开发者账号 ...
- Linux文本编译工具VIM详解
Linux文本编译工具VIM详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.VIM概述 1>.vim简介 >.vi: 全称Visual editor,即文本编辑 ...
- python关于time几种格式处理方法总结
一.日期时间的表示方法: 时间戳 timestamp: 简介:时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,是一个float类型 展示形式:1575278720.331 时间 ...
- SQL进阶系列之10HAVING子句又回来了
写在前面 HAVING子句的处理对象是集合而不是记录 各队,全队点名 --各队,全体点名! CREATE TABLE Teams (member CHAR(12) NOT NULL PRIMARY K ...
- Python基础->for循环、字符串以及元组
python流程控制>for循环.字符串以及元组 学习有关序列的思想.序列:一组有顺序的东西.所有的序列都是由元素组成的,序列中的元素位置是从0开始编号的,最后一个元素的位置是它长度减一. fo ...