MySQL基础

一、基础

mysql安装目录
msql
msql卸载
1、双击安装包,点击下一步,然后点击remove。卸载。
2、手动删除Program Files中的MySQL目录。
3、 手动删除ProgramData目录 (这个目录是隐藏的。)中的MySQL。、

1、 sql、DB、DBMS分别是什么,之间的关系?

  • DB: DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)
  • DBMS: DataBase Management system (数据库管理系统,常见的有: MySQL oracle DB2 sybase sq1Server…)
  • SQL
    结构化查询语言,是一门标准通用的语言。标准的sq1适合于所有的数据库产品。
    sQL属于高级语言。只要能看懂英语单词的,写出来的sq1语句,可以读懂什么意思。
    SQI语句在执行的时候,实际上内部也会先进行编译,然后再执行sql。(sql 语句的编译由DBMS完成。)
  • DBMS->SQL->DB

2、什么是表?

表: table
表:table是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。

每一个字段应该包括哪些属性?在这里插入图片描述

3、sql分类

1.数据查询语言(DQL)

数据查询语言(Data Query Language, DQL)是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有FROM,WHERE,GROUP BY,HAVING和ORDER BY。这些DQL保留字常与其他类型的SQL语句一起使用。

2.数据定义语言(DDL)

数据定义语言 (Data Definition Language, DDL) 是SQL语言集中,负责数据结构定义与数据库对象定义的语言,由CREATE、ALTER与DROP三个语法所组成,最早是由 Codasyl (Conference on Data Systems Languages) 数据模型开始,现在被纳入 SQL 指令中作为其中一个子集。

3.数据操纵语言(DML)

数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除。

4.数据控制语言(DCL)

数据控制语言 (Data Control Language) 在SQL语言中,是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、预存程序、用户自定义函数等数据库对象的控制权。由 GRANT 和 REVOKE 两个指令组成。DCL以控制用户的访问权限为主,GRANT为授权语句,对应的REVOKE是撤销授权语句。

5.指针控制语言(CCL)

它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

6.事务处理语言(TPL)

它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。

4 、source 命令 执行sql脚本

  • 简单描述表结构: 字段类型 desc tabl_name;
    显示表结构,字段类型,主键,是否为空等属性,但不显示外键。
    例如:desc table_name
删除数据库: drop database 数据库名 ;

在这里插入图片描述
注意: SQL语句不区分大小写 字段的具体类容要区分大小写。mysql 语句松散一些,oracle语法严谨在这里插入图片描述

去除重复的 distinct
distinct只能出现在所有查询字段的最前面。
在distinct后面的 查询的是后面字段联合去重。

6、排序 select字段名1,字段名2 from 表名 order by (根据那个字段名排序的字段) desc;

排序 select xh,xm,cssj,zxf,bz from xs order by zxf desc; 升序(默认)

6·1 执行顺序分析

在这里插入图片描述

7 分组函数(多行处理函数)

  • count 计数
  • avg 平均值
  • sum 求和(如果字段有值为null,不需要添加过滤条件 sum函数自动忽略null)
  • max 最大值
  • min 最小值
  • 分组函数自动忽略null
  • 分组函数只有5个
  • 多行处理函数:输入多行,输出一行
  • 只要有null参与的运行结果计数null
  • count(*)和count(具体字段),他们有什么区别?
    count(*):不是统计某个字段中数据的个数,而是统计总记录条数。(和某个字段无关);count ( comm) :表示统计comm字段中不为NULL的数据总数量。
8、当行处理函数:就是输入一行,输出一行
  • ifnull (可能为NULL的数据,被当做什么处理) :属于单行处理函数。
    select name , ifnull (comm,0) as comm from emp ;
9、group by 和having
  • group by:按照某个字段或者某些字段进行分组。
  • having:是对分组之后的数据进行再次过滤
    示例的查询
    在这里插入图片描述

注意: 分组函数一般和group by联合使用,这也是称它为分组函数的原因。

  • 并且任何一个分组函数(count sum avg max min) 都是在group by语句执行结束之后才会执行的。
  • 当一条sql语句没有group by的话,整张表的数据会自成一组。

在这里插入图片描述

having 是group by的搭档 ,是对分组之后的数据进行再次过滤。

10、总结一个完整的DQL语句怎么写?

  • 查询语句执行顺序

select 第五步

from 第一步

where 第二步

group by 第三步

having 第四步

order by 第六步

二、链接查询( 多表查询)

根据语法出现的年代来划分的话,包括:

  • SQL92(–些老的DBA可能还在使用这种语法。
  • sQI99(比较新的语法)
根据表的连接方式来划分,包括:
  • 1、内连接:

    • 等值连接 :条件是等量关系。
    • 假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。
      AB两张表没有主副之分,两张表是平等的。
      在这里插入图片描述

sql 99:
select
·· e.ename,d.dname
from
·· enp e
join
·· depno.d
on
·· e.deptno=d.deptno
where

语法:
在这里插入图片描述

  • 非等值连接

    inner 可以省略,on 条件:e.sal的值在s.losal到s.hisal之间。

    • 自己连接自己,把 一张表看成两张表
  • 2、外连接:

  • 假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表, 一 张表是副表,主要查询主表中
    的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。

    • 左外连接(左):表示左边的表示主表
    • 右外连接 表示右边的表hi主表
    • 左连接有右链接的写法,右链接有左连接的写法,

    在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/a2a921863c8a426792e23fff6a28ecce.png?0

  • 全连接(这个不讲,很少用!) 思考:避免了笛卡尔积现象,会减少记录的匹配次数吗?
    不会,次数还是56次。只不过显示的是有效记录。

  • 三张表怎么链接

  • 在这里插入图片描述

在这里插入图片描述

4、union(将查询的结果集相加)

在这里插入图片描述
两张的表不相等 可以用union 拼接,查询时字符的数量一致。

5、limit(重点,分页查询),mysql特有的 。

5.1 作用:limit取结果集中的部分数据 。
5.5 语法机制

limit startIndex, length
startIndex表示起始位置,从开始,0表示第一条数据。
length表示取几个

5.4、limit是 sql语句最后执行的一一个环节:
在这里插入图片描述

重點:*每页显示pagesize条记录:
第pageNo页:(pageNo -1)pagesize, pagesize

6、创建表

在这里插入图片描述
在这里插入图片描述
char 和 varchar
在实际的开发中,当某个字段中的数据长度不发生改变的时候,是定长的,例如:性别、生日等都是采用char。
当一个字段的数据长度不确定,例如:简介、姓名等都是采用varchar。
一次插入一组数据
insert into 表名 (字段1,字段2…)values(值1,值2…);

在这里插入图片描述
8、表的复制
语法:
create table 表名 as select 语句;
将查询结果当做表创建出来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 删除10部门数据?
    delete from dept1 where deptno = 10;
  • 删除所有记录?
    delete from dept1 ; .
  • 怎么删除大表? (重点 )
    truncate table emp1; //表被截断,不可回滚。永久丢失。
  • 删除表?
    drop table 表名; //这个通用。
    drop table if exists表名; // oracle不支持这种写法。

增删改查有一个术语: CRUD操 作
Create (增)
Retrieve (检索) Update (修改) Delete ( 删除)

13.1、 什么是约束?常见的约束有哪些呢?

在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的 合法性、有效性、完整性。
常见的约束有哪些呢?

  • 1、非空约束(not null): 约束的字段不能为NULL(只有列级约束)
  • 2、唯一约束(unique):约束的字段不能重复(有表级约束,列级约束)
    唯一约束修饰的字段具有唯一一性,不能重复。,但可以为NULL。
    在这里插入图片描述
  • 3、主键约束(primary key): 约束的字段既不能为NULI,也不能重复( 简称PK)
    主键作用:主键值是这行记录在这张表当中的唯一标识。(就像一个人的身份证号码-一样。)
    一张表的主键约束只能有1个。(必须记住)
    主键的分类?
  • 根据主键字段的字段数量来划分:
    推荐:单一主键(推荐的,常用的。)
    不推荐:复合主键(多个字段联合起来添加一一个主键约束) (复合主键不建议使用,因为复合主键违背三范式。)
  • 根据主键性质来划分:
    推荐:自然主键:主键值最好就是-一个和业务没有任何关系的自然数。( 这种方式是推荐的)
    不推荐:业务主键:主键值和系统的业务挂钩,例如:拿着银行卡的卡号做主键,拿着身份证号码作为主键。(不推荐用 )

最好不要拿着和业务挂钩的字段作为主键。因为以后的业务一旦发生改变的时候,主键值可能也需要. 随着发生变化,但有的时候没有办法变化,因为变化可能会导致主键值重复。

auto_ increment // id字段自动维护一个自增的数字,从1开始,以1递增。

  • 4、外键约束(foreign key): … (简称FK)

1、外键值可以为NULL?
外键可以为NULL。
2、外键字段引用其他表的某个字段的时候,被引用的字段必须是主键吗?
注意:被引用的字段不一定 是主键,但至少具有unique约束(唯一性)。
在这里插入图片描述

  • 检查约束(check) :注意orac1e数据库有check约束,但是mysql没有,目前mysql不支持该约束。
13.2 、约束详情

1)not null :非空约束,保证字段的值不能为空
s_name VARCHAR(10) NOT NULL, #非空

2)default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值!
age INT DEFAULT 18, #默认约束

3)unique:唯一,保证唯一性但是可以为空,比如座位号
s_seat INT UNIQUE,#唯一约束

4)check:检查性约束【MySQL不支持,语法不报错,但无效】
s_sex CHAR(1) CHECK(s_sex=‘男’ OR s_sex=‘女’),#检查约束(Mysql无效)

5)primary key :主建约束,同时保证唯一性和非空
id INT PRIMARY KEY,#主建约束(唯一性,非空)

6)foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值!
teacher_id INT REFERENCES teacher(id) #这是外键,写在列级,Mysql无效

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cookie3_1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值