MySQL创建管理索引与数据完整性

今天我们谈一谈MySQL数据库的创建管理索引与数据的完整性。

你好WO SHI 七七卡卡 ^ _ ^

先说明一下,数据库的的编译器有很多,我用的是php study2016版本;(MySQL的注意事项我就不说了)

索引

索引的作用

(1)可以加快数据的检索速度,这也是创建索引的最主要原因。
(2)通过创建唯一性索引,可以确保表中每-行数据的唯-一性。
(3)可以加速表和表之间的连接,特别有利于实现数据的参照完整性。
(4)在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。 建立索引的一般原则如下:
(1)对经常用来查询数据记录的字段建立索引。
(2)对表中的主键字段建立索引。
(3)对表中的外键字段建立索引。
(4)对在查询中用来连接表的字段建立索引。
(5)对经常用来作为排序基准的字段建立索引。
(6)对查询中很少涉及的字段、重复值比较多的字段不建立索引。

索引的分类

MySQL的索引包括普通索引、唯一性索引、主键索引和全文索引,它们存储于 B树中, 只有空间索引使用R树,同时MEMORY表还支持哈希索引。
(1)普通索引
普通索引是最基本的索引类型,索引字段可以有重复的值。创建普通索引的关键字是INDEX,
(2)唯一性索引
唯一性索引保证了索引字段不包含重复的值。创建唯-性索引的关键字是UNIQUE,
(3)主键索引
主健索引一般在创建表的时候指定主键,也可以通过修改表的方式加人主键。但是每 个表只能有一个主键。创建主键索引的关键字是PRIMARY KEY.
(4)全文索引
全文索引只能创建在CHAR、VARCHAR或者TEXT类型的字段上。查询数据量较 大的字符串类型的字段时,使用全文索引可以提高查询速度。并且只能在MyISAM表中创 建。创建全文索引的关键字是FULLTEXT.
(5)空间索引
空间索引只能建立在空间数据类型上,这样可以提高系统获取空间数据的效率。 MySQL中只有MyISAM表支持空间检索。而且索引的字段不能为空值。创建空间索引 的关键字是SPATIAL.
(6)哈希索引
哈希索引是基于哈希表实现的,哈希索引将所有的哈希码存储在索引中,同时在哈希表 中保存指向每个数据行的指针。在MySQL中,只有MEMORY表支持哈希索引。创建哈 希索引的关键字是HASH.

创建各种索引

0.0 索引排序
我们为表qika_xinxi的出生日期添加索引 基本格式如下:

create unique index (新索引名如:istudent) on <表名> (列名 desc);
默认为升序;创建索引为降序

因为数据只有一条所以就看不出排序
在这里插入图片描述
这样索引就创建好了;
0.1普通索引

create index (新索引名如:icourse) on <表名> (需要索引的字段名 例如:kechenghao);

0.2复合索引

创建复合索引:
alter table <表名> add index (新复合索引名 如:isc)  (列名,列名); 

0.3全文索引
为了更好地理解我们再创建一个新表qika_book 并且为表的内容摘要创建全文索引;

fulltext index ibook(创建新的索引名) (neirongzhaiyao (索引的字段)))
engine = mysiam default charset = gbk;

在这里插入图片描述
0.4哈希索引
为了理解我们创建一个qika_library 然后对作者的字段创建哈希索引

key using hash(创建新的索引名) (zuozhe (索引的字段)) engine memory;

在这里插入图片描述

查看索引

show create table <表名>;

在这里插入图片描述

删除索引

删除索引:
drop index (索引名 如:istudent) on <表名>;
alter table <表名>  drop index (索引名 如:isc)

在这里插入图片描述

数据完整性

0.0数据完整性的分类:

实体完整性:
实体完整性的实现途径主要包括PRIMARY KEY(主键约束)、UNIQUE(唯一性约 束)和UNIQUE INDEX(唯一索引)。

域完整性:
域完整性的实现途径主要包括DEFAUL(默认值)、CHECK(检查约束)、FOREIGN KEY(外键约束)和DATA TYPE(数据类型)。

参照完整性:
参照完整性的实现途径主要包括FOREIGN KEY(外键约束)、CHECK(检查约束)、 TRIGERS(触发器)和STORED PROCEDURE(存储过程)。

用户自定义完整性:
用户定义完整性的实现途径主要包括CHECK(检查约束)、TRIGERS(触发器)和 STORED PROCEDURE(存储过程)等。

使用约束

primary key 约束

在创建索引里我们发现了这么一段话在这里插入图片描述
对下面就详细介绍一下primary key 是啥:
PRIMARY KEY 约束是通过定义表的主键来实现实体完整性约束的。 为了能唯一地 表示表中的数据行,通常将某一列或多列的组合定义为主键。一个表只能有一个主键,而且 走键约束中的列不能为空值,且唯一地标识表中的每 一行。 如果主键不止一列,则一列中的 值可以重复,但主键定义的所有列的组合值必须唯一。
0.1 创建primary key 基本格式

添加主键 primary key 约束:
constraint pxh (约束名) primary key (要约束的字段名 例如:xuehao);

0.2删除primary key 约束:

alter table <表名> drop primary key;

0.3在表中的使用

create table qika_student(
xuehao char(9) not null,
xingming varchar(10),
xingbie char(2),
chushengriqi date,
minzu varchar(10),
zhengzhimianmao varchar(8),
constraint pxh primary key (xuehao)
);
unique 约束

UNIQUE约束确保表中一列或多列的组合值具有唯 一性,防止输人 重复值,主要用于 保证非主键列的实体完整性。 例如,在student表中增加身份证号一列,由于身份证号不可 能重复,所以在该列上可以设置UNIQUE约束,以确保不会输人重复的身份证号码。

0.1创建unique约束

添加 unique 约束:
constraint usfz (约束名) unique (要约束的字段 例如: shenfenzheng);

0.2在表中使用

create table qika_student(
xuehao char(9) not null,
xingming varchar(10),
xingbie char(2),
chushengriqi date,
minzu varchar(8),
shenfenzhenghao char(18),
constraint usfz unique (shenfenzhenghao)
);

UNIQUE约束与PRIMARYKEY约束类似,每个UNIQUE约束MySQL也会为其 创建一个唯一索引,强制唯一性。与PRIMARYKEY约束不同的是,UNIQUE约束用于 非主键的一列或多列组合,允许为一个表创建多个UNIQUE约束,且可以用于定义允许空 值的列。

UNIQUE约束与PRIMARY KEY约束类似,UNIQUE约束的语句不能独立使用,通 常放在CREATE TABLE语句或ALTER TABLE语句中使用。如果在CREATE TABLE 语句中使用上述SQL语句,表示在定义表结构的同时指定唯一键;在ALTER TABLE- AD…语句中使用上述SQL语句,表示为已存在的表创建唯- -键。

check 约束

CHECK约束用于限制输人到一个或多个属性值的范围。使用一个逻辑表达式来检查要输人数据的有效性,如果输人内容满足CHECK约束的条件,将数据写人到表中,否则,数据无法输人,从而保证MySQL数据库中数据的城完整性。一个数据表可以定义多个CHECK约束。

0.1表中使用:将成绩定义0-100

添加约束 (check):
alter table <表名> add constraint cscore (约束名) check ( (邀约束的字段 例如:chengji) between 0 and 100);

性别字段只能输入“男”、“女”

use boke_qika;
alter table qika_xinxi add constraint csex check(xingbie in ('男','女')); 
foreign key 约束

FOREIGN KEY约束为表中一列或多列的组合定义为外键。其主要目的是建立和加强表与表之间的数据联系,确保数据的参照完整性。在创建和修改表时可通过定义 FOREIGNKEY约束来建立外键。外键的取值只能是被参照表中对应字段已经存在的值 或者是NULL值。FOREIGN KEY约束只能参照本身所在数据库中的某个表,包括参照该字 自身表,但不能参照其他数据库中的表。

0.1 foreign key 约束表中使用

添加外键 foreignconstraint fxh (约束名) foreign key (要约束的字段 例如:xuehao) references <表名 例如:student> (约束名 例如:xuehao);

创建一个与 qika_student 表关联的 foreign key 约束的表

create table qika_sc(
xuehao char(9) not null,
chengji decimal(4,1),
constraint fxh foreign key (xuehao) references qika_student(xuehao)
);
not null 约束

我们在之前所创建的表中不止一次见到过not null 那它到底是做什么的呢?
下面我们就聊一聊

列的NOT NULL约束定义了表中的数据行的特定列是否可以指定为NULL值。 NULL值不同于零(0)或长度为零的字符串(’’)。在一般情况下,如果在插入数据时不输入该属性的值,则表示为NULL值。因此,出现NULL通常表示为未知或未定义。
**指定某一属性不允许为NULL值有助于维护数据的完整性,如用户向表中输人数据必 须在该属性上输人一个值,否则数据库将不接受该记录,从而确保了记录中该字段永远包含 数据。**在通常情况下,对一些主要字段建议不允许NULL值,因为NULL值会使查询和更 下:新变得复杂,使用户在操作数据时变得更加困难。
在MySQL中,用SQL语句创建表的时候,在对属性的描述时附加NULL.NOT NULL来实现。
注意:定叉了PRIMARY KEY约束的列不允许NULL值。

default 约束

**DEFAULT约束是为属性定义默认值。**若表中的某属性定义了DEFAULT约束,在 插人新记录时,如果未指定在该属性的值,则系统将默认值置为该属性的内容。默认值可以包括常量、函数或者NULL值等。
对于一个不允许接受NULL值的属性,默认值更显示出其重要性。最常见的情况是, 当用户在添加数据记录时,在某属性上无法确定应该输人什么数据,而该属性存在NOT NULL约束,这时与其让用户随便输人一个数据值,还不如由系统以默认值的方式指定一个默认值 “尚未确定” 。在添加新生的数据时,如果还未确定其所学专业时,系统自动将字符串“尚未确定”存人该属性中。

0.1 default 表中使用

create table boke_qika(
xuehao char(9) primary key,
xingming varchar(10) not null,
xingbie char(2),
chushengriqi date,
minzu varchar(10),
zhengzhimianmao varchar(8) default '共青团员' );

0.2 添加

添加:
alter table <表名> alter (约束字段 例如:zhengzhimianmao) set default '默认值';
alter table qika_student alter zhengzhimianmao set default '共青团员';

在这里插入图片描述

希望对你在学习 MySQL 的道路上提供一点点帮助。谢谢,

WO SHI 七七卡卡 ^ _ ^ 如果代码对你有帮助还希望 点赞+关注
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇卡雨言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值