mysql学习笔记

本文主要介绍了MySQL数据库的学习,包括数据库的基本操作、SQL语言、表的创建与修改、数据的增删改查、索引原理、存储引擎以及数据库设计的三大范式。详细讲解了如何创建、删除数据库和表,以及DML、DQL、DDL和TCL语句的使用。此外,还探讨了视图的概念和作用,以及数据库设计中的一对多、多对多关系的实现。最后提到了数据库设计三范式的重要性,并强调实践中可能存在的冗余与速度的权衡。
摘要由CSDN通过智能技术生成

1 数据 DB

2 数据管理系统 DBMS

3 sql语言

关系型数据库RDBMS

建立在关系模型基础上有多张相互连接的二维表组成的数据库

通过客户端连接数据库管理系统在多个数据库中创建多张表存储多条数据

基于表进行数据存储的数据库叫做关系型数据库

sql通用语句

1可以单行或多行书写 用;结尾

2可以使用空格缩进来增强可读性

3不区分大小写,关键字建议使用大写

单行注释 --  或#

多行使用/*    */

sql分类

DDL         数据定义语言  用来定义数据库对象(数据库,字段,表,索引)

                create创建表   drop删除表  alter 修改...    主要操作的是表的结构不是表的数据 

DML        数据操作语言 用来对数据库中表中数据进行增删改

                delete 删 insert增 update改    主要的是对表中的数据进行增删改

DQL        数据查询语言 用来查询数据库表中数据

                select  ...  主要掌握这个查询的

TCL          事务控制语言

                包括事务提交commit  事务回滚rollback  了解

DCL        数据控制语言 用来创建用户 控制用户的访问权限

                授权grant, 撤销权限revoke  了解

1-DDL 数据库操作(create创建表   drop删除表  alter 修改)

        show databases;列出所有数据库名;

        create database 数据库名;创建数据库

        use 数据库名;进入数据库;

        select database();查看当前在哪个数据库中

        drop database 数据库名;删除数据库; 

        创建 create database 【if not exists】xxx  【default charset】字符集;

2-DDL 表结构操作 

        show tables;查看当前数据库中的所有的表

        create table 表名(字段 字段类型 字段  字段类型);  

        create table emp2 as select * from emp; 表的快速复制

        desc 表名; 查看表结构

        show create table 表名;查看表的建表语句;

        alter table 表名 add/modify/change/drop/rename to  增加字段 /修改字段类型  /修改字段名字和类型/删除字段 /修改表的名字

add  字段名 类型长度   、

modify 字段名 新类型长度

change 旧字段名 新字段名 类型长度

        drop table 表名;删除表     truncate table 表名 删除指定表中的数据但不删除结构

        查询表结构五种方法(desc 表名;describe xxx ; explain xxx;  show columns from xxx;  show fields from xxx;)

1-DML  delete 删 insert增 update改    主要的是对表中的数据进行增删改

        添加数据 insert into 表名 (字段1,字段2 不知道字段则为全部字段 )value (值1,值2),(),();插入多条数据

insert into 表名 select 某字段 from 其他表名; 把查询结果插入到另一张表中 字段和类型一致才行

        修改数据update 表名 set 字段1=值1,字段2=值2[where条件]

删除数据  delete from 表名 [where 条件] ;   如果没条件就是删除整张表

        表中数据被删除了但这个数据在硬盘中的储存空间不会被释放

        缺点是删除效率比较低

        优点是后悔了可以回滚数据

truncate table 表名 删除指定表中的数据但不删除结构 

优点效率比较高表被一次截断,物理删除 

缺点不支持回滚

行称为记录 列称为字段  每个字段都有数据类型的、

每个字段 有 字段名  数据类型 约束等

数据类型

条件查询 

between 300and 500    是300或500的数据

null为空 不是0  9+null =null  

in 包含相当于多个or    not in 不在范围中

like 模糊查询  _表示一个字符  %表示多个字符

单个字段排序 order by

后接asc升序排列 desc 降序排列

多个字段后加,如order by sal desc,ename asc;

表示先按照工资降序排列如果工资一样按照名字升序排列

单行处理函数

lower

upper

substr(被截取的字符串,起始下标从1开始,长度)取子串

length 取长度

trim 取空格

round()四舍五入   (1234.567,0保留几位小数)——》1234   (1234.567,-1)->1230

rand()取随机数

ifnull (字段,0)如果该字段里的数据为null则看作0

case when then when then else end

select ename,sal ,job from emp  

select

ename,job ,

(case job when 'manager' then sal*1.1 when 'salesman' then sal*1.5 else sal end)

from emp;

分组函数(多行处理函数  多个输入对应一个输出)

1-自动忽略null

2-count (具体字段)表示统计该字段下不为null的元素总数  count(*)表示统计表中的总行数

3-分组函数不能直接出现在where后面

4-所有分组函数可以在一起使用

count计数        

sum求和       select sum(sal)from emp

avg求平均

max min 最大最小值

*****分组查询

如果没分组整张表默认为一组

where 和having优先选择where

*********重要如果在select语句中有group by的话后面只能跟参加分组的字段以及分组函数其他一律不能跟

语句顺序                执行顺序

select                         from        

from 、                        where

where                        group by

group by                    having

having                        select        

order by                        order by

distinct  去除重复记录  只能出现在所有字段的最前方  联合去重(必须得id与name都相同的才会被排除)

********************最最最最最重要                 连接查询

连接查询从一张表中单独查询叫做单表查询

从多张表中联合起来查询数据叫做连接查询   从emp中取员工名字从dep中取部门名字 

连接查询的分类

sql92:92年出现的语法        

sql99:99年出现的语法

从表连接的方式分为

        内连接

                等值连接

                非等值连接

                自连接

        外连接

                左外连接(左连接)

                右外连接(右连接)

        全连接(不经常用)

两张表连接时不加条件会出现笛卡尔积现象一张表的数据同时匹配另一张表的所有数据

select ename,dname from emp,dept where emp.deptno=dept.deptno

select e.ename,d.dname from emp e ,dept d where e.ename = d.dname;

尽量避免笛卡儿积现象 减少表的连接数量

内连接(a与b连接没有主次关系 平等的)

等值连接。

        99语法           优点表连接独立清晰  还可以在后面加where 进一步筛选

select

e.ename,d.dname

from

emp e

 (inner可以省略可读性好 )join

dept d

on 

e.deptno=d.deptno;//条件是等量关系   ****完成能够匹配上这个条件的数据查询出来

非等值连接

 select

e.ename,e.sal,s.grade

from emp e

inner join salgrade s

on

e.sal between s.losal and s.hisal;//非等值连接

自连接

select a.ename , b.ename as mar  from emp a inner join emp b  on a.mgr=b.empno;

一张表看作两张表        员工的领导编号等于领导的员工编号

外连接

right代表将join关键字右边的表看作主表,主要是为了将这张表的数据查询出来,捎带着关联查询左边的表。  在外连接当中,两张表连接产生了主次关系。

select e.ename ,d.dname

from

 dept d  

left (outer带着可读性强)join

emp e

on

e.deptno=d.deptno;

多张表连接

select 

...

from

a

join 

b

on

right join

c

on

子查询 select 语句中嵌套select 语句 被嵌套的select 语句就叫子查询

select

(select)

from

(select)

where

(select)

where子句中的子查询不能直接出现分组函数

from子句中的子查询,可以将子查询的查询结果当作一张临时表(技巧)

对于select 后面的子查询来说,这个子查询只能返回一条结果多于一条就会报错

union合并查询结果集 

select  ename from emp where 。。。

union

select ename from emp where 。。。

union 的效率要高与表连接 每连接一次新表则匹配的次数满足笛卡尔积现象 成倍得翻

但是union 可以减少匹配的次数在减少匹配的次数的情况下还可以完成两个结果集的拼接

a连接b连接c

a 10条记录

b 10 

c 10 

匹配次数1000

但如果是union 的话  是 a连接b 100   ,   a连接c  100     100+100=200 此匹配次数

union把乘法变成了加法

注意 1  union在进行结果集合并时要求两个结果集的列数(即字段数量相同)相同

        2 union合并时结果集的数据类型也要一致 mysql可以不一致  oracle不行

limit  将查询结果的一部分拿出来,通常使用在分页查询当中。

limit  startindex ,length  起始位置, 长度

**************************************************************************************************************

约束(非常重要*******************************************************)

作用是为了保证数据的完整有效

非空约束         not null

唯一性约束        unique 

主键约束           primary key

外键约束        foreige key

检查约束       ( check mysql不支持 oracle支持)

        非空约束not null约束的字段不能为null   只有列级约束

create table vip (
id int      not null
name varchar(25)
idcard int
);

(xxx.sql为sql脚本文件  sql脚本文件中便写了大量的sql语句 ,我们执行脚本文件的时候,该文件中所有的sql语句会全部执行,再批量执行sql语句时可以使用脚本文件,source 直接执行sql脚本文件      具体为source 加文件的路径可以直接拖文件)

唯一性约束 un

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值