# MySQL简介
待完成...
# MySQL的安装过程
待完成...
# MySQL的基本命令
1:启动和停止服务
启动和停止方式一:
右键我的电脑 -> 管理 -> 服务和应用程序 -> 服务 -> 找到MySQL开头的 -> 右键选择启动或停止
启动和停止方式二:
以管理元权限启动命令提示符 -> 启动输入:net start mysql -> 停止输入:net stop mysql
2:登录mysql
打开命令提示符(管理员身份) -> 输入:mysql -u root -p -> 按下回车输入密码
远程登录数据库:输入 mysql -h 远程服务器ip地址 -u root -p
例如:mysql -h 192.168.2.128 -u root -p
注:如果无法进行登录,情查看是否配置环境变量
3:忘记密码时的解决办法
1:停止mysql服务 2:打开命令提示符(管理员权限的),输入:mysqld –skip-grant-tables 按下回车键(不要关闭该窗口) 3:新打开一个命令提示符(管理员权限的),输入:mysql -u root -p 提示输入密码时,什么都不输入,直接按下回车键,进入mysql中 4:输入:use mysql 5:输入:update user set password=password(‘monkey’) WHERE User=’root’;其中的monkey是要设置的新密码 6:关闭两个命令提示符,在任务管理器中将mysqld.exe的进程杀掉,之后启动mysql服务登录即可
# MySQL中常用的命令
# 操作数据库相关
# 创建数据库 mysql> create database doaoao2; Query OK, 1 row affected (0.00 sec) # 创建数据库时指定其编码 mysql> create database doaoao3 character set gbk; Query OK, 1 row affected (0.01 sec) # 查看数据库 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | af_school | | demo1 | | doaoao1 | | doaoao2 | | doaoao3 | | emaildemo | | mydatabase | | mydatabase2 | | mylogin | | mysql | | performance_schema | | tantan | | test | | web2_pagequery | | web2_restful | | webdb | | xiaochouyushu | +--------------------+ 18 rows in set (0.03 sec) # 修改指定数据库信息 mysql> alter database doaoao3 character set utf8; Query OK, 1 row affected (0.00 sec) # 删除指定数据库 mysql> drop database doaoao3; Query OK, 0 rows affected (0.02 sec) # 查看当前所使用的数据库 mysql> select database(); +------------+ | database() | +------------+ | NULL | +------------+ 1 row in set (0.00 sec) # 切换数据库 mysql> use doaoao2; Database changed # 查看数据库定义信息 mysql> show create database doaoao2; +----------+--------------------------------------------------------------------+ | Database | Create Database | +----------+--------------------------------------------------------------------+ | doaoao2 | CREATE DATABASE `doaoao2` /*!40100 DEFAULT CHARACTER SET latin1 */ | +----------+--------------------------------------------------------------------+ 1 row in set (0.00 sec)# 操作数据库表相关
# 创建表 mysql> create table employee( -> id int, -> name varchar(20), -> sex char(1), -> birthday date, -> job varchar(50), -> salary double(7,2)); Query OK, 0 rows affected (0.02 sec) # 查看表 mysql> show tables; +-----------------------+ | Tables_in_mydatabase2 | +-----------------------+ | employee | +-----------------------+ 1 row in set (0.00 sec) mysql> # 查看表中的结构 mysql> desc employee; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birthday | date | YES | | NULL | | | job | varchar(50) | YES | | NULL | | | salary | double(7,2) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 6 rows in set (0.01 sec) # 为表中添加字段 mysql> alter table employee add address varchar(100); Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc employee; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birthday | date | YES | | NULL | | | job | varchar(50) | YES | | NULL | | | salary | double(7,2) | YES | | NULL | | | address | varchar(100) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 7 rows in set (0.01 sec) # 修改表中某个字段长度(将job的varchar(50)改成了varchar(30)) mysql> alter table employee modify job varchar(30); Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc employee; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birthday | date | YES | | NULL | | | job | varchar(30) | YES | | NULL | | | salary | double(7,2) | YES | | NULL | | | address | varchar(100) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 7 rows in set (0.02 sec) # 删除表中的某个字段 mysql> alter table employee drop address; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc employee; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birthday | date | YES | | NULL | | | job | varchar(30) | YES | | NULL | | | salary | double(7,2) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 6 rows in set (0.02 sec) # 修改表的名称 mysql> rename table employee to user; Query OK, 0 rows affected (0.02 sec) mysql> show tables; +-----------------------+ | Tables_in_mydatabase2 | +-----------------------+ | user | +-----------------------+ 1 row in set (0.00 sec) # 修改表的字符编码 mysql> alter table user character set gbk; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 # 查看表的细节 mysql> show create table user; +-------+-----------------------------------------------------------------------------------+ | Table | Create Table | +-------+-----------------------------------------------------------------------------------+ | user | CREATE TABLE `user` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `sex` char(1) DEFAULT NULL, `birthday` date DEFAULT NULL, `job` varchar(30) DEFAULT NULL, `salary` double(7,2) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=gbk | <<<-------------------看!字符编码 +-------+-----------------------------------------------------------------------------------+ 1 row in set (0.00 sec) # 修改表中字段 mysql> alter table user change name username varchar(20); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc user; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | username | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birthday | date | YES | | NULL | | | job | varchar(30) | YES | | NULL | | | salary | double(7,2) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 6 rows in set (0.01 sec) # 删除表 mysql> drop table user; Query OK, 0 rows affected (0.01 sec) 再次查看表 表已经不存在了 mysql> desc user; ERROR 1146 (42S02): Table 'mydatabase2.user' doesn't exist# MySQL中的注释方式
-- MySql注释方式1 /*MySql注释方式2*/
...
# DML
# 对数据库进行增,删,改,查的操作
注:MySQL Workbench的基本操作如下
# 数据库中的增删改查
-- 表中插入数据方式1 insert into test_test_emp (id,name,sex,birthday,salary) values(001,'zhangsan','male','1997-11-14',10000); insert into test_test_emp values(002,"lisi","famale","1995-10-10",20000); -- 表中插入数据方式2 insert into test_test_emp (id,name,sex,birthday,salary) values (1,'laoda','male','1991-05-15',100000), (1,'laoer','male','1992-05-15',110000), (1,'laosan','male','1993-05-15',120000), (1,'laosi','male','1994-05-15',130000); -- 当无法进行修改数据库数据时 -- 这是因为MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令,
-- 执行命令SET SQL_SAFE_UPDATES = 0;修改数据库模式 -- 修改表中数据(下方的写法会将数据全部修改,因为没有加入条件) update test_test_emp set salary=3000; -- 修改表中数据(限定修改的数据) update test_test_emp set salary=5000 where name="lisi"; -- 修改多个字段,使用","将字段隔开(修改性别,工资) update test_test_emp set sex="femal",salary=4000 where name='laoda'; -- 删除(删除一条数据) delete from test_test_emp where name='laosi'; -- 将表中数据全部删除 delete from test_test_emp; -- 只删除数据,不删除表,可进行恢复 -- 将表中数据全部删除 truncate table test_test_emp; -- 将数据删除,也将表删除,无法进行恢复# 数据库中的简单查询
-- 查询表test_emp中的name字段 select name from test_emp; -- 查询表test_emp中的name和num字段 select name,num from test_emp; -- 查询表中所有字段 select * from test_emp; -- 查询员工编号,姓名,年薪(因为只有月薪,所以将其*12,后利用as进行重命名) select num,name,salary*12 as yearsalary from test_emp; select num,name,salary*12 yearsalary from test_emp; -- 可不加 as select num,name,salary*12 as '年薪' from test_emp; -- 查询薪水是5000的员工 select name,num from test_emp where salary = 5000; -- 查询job是manager的员工 select name,num from test_emp where job = 'mabeger'; -- 查询薪水不等于5000的员工 select name,num from test_emp where salary != 5000; -- 建议使用这个 select name,num from test_emp where salary <> 5000; -- <>符号也表示不等于 -- 查询薪水为1500到5000之间的员工 select name,num from test_emp where salary>1500 and saalry<5000; select name,num from test_emp where salary between 1500 and 5000; -- 查询津贴为空的员工 select name,num,comm from test_emp where comm is null; -- 查询工作职位为manager并且薪水大于3000的员工 select name,num from test_emp where job = 'mabeger' and salary>3000; -- 查询工作职位为manager或salesman的员工 select name,num from test_emp where job = 'mabeger' or job='salesman'; select name,num from test_emp where job in ('mabeger','salesman'); -- 查询工作职位不是manager或salesman的员工 select name,num from test_emp where job not in ('mabeger','salesman'); -- and和or的优先级,and的优先级大于or -- 查询薪水大于5000,且部门编号为20或30的员工 select name,num from test_emp where salary > 5000 and (deptnum=20 or deptnum=30); -- 查询姓名以M开头的员工 select name from test_emp where name like "M%"; -- 查询姓名以M结尾的员工 select name from test_emp where name like "%M"; -- 查询姓名中含有M的员工 select name from test_emp where name like "%M%"; -- 查询姓名中的第二位为M的员工 select name from test_emp where name like "_M%"; -- 一个"_"表示一个字母占的位符# 数据库中的排序操作
-- order by默认为升序排序 -- 按薪水从小到大排序 select name,salary from test_emp order by salary; -- 按薪水从小到大排序(手动指定) select name,salary from test_emp order by salary asc; -- 按薪水从大到小排序(手动指定) select name,salary from test_emp order by salary desc; -- 工作为manager的员工,薪水从小到大排序 select name,salary from test_emp where job='manager' order by salary; -- 按照jon和薪水进行排序(先依据job进行排序,再依据salary进行排序) select name,salary from test_emp order by job,salary;# 数据库中的处理函数
-- 查询员工姓名,并将姓名转成小写 select lower(name) from test_emp; -- 查询员工姓名,并将姓名转成大写 select upper(name) from test_emp; -- substr()截取字符串(下标从1开始) -- 查询并显示员工姓名的第二个字母 select substr(name,2,1) from test_emp; -- 表示从下标2开始截取1个 -- 查询员工姓名中第二个字母为A的所有员工 select name from test_emp where substr(name,2,1)='A'; -- 取得员工姓名长度 select name,length(name) as namelength from test_emp; -- ifnull(x,y)将字段值为null的字段替换为指定字符 -- 查询员工姓名及补助,将补助为null的字段设置为null select name,ifnull(comm) as comm from test_emp; -- 在数学运算时,根null做数学运算结果都为Null -- 查询员工的总薪水 select name,(salart + ifnull(comm)) as totoSal from test_emp; -- 如果没有补助的员工,每月补助100求员工的年薪 select name,(salary + ifnull(comm,100))*12 from test_emp; -- 匹配工作岗位,当工作为manager时,薪水上调10%,当工作为salesman时,薪水上调50% select name,salary,job, (case job when 'manager' then salary*1.1 when 'selesman' then salary*1.5 else salary end) as newSalary from test_emp; -- trin()去除首尾空格 select name,job from test_emp where job=trim(' manager '); -- 查看员工薪水并保留一位小数 round(数字,保留小数位数) select round(salary,1) as sal from test_emp; -- rand()生成随机数 select rand(); -- 生成多个随机数 select rand(),salary from test_emp; -- 生成0-100之间的随机数 select round(rand()*100),salary from test_emp; -- str_to_daate() 字符串转日期格式· -- 该函数接收两个参数,str_to_date(‘日期字符串’,’日期格式’)。 -- 其中日期格式如下: -- %Y 代表四位的年份 -- %y 代表两位的年份 -- %m 代表月,格式(01 … 12) -- %c 代表月,格式(1 … 12) -- %d 代表日 -- %H 代表24小时制 -- %h 代表12小时制 -- %i 代表分种,格式(00 … 59) -- %S或%s 代表秒 , 格式(00..59) -- 查询1981-12-03入职的员工 select ename,hiredate from test_emp where hiredate = '1981-12-03'; -- 使用str_to_date()函数查询02-20-1981年入职的员工: select ename,hiredate from test_emp where hiredate = str_to_date('02-20-1981','%m-%d-%Y'); -- date_format()格式化日期 该函数接收两个参数,date_format(日期类型数据,’日期格式’) -- 查询员工的入职日期,以’10-12-1980’的格式显示到窗口中; select ename,date_format(hiredate,'%m-%d-%Y') hiredate from test_emp ;# 聚合函数
-- 取得薪水的合计 select sum(sal) as salary from test_emp; -- 取得薪水总和(薪水+津贴) select sum(sal + ifnull(comm)) as totasal from test_emp; -- sum()在处理时 会默认不处理null的值 select sum(comm) as totasal from test_emp; -- 取得平均薪水 select avg(sal) as avgSal from test_emp; -- 取得最高的薪水 select max(sal) as maxSal from test_emp; -- 取得最低的薪水 select min(sal) as minSal from test_emp; -- 取得最晚入职的日期 select max(hiredate) as lastHiredate from test_emp; -- 取得所有员工数 count()取得数据总数 select count(*) from test_emp; -- 取得补助不为空得员工数 聚合函数会忽略空值 select count(comm) from test_emp; -- 统计没有补助得员工数 select count(*) from test_emp where comm is null; -- 组合聚合函数 -- sum、avg、max、min、count这些函数可以一起使用: select count(*),sum(sal),avg(sal),max(sal),min(sal) from test_emp; -- distinct 去除重复得记录 -- 用法distinct 字段, distinct 字段1 字段2 select distinct job from test_emp; -- 查询公司工作岗位得数量 select count(distinct job) from test_emp; -- 去除部门编号和工作岗位重复的记录 select distinct job,deptno from test_emp; -- 利用group by 对数据进行分组 -- 找出每个职位最高薪水 select max(salary) as maxsalary from test_emp group by job; -- 计算每个工作岗位的最高薪水,并且按照由低到高进行排序: select job,max(sal) as maxsal from test_emp group by job order by maxsal; -- 计算每个部门的平均薪水: select deptno,avg(sal) as avgsal from test_emp group by deptno; -- 计算出不同部门不同岗位的最高薪水: select deptno,job,max(sal) as maxsal from test_emp group by deptno,job; -- 计算除了manager之外的每个工作岗位的最高薪水: select job,max(sal) as maxsal from test_emp where job <> 'MANAGER' group by job; -- 找出每个工作岗位的平均薪水,要求显示平均薪水大于2000的: -- select job,avg(sal) as avgsal from test_emp where avg(sal)>2000 group by job; 错误写法,where后不能写聚合函数 select avg(sal) from test_emp group by job having avg(sal)>2000; -- where和having区别 -- where和having都是为了完成数据的过滤,它们后面都是添加条件; -- where是在 group by之前完成过滤; -- having是在group by之后完成过滤; -- 一个的SQL语句如下: select xxxx from xxxx where xxxx group by xxxx having xxxx order by xxxx 以上关键字的顺序不能变,严格遵守 以上语句的执行顺序: from 将硬盘上的表文件加载到内存 where 将符合条件的数据筛选出来。生成一张新的临时表 group by 根据列中的数据种类,将当前临时表划分成若干个新的临时表 having 可以过滤掉group by生成的不符合条件的临时表 select 对当前临时表进行整列读取 order by 对select生成的临时表,进行重新排序,生成新的临时表 limit 对最终生成的临时表的数据行,进行截取# 连接查询
在开发的过程中,往往将数据存储在多张表中,这些存储数据的表之间存在着关系,在对表中数据进行检索时,往往需要多张表联合起来检索,这样的多表联合查询称为链接查询
笛卡尔积:在对多个表进行连接查询时,没有指定查询的条件,这种查询的结果是多表数量的乘积
第一种:笛卡尔积
select e.ename,d.dname from dept d,test_emp e; -- 会将表中的数据做一个乘法14 * 4 = 56条数据第二种:SQL92语法(加入一个限定条件)
select e.ename,d.dname from dept d,test_emp e where d.deptno=e.deptno;第三种:SQL99语法(test_emp e join dept d:两个表做连接查询,条件是e.deptno = d.deptno)
select e.ename,d,dname from test_emp e join dept d on e.deptno=d.deptno连接查询的分类
1:内连接
指的是多张表的交集,如上图的C所表示的部分
select e.ename,d.dname from test_emp e join dept d on e.deptno = d.deptno;2:左外连接(outer可省略)
表示图中A的部分加上C的部分
select e.ename,d.dname from dept d left outer join test_emp e on e.deptno = d.deptno;3:右外连接(outer可省略)
表示途中B的部分加上C的部分
select e.ename,d.dname from test_emp e right outer join dept d on e.deptno = d.deptno;4:全外连接
MySQL中不支持
# 子查询
定义:在select语句中嵌套select语句
select可以出现在from,select,where语句后面
将select查询出来的语句看作是一张新的表
-- 找出薪水比公司平均薪水高的员工,要求显示员工名和薪水 select ename,sal from test_emp where sal > (select avg(sal) from test_emp);# 使用union关键字合并结果(注意:两个被合并的字段个数必须一致)
select ename,job from test_emp where job='manager' union select ename,job from test_emp where job='salesman';# Limit关键字(分页功能) MySql特有的
用法limit起始下标m,长度n
下标默认从0开始-- 取前五个员工的信息 select * from test_emp limit 0,5; -- 找出工资排在前五的员工 select * from test_emp order by sal desc limit 0,5; -- 找出工资排在[3-9]的员工 select * from test_emp order by sal desc limit 2,7;...
# MySQL存储引擎
存储引擎简介:
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
存储引擎分类:
MyISAM
有较高的插入,查询速度,但不支持事务
InnoDB
5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定
BDB
源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性
Memory
所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失
Merge
将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用
Archive
非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差
Federated
将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
Cluster/NDB
高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
CSV
逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行
CSV存储引擎不支持索引。
BlackHole
黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继# 存储引擎的一些操作
-- 创建表时指定存储引擎 mysql> create table table_test( -> no int -> )engine=MyISAM; Query OK, 0 rows affected (0.01 sec) # 查看当前表使用的存储引擎 mysql> show create table table_test;
# 事务
事务的英文是transaction
事务可以保证多个操作原子性,对于数据库来说
事务可以保证批量的DML要么全成功,要么全失败事务具有四个特征ACID
1:原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
2:一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
3:隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
4:持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。
# 事务的提交和回滚
-- MySQL事务的提交和回滚 MySQL中默认情况下,事务是自动提交的,当执行一条DML语句时,就开启并且自动提交了事务。
可以通过下面的语句查看事务是否是自动提交的: show variables like '%commit%'; -- 如果想要关闭MySQL事务的自动提交,可以使用下面语句手动开启事务: start transaction;# 事务的并发问题
1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
# 事务的隔离级别
1:read uncommitted 读未提交
事务A和事务B,事务A未提交的数据,事务B可以读取,这里读取到的数据叫做“脏数据”,该级别最低,一般只是理论上存在,数据库的默认隔离级别都高于该级别。2:read committed 读已提交
事务A和事务B,事务A提交的数据,事务B才可读取到,换句话说:对方事务提交之后的数据,当前事务才可读取到,可以避免读取“脏数据”,但是改级别会有“不可重复读”的问题,事务B读取一条数据,当事务A修改这条数据并提交后,事务B再读取这条数据时,数据发生了变化,即事务B每次读取的数据有可能不一致,这种情况叫做“不可重复读”。
3:repeatable read 重复读
MySQL默认的隔离级别是重复读,该级别可以达到“重复读”的效果,但是会有“幻读”的问题,即事务A读取数据,此时事务B修改了这条数据,但是事务A读取的还是之前的旧数据的内容,这样就出现了幻读。
4:serializable 串行化
事务A和事务B,事务A在操作数据库表中数据的时候,事务B只能排队等待,这样保证了同一个时间点上只有一个事务操作数据库,该级别可以解决“幻读”的问题。但是这种级别一般很少使用,因为吞吐量太低,用户体验不好。
# 索引和视图
## 索引
索引可以提高数据库的查询效率,表中的每一个字段都可以添加索引,表中的主键会自动添加索引
在MySQL数据库中,数据库表的检索通常有两种方式
1:全表扫描
当数据库中有10000行的数据是,要查找的数据为name="doaoao",如果要想拿到该条数据
select * from test_emp where name="doaoao"
在没有建立索引时,mysql就要扫描10000条数据找该数据,效率低
2:通过索引检索
-- 创建索引 语法:create index 索引名 on 表名(列名); 示例:create index dept_dname_index on dept(dname); -- 查看索引 语法:show index from 表名; 示例:show index from dept; -- 删除索引 语法:drop index 索引名 on 表名; 示例:drop index dept_dname_index on dept;## 视图
视图 视图就是一个查询结果,视图的作用就是可以隐藏表的实现细节 -- 创建视图 create view 视图名层 as 查询语句
-- 创建视图示例,将emp表中的empno、ename、sal作为视图展示: create view e_info as select empno,ename,sal from emp;
-- 使用视图 select * from e_info -- 修改视图 alter view 视图名称 as 查询语句
-- 示例 alter view e_info as select ename,job from emp; -- 删除视图 drop view if exists 视图名称;
-- 示例 drop view exists e_info;
# 数据库的导入和导出
# 导出 mysql> mysqldump -u root -p doaoao > d:/mysql.sql # 导入 mysql> source d:/mysql.sql
...