MYSQL
数据库三层结构
- 所谓安装Mysql数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。DBMS(database manage system)
- 一个数据库中可以创建多个表,以保存数据(信息)。
- 数据库管理系统(DBMS)、数据库和表的关系如图所示:示意图
数据在数据库中的存储方式
SQL 语句分类
- DDL:数据定义语句[create表,库…]
- DML:数据操作语句[增加insert,修改update,删除delete]DQL:数据查询语句[select]
- DCL:数据控制语句[管理数据库:比如用户权限grant revoke]
创建数据库
- CHARACTER SET:指定数据库采用的字符集,如果不指定字符集,默认utf8utf8 general ci[不区分大小写]注意默认是utf8_general_ci)
- COLLATE:指定数据库字符集的校对规则(常用的utf8_bin[区分大小写]
查看、删除数据库
备份恢复数据库
备份恢复数据库的表
创建表
Mysql 常用数据类型(列类型)
数值型(整数)的基本使用
使用范围:在能够满足需求的情况下,尽量选择空间小的
如何定义一个无符号的整数
create table t10(id tinyint);//默认是有符号的
create table t11 (id tinyint unsigned);无符号的
数值型(bit)的使用
1.基本使用
mysql>create table t05(id int,num bit(8));
mysql>insert into t05 (1,3);
mysql>insert into t05 values(2,65);
2.细节说明
bit字段显示时,按照位的方式显示.
查询的时候仍然可以用使用添加的数值如果一个值只有0,1可以考虑使用bit(1),可以节约空间位类型。
M指定位数,默认值1,范围1-64使用不多.
数值型(小数)的基本使用
字符串的基本使用
字符串使用细节
细节1
char(4)//这个4表示字符数(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算.
varchar(4)//这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据
不管是中文还是英文字母,都是最多存放4个,是按照字符来存放的.
细节2
char(4)是定长(固定的大小),就是说,即使你插入’aa’也会占用分配的4个字符的空间.
varchar(4)是变长(变化的大小),就是说,如果你插入了'aa’,实际占用空间大小并不是4个字符,而是按照实际占用空间来分配
(说明:varchar本身还需要占用1-3个字节来记录存放内容长度) L(实际数据大小)+(1-3)字节
细节3
什么时候使用char,什么时候使用varchar
1.如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号码等. char(32)
2.如果一个字段的长度是不确定,我们使用varchar,比如留言,文章查询速度char>varchar
细节4
日期类型的基本使用
修改表
数据库 C[create]R[read]U[update]D[delete]
Insert 语句
细节说明
- 插入的数据应与字段的数据类型相同。
- 数据的长度应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入
- 在 values 中列出的数据位置必须与被加入的列的排列位置相对应
- 字符和日期型数据应包含在单引号中。
- 列可以插入空值[前提是该字段允许为空],insert into table value(null)
- insert into tab_name (列名..) values (),(),() 形式添加多条记录
- 如果是给表中的所有字段添加数据,可以不写前面的字段名称
- 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
update 语句
使用细节:
1. UPDATE语法可以用新值更新原有表行中的各列。
2. SET子句指示要修改哪些列和要给予哪些值。
3. WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行(记录),因此提醒一定小心。
4.如果需要修改多个字段,可以通过set字段1=值1,字段2=值2....
delete 语句
使用细节
- 如果不使用where子句,将删除表中所有数据。
- Delete语句不能删除某一列的值(可使用update设为null或者")
- 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。drop table 表名;
select 语句
注意事项
- Select指定查询哪些列的数据。
- column指定列名。
- *号代表查询所有列。
- From指定查询哪张表。
- DISTINCT可选,指显示结果时,是否去掉重复数据
使用表达式对查询的列进行运算
在 select 语句中可使用 as 语句
在 where 子句中经常使用的运算符
使用 order by 子句排序查询结果
SQL语言:DDL、DML、DQL、DCL详解
DDL数据定义语言全称是Data Definition Language
定义语言就是定义关系模式、删除关系、修改关系模式以及创建数据库中的各种对象,
比如表、聚簇、索引、视图、函数、存储过程和触发器等等。
数据定义语言是由SQL语言集中负责数据结构定义与数据库对象定义的语言,
并且由CREATE、ALTER、DROP和TRUNCATE(截断)四个语法组成
DML数据操纵语言全称是Data Manipulation Language,
主要是进行插入元组、删除元组、修改元组的操作。
主要有insert、update、delete语法组成。
DQL数据查询语言全称是Data Query Language,
所以是用来进行数据库中数据的查询的,即最常用的select语句
DCL数据控制语言全称:Data Control Language。
用来授权或回收访问数据库的某种特权,
并控制数据库操纵事务发生的时间及效果,能够对数据库进行监视。
比如常见的授权、取消授权、回滚、提交等等操作
MySQL
合计/统计函数
count
-- count(*) 和 count(列) 的区别 -- 解释 :coun
t(*) 返回满足条件的记录的行数
-- count(列): 统计满足条件的某列有多少个,但是会排除 为 null 的情况
sum
avg
max/min
使用 group by 子句对列进行分组
使用 having 子句对分组后的结果进行过滤
字符串相关函数
TRIM(string) -- 去除前端空格和后端空格
数学相关函数
时间日期相关函数
上面函数的细节说明
- DATE ADD()中的 interval后面可以是 year minute second day 等
- DATE SUB()中的 interval 后面可以是 year minute second hour day 等
- DATEDIFF(date1,date2)得到的是天数,而且是date1-date2的天数,因此可以取负数
- 这四个函数的日期类型可以是date,datetime或者 timestamp
加密和系统函数
流程控制函数
mysql 表查询--加强
如何使用 like 操作符(模糊) -- %: 表示 0 到多个任意字符 _: 表示单个任意
--? 如何显示首字符为 S 的员工姓名和工资
SELECT ename, sal FROM emp
WHERE ename LIKE 'S%'
--? 如何显示第三个字符为大写 O 的所有员工的姓名和工资
SELECT ename, sal FROM emp
WHERE ename LIKE '__O%
-- 如何显示没有上级的雇员的情况
SELECT * FROM emp
WHERE mgr IS NULL;
-- 查询表结构
DESC emp
-- 使用 order by 子句
-- ?如何按照工资的从低到高的顺序[升序],显示雇员的信息
SELECT * FROM emp
ORDER BY sal
--? 按照部门号升序而雇员的工资降序排列 , 显示雇员信息
SELECT * FROM emp
ORDER BY deptno ASC sal DES
分页查询
基本语法: select .. limit start, rows
表示从start+1行开始取,取出rows行,start从0开始计算
数据分组的总结
如果select语句同时包含有group by ,having,limit order by
那么他们的顺序是group by, having, orderby, limit
mysql 多表查询
多表查询的条件不能小于 表的个数-1 否则就会出现笛卡尔积
自连接
自连接的特点
- 把同一张表当做两张表使用
- 需要给表取别名 表名 表别名
- 列名不明确,可以指定列的别名 列名 as 列的别
mysql 表子查询
- 子查询是指嵌入在其它 sql 语句中的 select 语句,也叫嵌套查询
- 单行子查询是指只返回一行数据的子查询语句
多行子查询
- 多行子查询指返回多行数据的子查询in 使用关键字
- 子查询当做临时表使用
- 在多行子查询中使用 all 操作符 所有的都要满足
- 在多行子查询中使用 any 操作符 任意一个满足
多列子查询
多列子查序则是指查询返回多个列数据的子查询语句
在 from 子句中使用子查询
SELECT ename, sal, temp.max_sal, emp.deptno
FROM emp, (SELECT deptno, MAX (sal) AS mescal
FROM emp GROUP BY deptno ) temp
WHERE emp. deptno = temp. deptno AND emp.sal = temp.max
还有一种写法 表.* 表示将该表所有列都显示出来, 可以简化 sql 语句 -- 在多表查询中,当多个表的列不重复时,才可以直接写列名
SELECT tmp. *, dname, loc
FROM dept, (
SELECT COUNT (*) AS per_num, deptno FROM emp GROUP BY deptno
) tmp
WHERE tmp. deptno = dept. deptno
表复制
自我复制数据(蠕虫复制)
有时,为了对某个sql语句进行效率测试,我们需要海量数据时,可以使用此法为表创建海量数据。
- 演示如何自我复制
1. 先把 emp 表的记录复制到 my_tab01
INSERT INTO my_tab01
(Id, `name`, sal, job, deptno)
SELECT empno, ename, sal, job, deptno FROM emp;
-- 2. 自我复制
INSERT INTO my_tab01
SELECT * FROM my_tab01;
SELECT COUNT(*) FROM my_tab01;
合并查询
union all
该操作符用于取得两个结果集的并集。当使用该操作符时,不会取消重复行。
select ename,sal,job
from emp where sal>2500
union all
select ename,sal,job
from emp where job='MANAGER';
union
该操作赋与union all相似,但是会自动去掉结果集中重复行
select ename, sal,job
from emp where sal>2500
union
select ename, sal, job
from emp where job='manager';
本章笔记是观看韩顺平的JAVA的视频和在网上找的资料 以及自己的理解总结出来的笔记希望可以帮助大家,感谢大家的耐心观看 如有错误请即使联系我 我会及时修正