本文编写于 216 天前,最后修改于 133 天前,其中某些信息可能已经过时。

官方QQ群

一、MySQL数据库
1.MySQL介绍
a)概念

数据库:一系列的行和列被称为表,一组表组成了数据库。
关系型数据库:以行和列的形式存储数据(MySql, Orcale, SqlServer, Access)
非关系型数据库(Nosql):是以键值对的形式存储数据,不提供对sql语句的支持; (MongoDB)

关系型数据库和非关系型数据库的区别

①. 成本:nosql数据库基本上都是开源软件,不像oracle数据库那样收费,和关系型数据库比起来价格便宜。
② 查询速度:nosql数据库是将数据存储到缓存之中,关系型数据库将数据存储到硬盘中,所以nosql数据库查询速度快。
③ 存储数据的格式:nosql的存储格式是key,value形式、文档形式等等,所以可以存储基础类型以及对象或者集合等各种格式,关系型数据库只支持基础类型。
④ 拓展性:关系型数据库有join这个样的多表查询机制的限制导致拓展很艰难

b)安装----集成安装 XAMPP
在XAMPP-MySQL-bin 输入cmd
考试方式:客观题
考点:关系型数据和非关系型数据的概念

MySQL管理

MySQL数据库管理

① 查询数据库:show databases;
② 创建数据库:create database 数据库名 character set 'utf8';
③ 显示数据库创建信息:show create database 数据库名;
④ 显示所有数据库:show databases;
⑤ 删除数据库:drop database db_name;
⑥ 进入数据库:use 数据库名;
⑦ 显示当前打开的数据库:select database();

MySQL表结构管理

在创建表前先选择数据库use 数据库名;
① 创建表:create table 表名(字段 字段类型,....)
②查看数据表:show  tables;----所有的表
③查看数据表结构:describe 表名;
④查看创建表信息:show create table 表名;
⑤删除数据表:drop table 表名;
⑥修改表名称:alter  table 表名rename to 新表名;
⑦修改表结构 新增字段:
alter  table 表名add 字段名 数据类型  after 字段名;
⑧修改表结构 删除字段:
alter table 表名 DROP字段名;
⑨修改表结构 修改字段:
alter table 表名 CHANGE 旧字段名 新字段名 数据类型;
    

MySQL用户管理

① 进入数据库:mysql –u root –p
② 用户管理:user mysql;
③ 查看所有用户:select host,user,password  from user;
④ 修改密码:set password for 'root'@'localhost'= password('1234');
⑤ 创建用户:create user 'username'@'host' identified by 'password';
⑥ 删除用户:drop user 'username'@'host';
             (7)授予用户权限:grant
               例如:GRANT SELECT, INSERT ON mysql.test TO 'test1'@'%';
表示授权用户test1在所有登录主机均对mysql库的test表拥有select和insert权限。
             (8)回收用户权限:revoke
 例如:REVOKE SELECT ON *.* FROM ' test1'@'localhost';
  表示回收用户test1在本地主机数据库的所有库的所有表的查询权限。

默认数据库

① information_schema:提供了访问数据库元数据的方式。元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。
② mysql MySQL的核心数据库,主要负责存储数据库的用户、权限设置、关键
字等 MySQL自己需要使用的控制和管理信息。不可以删除,也不要轻易修改
这个数据库里面的表信息。
③ test  安装时候创建的一个测试用数据库,空数据库,没有任何表,可以删除

SQL基本语法

a)SQL语句介绍
基本规范:
    SQL 对大小写不敏感,一般数据库名称、表名称、字段名称全部小写;
    MySQL要求在每条 SQL 命令的末端使用分号;
        注释:
            # 这个注释直到该行结束
            -- 这个注释直到该行结束
            /* 这是一个在行中间的注释 */
            /*
            这是一个
            多行注释的形式
            */

MySQL基本数据类型

常用  char(定长字符串) varchar(变长字符串) text(文本) int(整数型)  date(日期值)  datetime(日期和时间)

数据的增、删、查、改
增:

① insert into students(name,age) values('张三','20');
② insert into students(name,age) values('张三','20'),('李四','21'),('王五','22') ……

删:delete from 表名 where xx=xxx;
改:update 表名 set xx=xx,xxx=xx where xxx=xxx and xxx=xxx;

查:
1) 查询表达式:select database();select version();select user();
2)条件表达式

①指定字段:select 字段 1,字段 2... from 表名;
②所有字段:select * from 表名;
③去重后:select distinct 字段 from 表名;
④统计不重复的个数:select count(distinct 字段名) from 表名;
⑤查询id在(1,3,7)中的语句
        select * from students where id=1 || id=3 || id=7;
select * from students where id in(1,3,7);
⑥查询id在…之间
select * from students where id>20 && id<40;
select * from students where id between 20 and 40;
⑦查询id不在…之间
select * from students where id not between 30 and 40;
⑧模糊查询
包含名字二的数据:select * from students where name like '%二%';
以5结尾两位数的数据:select * from students where id like '_5';
⑨Limit
从索引为3的记录开始,返回 4条记录:
select * from students limit 3,4
⑩分组查询
select sex from students group by sex;
分组统计:select count(*),city from students group by city;
⑪排序查询
默认升序(asc)select * from students order by birthday;
降序:select * from students order by birthday desc;
查询语句的书写顺序:
select → 字段→ from→ 表名→where→group by→order by→limit
起别名:
            Select a.name as newName from student;
                

3)多表查询
Select a.name, c.name, b.score
From students as a, score as b, course as c
where b.user_id=6 and b.course_id=4 and a.id=b.user_id and c.id=b.course_id;

4)子查询
select * from students where livecity=(select id from city where name='北京');
子查询的外层可以是:select,insert,update

视图与事务

1).视图:视图是从一个或几个基本表(或视图)中导出的虚拟的表。如果你的查询需要连接几个表的数据的时候你可以做成视图
2).创建视图:create view 视图表名as select id,username from user where 条件;
3).查看视图:show tables;
4).修改视图:ALTER VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition;
5).删除视图:drop view  表名
6).查看某个视图的定义:show create view 视图表名;

7).事务:任何操作步骤出现错误,都会回滚到上一次断点位置,避免出现其他错误。
                   四大特性:ACID,分别为原子性、一致性、隔离性、持久性
commit---提交
rollback---回滚

索引

①加index索引:alter table 表名 ADD INDEX index_name ( `字段名` ) ;
②加主关键字的索引:alter table 表名 add primary key (字段名);
③加唯一限制条件的索引:alter table 表名 add unique 索引名 (字段名);
④删除某个索引:alter table 表名 drop index 索引名;
⑤删除外键约束:alter table 表名 drop foreign key 外键名;
索引类型:
    添加PRIMARY KEY(主键索引)
    添加UNIQUE(唯一索引) 
    添加INDEX或KEY (普通索引)
    添加FULLTEXT(全文索引)

创建索引的目的:

可以大大加快数据的检索速度。

为什么不对表中的每一个列创建一个索引呢?

当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度

什么样的字段适合创建索引:

第一、在经常需要搜索的列上,可以加快搜索的速度; 
第二、在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; 
第三、在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; 
第四、在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; 
第五、在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; 
第六、在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

什么样的字段不适合创建索引:

第一,对于那些在查询中很少使用或者参考的列不应该创建索引。
第二,对于那些只有很少数据值的列也不应该增加索引。
第三,对于那些定义为text, image和bit数据类型的列不应该增加索引

注意:每个表可以有多个 unique约束,但是每个表只能有一个 primary key 约束。

存储过程

1).概念:就是数据库 SQL 语言层面的代码封装与重用。
2).创建存储过程:
    create procedure 存储过程名称(in|out|inout 参数名称 参数类型,......)
begin
过程体;
End
3).查询对应数据库下所有存储过程状态:show procedure status WHERE DB='数据库名';
4).删除存储过程:drop procedure 过程名;

delimiter $$
create procedure in_param()

-> begin
->   语句1;
->   语句2;
->        语句3;
-> end$$

delimiter ;

call in_param();

7.触发器
增加过多的触发器,这样会对数据的插入、修改或者删除带来比较严重的影响.

1).创建触发器:CREATE triggers <触发器名> < BEFORE | AFTER >
<INSERT | UPDATE | DELETE >
ON <表名> FOR EACH Row<触发器主体>

例:创建一个名为 double_salary 的触发器,触发的条件是向数据表 tb_emp6 中插入数据之后,再向数据表 tb_emp7 中插入相同的数据,并且 salary 为 tb_emp6 中新插入的 salary 字段值的 2 倍。输入的 SQL 语句和执行过程如下

CREATE TRIGGER double_salary

-> AFTER INSERT ON tb_emp6
-> FOR EACH ROW
-> INSERT INTO tb_emp7
-> VALUES (NEW.id,NEW.name,deptId,2*NEW.salary);

2).查看触发器:show triggers;
3).删除触发器:drop trigger [IF EXISTS] trigger_name
4).触发器类型:insert update delete

CREATE TRIGGER mydemo AFTER INSERT ON student
FOR EACH
ROW UPDATE studentcount SET total = total +1;

MySQL函数
运算函:

abs(x) 
floor(x) 
round(x,y) : 返回参数 x 的四舍五入的有 y位小数的值
mod(x,y) : 返回 x/y的模(余数)
greatest(x1,x2,...,xn) : 返回集合中最大的值
least(x1,x2,...,xn) : 返回集合中最小的值

日期函数

curdate() : 返回当前的日期
week(date) : 返回日期 date为一年中第几周(0~53)
now() : 返回当前的日期和时间
curtime() : 返回当前的时间
聚合函数:count(col)  sum(col) avg(col) max(col) min(col)