mysql基础

mysql基础

1.DB DBMS 分别是什么?存在什么关系

(1)DB:

​ DataBase(数据库,数据库实际上在硬盘上以文件的形式存储)

(2)DBMS:

​ DataBase Management System 数据库管理系统

​ mysql/Oracle/DB2/Sybase/sqlservrt

(3)SQL:是一门标准通用的查询化语言 适合于所有的数据库产品 SQL属于高级语言 只要能看懂单词 写出来就明白了什么意思 SQL执行时候 实际上内部也会先进行编译然后在执行

DBMS负责执行SQL语句 通过执行SQL语句来操作BD中的数据

2.什么是表 table

​ 表是数据库的基本组成单元,所有的数据都以表格的形式组织,谜底是增强可读性

一个表 包含行 和 列

行:被称为数据/记录

列:字段 column

每一个字段包含字段名 数据类型 相关约束

SQL语言分类

1.DQL: 数据查询语言 查询语句 凡是select语句都是dql

2.DML:数据操作语言 insert delete update 对表当中的数据进行增加 删除 修改

3.DDL:数据定义语言 create drop alert 对表结构的增删改

4.TCL:事务控制语言 commit 提交事务 rollback 回滚事务

5.DCL:数据控制语言 grant 授权 revoke 撤销权限等

1-3常用

mysql命令

所有代码命令以 ; 结尾

1.打开数据库

mysql -u 用户名 -p 密码;

2.查看数据库

show databases;

3.创建属于自己的数据库

create database 表名;

4.使用数据库中某一个

use 表名;

5.查看当前使用的数据库中的表

show tables;

6.初始化数据

source 路径

7.删除数据库

drop database 表名;

8.查看表结构

desc 名字;

SQL语句

1.查询语句

select 字段1,字段2 from 表名

2.条件查询

select 字段 from 表名 where 查询条件;

注:在数据库中null不是一个值 不能用等号衡量 只能用 is null 或者

is not null

3.模糊查询

%任意多个字符 _代表任意一个字符

select 字段 from 表名 where name like ‘%o%’
查询表中带o字符的所有名字字段

4.排序

order by 排序条件可以多个 从左到右执行 左边权重最大 只有左边无法完成排序时候 才能有执行 而且 orderby 语句在SQL语句中执行顺序是处于最后执行的.

注意:默认排序为升序 指定升序用 asc 降序是的desc

select name,grand from user order by grand (asc/desc)

5.分组函数/多行处理函数

特定:输入多行 输出一行

count:查找的对象 计算个数

sum:和

Max:最大值

Min:最小值

Avg:平均数

分组函数自动忽略null

单行处理函数 : 输入一行 输出一行

空处理函数:if null

注意:分组函数不能直接作用于where当中作为条件运算

select name,sal from n where sal>avg(sal)//错误

count(字段) count(*)区别?

count *不能统计某个字段的个数 而是统计总记录条数

count 某个字段 表示统计某个字段不能空的数据总量

6.group by / having

按照某个字段或者某些字段进行分组

having:是对分组后的数据进行再次过滤

当一条语句中有group by 的话

select 后面只能跟分组函数和参加分组函数的字段

分组字段可以有多个

找出不同编号的每个工作岗位的最高薪资
select max(sal),job,id from emp group by id,job

6.去重

distinct

select distinct job from rmp //去重重复的工作名

注意:distinct语句只能出现在最前方 如果出现在后方 很可能出逻辑错误

7.连接查询

在实际开发中 大部分的情况不是单表查询 一般都是多表查询 比如 学生和班级就是两张表

连接查询分为两种92不用了/99新语法 常用

按照表的连接方式划分:

​ 内连接:

​ 等值连接 非等值连接 自连接

​ 外连接:

​ 左外连接 右外连接

​ 全连接

笛卡尔积现象:

​ 如果两张表没有过滤条件 name输出结果将会是两张表中数据的乘积。注意:即使使用了过滤条件避免了笛卡尔积现象 但是他的乘积数不会改变 因为他要过滤时候需要一一判断是否匹配 然后输出有效数据

表的别名:执行效率高 可读性好

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

等值连接

最大特点是条件的等量关系

查询每个员工的部门名称 要求实现员工名 部门名

92:

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

99:

select e.ename,d.dname 
	from emp e
	join dept d
	on e.no=d.no

//因为条件on中的条件是相等 所以是等值连接

99的语法结构清晰 表的连接条件和后来的where分离

非等值连接:最大特点是on后的判断条件不是等值,可能使用一个区间也可能是大于某某 可以用between and等条件

自连接:特点 一张表看做两张 自己连接自己用

内连接和外连接区别

内连接 : 假设ab表进行连接 使用内连接 凡是ab表中能匹配上的记录出来就是内连接 ab表没有主次之分 都是平等的

外连接:解释两表使用外连接 两个表中一个是主表一个是副表主要查询的是主表中的数据 捎带上副表中的数据 当副表中的数据没有和主表匹配上 副表内自动模拟出null与之匹配

外连接:

左外连接 :表示左边表为主表

右外连接:表示右边表示主表

写法:

...
a
(left/right) join 
b
on
判断语句

外连接最重要的特点就是:主表中的数据无条件的全部查询出来

8.子查询

​ 也就是嵌套查询

使用在select 或者from或者where后面都可以

放到from后最常用

mysql> select t.*,s.grade
    -> from (select deptno ,avg(sal)as avgsal from emp group by deptno) t
    -> join salgrade s
    -> on t.avgsal between s.losal and s.hisal;

union:可以将查询结果相加 可以将两张完全不相干的表连接

9.limit重点

这是mysql特有的 其他数据库不通用

limit去结果集中的部分数据

语法机制:limit startindex length;

startindex 表示初始位置 0表示第一条数据

length 长度

取出工资前五的员工

Select 
	ename,sal 
from 
	emp 
order by 
	sal desc 
limit 0,5;
----------------------------
Select 
	ename,sal 
from
	emp
order by 
	sal desc 
limit 5

limit 的优先级是最后执行

10.创建表

语法结构:

create table 表名(
			字段名1 数据类型,
			字段名2 数据类型
			);

常见的数据类型

类型
int 整数型
bigint 长整型
float 浮点型
char 定长字符串(java中的String)
varchar 可变长字符串(java中Stringbuffer)
date 日期类型
blob 二进制大对象 存储视频 图片
clob 字符大对象 存储较大的文本

char和varchar的选择

在实际开发中 当某个字段中的数据长度不可发生改变时候 是定长的用char 比如 生日 性别。 当一个字段的数据长度不确定时候 例如 简介 姓名 用 varchar

11.插入数据

注意:当你执行插入语句之后 表格中一定会多出一条数据 即使数据中某些值没有达到预期 只能用update更新

语法结构:

insert into 表名(字段1,字段2)values(数据1,数据2);

注意:这个顺序是可以打乱的 可以先输入姓名再输入学号也可以

只要前后顺序对应就好 不填默认是null

也可以一次插入多条数据

Insert into t_student(no,name,sex,classno,birth)
values
(1,‘zhangsan’,‘1’,‘1001’,‘1999-10-20’),
(。。。。),
(。。。。);

也可以不写values前面的字段名 但是不写时候必须后面值和你创建表时候定义的顺序一一对应,第一个是id 那你第一个插入必须是id

12.表的复制

将数据插入一个新表时候

Create 
	table 
		emp2 
	as 
	select 
		ename,empno 
	from emp;

将数据插入一个已有表中

Insert into 
	dept1 
select
	* 
from 
	dept

13.修改一张表

语法结构:

update 
	表明 
set 
	字段名1=值1,。。。。。 
where 
	条件

如果没有判断条件的话

将会把表中所有字段1修改为值1

14.删除数据

语法结构:

delete from 表名 where 条件;

如果没有where条件 那么你的表会成为一张空表 数据全部删除

如何算出大表:

​ truncate table 表名:注意 这个方式无法挽回 永久性删除

约束

什么是约束

在创建表的时候 可以给表的字段添加相应的约束 添加约束是为了保证表中的合法性 有效性 完整性

常见的约束

非空约束:not null 约束的字段不能为null

唯一约束:unique 约束的字段不能重复

主键约束: primary key 约束的字段不能为null 也不能重复

外键约束: foreign key

检查约束: check 这是Oracle数据库的约束 mysql没有

主键

术语

主键约束:primary key

字段就是建表时候你设置的字段比如id

主键值 你输入的id就是主键值

主键作用

表的三范式有要求 第一范式就要求任何一张表都应该有主键

主键作用:唯一标识 类似于身份证

主键的分类

根据字段数量:

单一主键 : 常用

复合主键 : 少用

根据主键的性质来划分

自然主键:

​ 主键值最好是一个和业务没有关系的字段

业务主键:

​ 主键值和系统的业务挂钩 例如:银行卡号 身份证

​ 不推荐用业务主键

一张表中只能有一张主键约束

mysql提供主键自增(重要)

create table user(
	id  int primary key auto_increment;//id自增
);

外键

设置外键可以减少冗余现象 将数据重复的内容 分开写

T_class


No(pk) class

101 背景大型

102 背景

T_student


Id(pk) name no(fk)

1 zx 101

2 Ls 101

3 ls 102

4 zx 102

t_student中的no字段引用的是t_class中的no字段 此时 student为子表

class 为父表

顺序要求:

​ 删除数据时候:先删除子表,再删除父表

​ 添加数据时候:先添加父表,在添加子表

​ 创建表的时候:先创建父表

​ 删除表的时候:先删除子表

语法结构:

Create table t_class(
No int,
Class varchar(255),
Primary key(no);
);

Create table t_student(
Id int ,
Name varchar(255),
No int,
Foreign key(no) references(引用的意思) t_class(no);
);

当你写完外键以后 数据不能乱写 必须和父表挂钩 挂钩的不一定是主键 但必须是唯一值 并且外键可以为null

存储引擎 了解

就是不同的存储引擎在内存里边的存储方式不一样

默认的字符集utf-8

你可能感兴趣的:(数据库,mysql,sql)