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.主键索引(聚集索引)(也是唯一索引,不允许有 ...
随机推荐
- Mars Android 接入指南
Mars Android 接入指南 https://github.com/Tencent/mars/wiki/Mars-Android-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8 ...
- 使用JDK的zip编写打包工具类
JDK自带的zip AIP在java.util.zip包下面,主要有以下几个类: java.util.zip.ZipEntryjava.util.zip.ZipInputStreamjava.util ...
- Idea创建一个SpringBoot工程
1.打开Idea,点击新建工程 File—New—Project 2.点击下一步后可能会很一直在请求,或者直接报如下错误, 解决办法:直接点OK后再点Previous返回上一步,继续重新Next 3. ...
- Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)
Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...
- jQuery实现图片上传
$('input[type="file"]').change(function(event) { var currentTarget = event.currentTarget; ...
- JavaScript之控制表单元素的值
表单元素.value 获取表单元素的值 表单元素.value='这是修改后的值' 修改表单元素的值 案例: (1)html <input type="text" id=&qu ...
- WAS更新web.xml配置文件不生效的问题
问题及原因分析: 之前修复漏洞时,写了个过滤器配置在web.xml中,但是部署到服务器并重启后,重新扫描漏洞,还是没有解决对应问题.在确定了这种修复方案是切实可行之后分析,可能是配置的web.xml未 ...
- IDEA 阿里巴巴代码规范检查插件
1.问题概要 大家都想写出规范的代码,可规范的标准是什么勒,估计每个人心中的标准都不是完全一致的 在分工合作越来越精细化的时代,我们需要一个最大程度接近公认的规范,这里我们以阿里巴巴的代码规范作为参考 ...
- 【OEM】OEM安装维护
[OEM]OEM安装维护 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道 ...
- 使用IDEA运行项目时提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除
如图 在使用IDEA运行项目时,在下方提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除 这是因为JDK版本问题 解决方法如下:左上角 file ——> Projec ...