MySQL(一):基础概念

 

关系型数据库是建立在关系模型上的,关系模型本质是若干个存储数据的二维表,表的每一行称为记录(Record),记录是一个逻辑意义上的数据。表的每一列称为字段(Column),同一表的每一行记录都有相同的若干字段。字段定义了数据类型,以及是否被允许为NULL(NULL表示字段数据不存在,一个整型字段如果为NULL不表示它的值为0,同样的,一个字符串型字段为NULL也不表示它的值为空串'')。通常情况下,字段应避免为NULL,可以简化查询条件,加快查询数据。

关系数据库中的表与表之间需要建立“一对一”,“一对多”和“多对多”的关系,这样才能按照引用程序的逻辑来组织和存储数据。

对于关系表,有一个很重要的约束,就是任意两条记录不能重复。必须能通过某个字段唯一区分出不同的记录,这个字段被称为主键。

对主键的要求,最关键的一点是:记录一旦插入到表中,主键最好不要再修改,因为主键是用来唯一定位记录的,修改了主键,会造成一系列的影响。

选取主键的一个基本原则:不使用任何业务相关的字段作为主键。例如身份证号码,手机号,邮箱地址等等。

作为主键最好是完全业务无关的字段,我们一般把这个字段命名为id。常见的可作为id字段的类型有:

  1. 自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键重复,也不用自己预先生成主键;

  2. 全局唯一GUID类型:使用一种全局唯一的字符串作为主键

关系数据库实际上允许多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键。对于联合主键,允许有一列重复,只要不是所有主键都重复即可。没有必要的情况下,不推荐使用联合主键给关系表带来复杂度的上升。

students表中,通过class_id的字段,可以把数据与另一张表关联起来,这种列称为外键

外键并不是通过列名实现的,而是通过定义外键约束实现的:

ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);

其中,外键约束的名称fk_class_id可以任意,FOREIGN KEY (class_id)指定了class_id作为外键,REFERENCES classes (id)指定了这个外键将关联到classes表的id列(即classes表的主键)。

通过定义外键约束,关系数据库可以保证无法插入无效的数据。即如果classes表不存在id=99的记录,students表就无法插入class_id=99的记录。

由于外键约束会降低数据库的性能,大部分互联网应用程序为了追求速度,并不设置外键约束,而是仅靠应用程序自身来保证逻辑的正确性。这种情况下,class_id仅仅是一个普通的列,只是它起到了外键的作用而已。

删除一个外键约束,也是通过ALTER TABLE实现的:

ALTER TABLE students
DROP FOREIGN KEY fk_class_id;

注意:删除外键约束并没有删除外键这一列。删除列是通过DROP COLUMN ...实现的。

索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。

索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引的效率越高。一张表可以创建多个索引。索引的优点是提高了查询效率,缺点是在插入、更新和删除记录时,需要同时修改索引,因此索引越多,查询更新删除记录的速度就越慢。关系型数据库会自动对主键创建索引,主键索引的效率是最高的,因为主键保证绝对唯一。

如何保证某一列具有唯一性

  1. 通过UNIQUE关键字添加唯一索引:
ALTER TABLE students
ADD UNIQUE INDEX uni_name (name);

2.只针对这一列添加一个唯一约束而不创建唯一索引:

ALTER TABLE students
ADD CONSTRAINT uni_name UNIQUE (name);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值