mysql 子查询分页_MySQL子查询,正则表达式,索引,分页,三大范式

子查询

可以将子查询放在许多的 SQL 子句中,包括:

• WHERE 子句• HAVING 子句

• FROM 子句

使用子查询的原则

• 子查询放在圆括号中。

• 将子查询放在比较条件的右边。

• 在单行子查询中用单行运算符,在多行子查询中用多行运算符。

示例

--谁的薪水比 Oldlu 高select em.last_name,em.salary from employees em where em.salary > (select e.salary from

employees e where e.last_name = 'Oldlu')

单行子查询

多行子查询

MySQL 中的正则表达式MySQL 中允许使用正则表达式定义字符串的搜索条件,性能要高于 like。

MySQL 中的正则表达式可以对整数类型或者字符类型检索。

使用 REGEXP 关键字表示正则匹配。

默认忽略大小写,如果要区分大小写,使用 BINARY 关键字

正则表达式的模式及其含义

索引

MySQL 索引的建立对于 MySQL 的高效运行是很重要的,索引可以大大提高 MySQL的检索速度。

MySQL 中的索引类型普通索引

唯一索引

主键索引

组合索引

全文索引

普通索引

是最基本的索引,它没有任何限制。

在创建索引时,可以指定索引长度。length 为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度,如果是 BLOB 和 TEXT 类型,必须指定 length。

创建索引时需要注意:

如果指定单列索引长度,length 必须小于这个字段所允许的最大字符个数。

查询索引:SHOW INDEX FROM table_name

直接创建索引

CREATE INDEX index_name ON table(column(length))

示例

--为 emp3 表中的 name 创建一个索引,索引名为 emp3_name_indexcreate index emp3_name_index ON emp3(name)

修改表添加索引

ALTER TABLE table_name ADD INDEX index_name (column(length))

示例

--修改 emp3 表,为 addrees 列添加索引,索引名为 emp3_address_indexalter table emp3 add index emp3_address_index(address)

创建表时指定索引列

CREATE TABLE `table` (

COLUMN TYPE ,

PRIMARY KEY (`id`),

INDEX index_name (column(length))

)

示例

--创建 emp4 表,包含 emp_id,name,address 列,同时为 name 列创建索引。索引名为emp4_name_indexcreate table emp4(emp_id int primary key auto_increment,name varchar(30),address

varchar(50),index emp4_name_index(name))

删除索引

DROP INDEX index_name ON table

示例

--删除 mep3 表中索引名为 emp3_address_index 的索引drop index emp3_address_index on emp3

MySQL 创建用户

CREATE USER username IDENTIFIED BY 'password';

查看用户

SELECT USER,NOST FROM USER(该表位于 mysql 库中)

示例

--创建一个 u_sxt 的用户,并查看创建是否成功。select user,host from mysql.user

create user u_sxt IDENTIFIED by 'sxt'

分配权限

新用户创建完后是无法登陆的,需要分配权限。

GRANT 权限 ON 数据库.表 TO 用户名@登录主机 IDENTIFIED BY "密码"

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password'

登陆主机:

% 匹配所有主机

localhost localhost 不会被解析成 IP 地址,直接通过 UNIXsocket 连接

127.0.0.1 会通过 TCP/IP 协议连接,并且只能在本机访问;

::1 ::1 就是兼容支持 ipv6 的,表示同 ipv4 的 127.0.0.1

权限列表ALTER: 修改表和索引。

CREATE: 创建数据库和表。

DELETE: 删除表中已有的记录。

DROP: 删除数据库和表。

INDEX: 创建或删除索引。

INSERT: 向表中插入新行。

SELECT: 检索表中的记录。

UPDATE: 修改现存表记录。FILE: 读或写服务器上的文件。

PROCESS: 查看服务器中执行的线程信息或杀死线程。

RELOAD: 重载授权表或清空日志、主机缓存或表缓存。

SHUTDOWN: 关闭服务器。

ALL: 所有权限,ALL PRIVILEGES 同义词。

USAGE: 特殊的 "无权限" 权限

MySQL 分页查询

MySQL 分页查询原则

• 在 MySQL 数据库中使用 LIMIT 子句进行分页查询。

• MySQL 分页中开始位置为 0。

• 分页子句在查询语句的最后侧。

LIMIT 子句

语法格式

SELECT 投影列 FROM 表名 WHERE 条件 ORDER BY LIMIT 开始位置,查询数量。

示例

--查询雇员表中所有数据按 id 排序,实现分页查询,每次返回两条结果。select * from employees order by employees_id limit 0,2

LIMIT OFFSET 子句

语法格式

SELECT 投影列 FROM 表名 WHERE 条件 ORDER BY LIMIT 查询数量 OFFSET 开始位置。

示例

--查询雇员表中所有数据按 id 排序,使用 LIMIT OFFSET 实现分页查询,每次返回两条结果。select * from employees order by employees_id limit 2 offset 4

MySQL 数据库存储引擎介绍

innodb 与 myisam 区别

1. InnoDB 支持事务,MyISAM 不支持,对于 InnoDB 每一条 SQL 语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条 SQL 语言放在 begin 和 commit 之间,组成一个事务;

2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM会失败;

3. InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

5. Innodb 不支持全文索引,而 MyISAM 支持全文索引,查询效率上 MyISAM 要高;(在

MySQL5.7 版本中已经支持全文索引)

如何选择:

1. 是否要支持事务,如果要请选择 innodb,如果不需要可以考虑 MyISAM

2. 如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请使用 InnoDB。

3. 系统奔溃后,MyISAM 恢复起来更困难,能否接受;

4. MySQL5.5 版本开始 Innodb 已经成为 Mysql 的默认引擎(之前是 MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用 InnoDB,至少不会差。

数据库三大范式

范式是指导数据规范化理论,可以保证数据库设计质量

第一范式:字段不能再分,具有原子性

第二范式:表中每个字段要和主键有关(不存在局部依赖)

第三范式:表中的每个字段要和主键有直接关系,不能是间接关系(不含传递依赖,间接依赖)

借鉴一篇博客讲的特别浅显易懂:数据库设计三大范式 - Ruthless - 博客园​www.cnblogs.com86b8189109273be2f858cb71a09a3a35.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值