深入浅出MySQL学习笔记(一)

参考文献

1.博客1
2.博客2


第一章、mysql的安装与配置


第二章、SQL基础

深入浅出MySQL学习笔记(一)_第1张图片


sql分类:

(1)DDL:数据库定义语言,用于定义表,列,索引等数据库对象. create,drop,alter等
(2)DML:数据库操纵语言,增删改查数据库的记录insert,delete,update,select等
(3)DCL:数据库控制语言,定义了数据库的表,字段,用户的访问权限和安全级别 grant,revoke等

1.DDL语句
(1)创建数据库:create database test1;
(2)删除数据库:drop database test1;
(3)创建表:create table user (name varchar(10), age int(2));
(4)删除表:drop table user;
(5)修改表:

alter table user modify name varchar(20);         修改字段定义
alter table user add column sex varchar(10);      加一列
alter table user drop column age;                 删一列
Alter table user change age age1 int(4);          将 age 改名为 age1,同时修改字段类型为 int(4)
Alter table user rename user1;                    表改名

2.DML语句
(1)插入记录:insert into user(name,age) values(‘zhangsan’,18);
(2)删除记录:delete from user where name=’张三’
(3)更新记录:update user set age=1 where name=’ 张三’
(4)查询记录:select * from user;
(5)查询不重复的记录:select distinct name from user;
(6)排序查询:select * from user order by age desc;
(7)限制排序:select * from user order by age limit 1,30;
(8)聚合:select name,age from user group by age;
(9)聚合后条件:select name,age from user group by age having age > 18;
(having和where的区别:having 是对聚合后的结果进行条件的过滤,而 where 是在聚合前就对记录进行过滤)
(10)表连接:
从大类上分,表连接分为内连接和外连接,它们之间的最主要区别是內连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。我们最常用的是内连接。
①内连接: Select ename, deptname from emp, dept where emp.deptno = dept.deptno;
②外连接:

左连接:(查询 emp 中所有用户名和所在部门名称:)        
select ename,deptname from emp left join dept on emp.deptno=dept.deptno; 
右连接: 
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;

左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录

(11)子查询:需要的条件是另一个select的结果
(子查询的关键字主要包括in, not in,=,!=,exists,not exists )
(如果查询结果数唯一,可用=代替in)

select * from emp where deptno in (select deptno from dept);
select * from emp where deptno = (select deptno from dept limit 1);

(12)记录联合:

select * from t1 union select * from t2
select * from t1 union all select * from t2

UNIONUNION ALL 的主要区别是: 
UNION ALL 是把结果集直接合并在一起,而 UNION 是将 UNION ALL 后的结果进行一次 DISTINCT,去除重复记录后的结果。

4.DCL语句
(1)授权(grant):创建一个数据库用户 z1,具有对 sakila 数据库中所有表的 SELECT/INSERT 权限:

grant select,insert on sakila.* to 'z1'@'localhost' identified by '123';

(2)收回权限(revoke):由于权限变更,需要将 z1 的权限变更,收回 INSERT,只能对数据进行 SELECT 操作:

revoke insert on sakila.* from 'z1'@'localhost';

帮助命令:就是?+要查询的语句


第三章、MySQL支持的数据类型

分为3大类:数字类型,字符串类型,日期和时间类型

深入浅出MySQL学习笔记(一)_第2张图片
深入浅出MySQL学习笔记(一)_第3张图片
深入浅出MySQL学习笔记(一)_第4张图片
char 和 varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。
2.char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar 是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4),存入 3 个字符将占用 4 个字节。
3.char 类型的字符串检索速度要比 varchar 类型的快。在检索的时候,CHAR 列删除了尾部的空格,而 VARCHAR 则保留这些空格。

varchar 和 text:
1.varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字节(n<=255)或 2 个字(n>255),text 是实际字符数 +2 个字节。
2.text 类型不能有默认值。
3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。

5.二进制数据(_Blob)

1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不用指定字符集。

6.时间日期类型

深入浅出MySQL学习笔记(一)_第5张图片
若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

7.数据类型属性

深入浅出MySQL学习笔记(一)_第6张图片


第四章、MySQL中的运算符

注:实际使用时,还是靠 () 来保证优先级,这和C等语言里是一样的;

1.算术运算符

深入浅出MySQL学习笔记(一)_第7张图片

2.比较运算符

深入浅出MySQL学习笔记(一)_第8张图片

3.逻辑运算符

深入浅出MySQL学习笔记(一)_第9张图片
在这里插入图片描述

4.位运算符

深入浅出MySQL学习笔记(一)_第10张图片


第五章、常用函数

MySQL 提供了多种内建函数帮助开发人员编写简单快捷的 SQL 语句,其中常用的函数有:
字符串函数、数值函数和日期函数。

1.字符串函数

深入浅出MySQL学习笔记(一)_第11张图片

2.数值函数

深入浅出MySQL学习笔记(一)_第12张图片

3.日期和时间函数

深入浅出MySQL学习笔记(一)_第13张图片

4.流程函数

深入浅出MySQL学习笔记(一)_第14张图片

5.其他常用函数

深入浅出MySQL学习笔记(一)_第15张图片
注:MySQL 有很多内建函数,这些内建函数实现了很多应用需要的功能并且拥有很好的性能,如果用户在工作中需要实现某种功能,最好先查一下 MySQL 官方文档或者帮助,看是否已经有相应的函数实现了我们需要的功能,可以大大提高工作效率。


第六章、图形化工具的使用

6.1 MySQL Administrator
6.2 MySQL Query Brower
两者关系:Query Brower 主要用于管理数据库中保存的数据,而 Administrator 主要用于管理数据库的对象。

你可能感兴趣的:(MySQL)