目录
mysql权限
https://blog.csdn.net/yihuliunian/article/details/108202928
- 关于MySQL权限的几点常识:
(1)MySQL的权限系统主要用来验证用户的操作权限。
(2)在MySQL内部,权限信息存放在MySQL数据库的granttable里。当mysql启动后,granttable里的信息会写入内存。
(3)MySQL使用user name加host name来作为标识符。通过这种标识符,可以用来区分不同host上的相同的user name。
(4)MySQL 权限控制有2种策略:
① 根据密码是否正确来控制客户端的连接。
② 假设可以正常connect,server还可以检查每个satement是否有权限去执行。如果只有某张表的select权限,就不能进行drop 操作。
(5)如果用户的权限改变,当前已连接的会话用户不会受影响,下次登录才会生效。 - 关于MySQL的几个有关权限的表:
(1)user(用户账号、全局权限):记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。
(2)db(库级别权限):记录各个帐号在各个数据库上的操作权限。
(3)host(已废弃):配合db权限表对给定主机上数据库级操作权限作更细致的控制;MySQL5.6.7开始废弃了这个表。
(4)tables_priv(表级别权限):记录数据表级的操作权限。
(5)columns_priv(列级别权限):记录数据列级的操作权限。
(6)procs_priv:存储过程和存储函数相关的权限。
(7)proxies_priv:代理用户权限。
完整性约束
https://baike.baidu.com/item/数据完整性约束/10256513?fr=aladdin
数据完整性约束指的是为了防止不符合规范的数据进入数据库,在进行插入、修改、删除数据等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。
完整性
数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。
分为以下四类:
- 实体完整性:规定表的每一行在表中是惟一的实体。指关系的主码不能重复也不能取空值,因为空值是不确定。
- 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。
- 参照完整性:是指两个表的主码和外码的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。
- 用户定义的完整性:即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。
约束
- not null(非空):列上的取值非空。
- unique(惟一):列上的取值必须惟一。
(1)一个表中可定义多个unique约束。
(2)对于unique所约束的惟一键,最多允许有一个null值。 - primary key(主键):定义主键,起惟一标识作用。
(1)一个表中只能定义一个primary key约束。
(2)其值不能为null,也不能重复,以此来保证实体完整性。 - foreign key(外键):指定某一个列或一组列作为外部键。
(1)包含外部键的表称为子表,包含外部键所引用的主键的表称为父表。
(2)外部键上的取值是父表中某一主键值,或者空值,以此保证两个表之间的连接,确保了实体的参照完整性。 - check(校验):用来检查字段值所允许的范围。
索引
MySQL索引种类
https://zhuanlan.zhihu.com/p/115060806
- 普通索引(index):最基本的索引,没有任何限制,用于加速查询。
- 唯一索引(unique index):索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
- 主键索引(primary key):是一种特殊的唯一索引,一般是在建表的时候同时创建主键索引。
- 组合索引(index):指多个字段上创建的索引。
(1)只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。但是与where语句中字段出现的顺序无关;另外,其他字段不是索引字段也会使用到索引。
(2)遵循最左前缀集合。 - 全文索引(fulltext index):主要用来查找文本中的关键字,而不是直接与索引中的值相比较。
(1)和其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。
(2)配合match against操作使用,而不是一般的where语句加like。
(3)目前只有char、varchar,text列上可以创建全文索引。
索引的实现方式(按结构划分的类型)
https://www.jianshu.com/p/b55126bf656c
https://blog.csdn.net/summer_sy/article/details/105099145
https://blog.csdn.net/t18112925650/article/details/109229337
在MySQL中,索引是在存储引擎层而不是服务器层实现的。
- B-Tree索引(B-Tree index):
(1)目前大部分数据库系统及文件系统都采用B-Tree索引(技术上说B+Tree)。
(2)各种数据库在存放B-Tree 索引的时候会对存储结构稍作改造。如 Innodb 存储引擎的 B-Tree 索引实际使用的存储结构实际上是B+Tree,也就是在 B-Tree 数据结构的基础上做了很小的改造,在每一个Leaf Node上面除了存放索引键的相关信息之外,还存储了指向与该Leaf Node相邻的后一个LeafNode 的指针信息(增加了顺序访问指针),这主要是为了加快检索多个相邻Leaf Node的效率考虑。
(3)B-Tree通常意味着所有的值都是按顺序存储的,并且每一个叶子到根的距离相同。
(4)B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点开始进行搜索。 - 位图索引(bitmap index):
(1)是一类特殊的数据库索引技术,其索引使用bit数组(或称bitmap、bit set、bit string、bit vector)进行存储与计算操作。
(2)B树索引是一对一的,一个索引条目指向一行,而位图索引中索引条目非常少,每个条目指向多行。
(3)从Oracle7.3 版本开始引入的。目前Oracle 企业版和个人版都支持位图索引,但标准版不支持。
(4)在OLTP系统中比较少见,但是在OLAP系统中比较常见。
(5)以下特定情况下,位图索引比B 树索引更有优势:
① 表具有数百万行且键列的基数较低时(即列的不同值极少);
② 经常使用包含OR运算符的多个WHERE条件组合进行查询时;
③ 键列上的活动为只读或少量更新时(OLAP系统的特点)。
- 哈希索引(hash index):
(1)基于哈希表实现,只有精确匹配索引所有列的查询才有效。
(2)优点:因为索引自身只需存储对应的哈希值,所以索引的结构十分紧凑,查找的速度非常快。
(3)缺点:
①