简单的mysql入门

1定义:存储数据的仓库(DATABASE SYSTEM)
1.1DATABASE:存数据的。
1.2DataBase Management System:管理系统。
2优势:
2.1存储的数据大
2.2存取快
2.3方便维护
2.4更安全
3常见的数据库类型
3.1关系型的
(1)什么是关系?
实体:例子:学生,班级,课程,老师
关系:例子:记录学生在哪个班? 记录学生学了那些课程。
(2)本质
一对一:例子: 学生信息和学号,老师和老师的工号
一对多:例子:一个学生在一个班级,一个班级可以有多个学生。
多对多:例子:一个学生有多个课程,一个课程有多个学生。
(3)常见的数据库(Relational Database)
微软:ACCESS,MS SQL SERVER.
IBM: DB2
甲骨文:oracle,mysql
maradb
3.2非关系型的
(1)MongoDB: 存取文档的。
(2)Redis:键值对存储型
3.3数据库的流行趋势:https://db-engines.com/en/ranking
4安装mysql5.6
在这里插入图片描述
4.1TCP/IP: 底层通信协议
(1)通信:通过ip找到你才能通信。

在这里插入图片描述
如果在一个局域网,ping 不通,那么把要ping的机器防火墙关闭了。
4.2端口:找到电脑中的唯一服务
4.3如何和数据库沟通交流:SQL 语言(Sturctured Query Language)
5操作mysql:
5.1使用什么来操作?客户端
在这里插入图片描述
在这里插入图片描述
5.2客户端:
(1)Mysql安装后本地有默认的客户端

上面的步骤太麻烦了,我想简化一下!
解决方法:添加路径到环境变量Path中。
第一步:打开环境变量配置页面
在这里插入图片描述
在这里插入图片描述如果是windwos7:那么点开Path在后面加上这个(; C:\Program Files\MySQL\MySQL Server 5.6\bin)
第二步:关闭所有的cmd窗口,在打开cmd,输入mysql -u root -p
在这里插入图片描述
(2)Navicat图像界面的客户端
(3)Web样式的操作软件
(4)Python操作数据库
6数据库的操作类型
6.1数据定义功能(Data Definition Language),简称 DDL;
(1)对数据库、表的设计
(2)Create 新建、alter 修改、drop 删除、rename 重命名、truncate 删除
6.2数据操纵功能(Data Manipulation Language),简称 DML;
(1)数据的设计
(2)Insert 插入、update 更新、delete 删除
6.3数据查询功能(Data Query Language),简称DQL;
(1)查询数据
(2)Select
6.4数据控制功能(Data Control Language),简称DCL
(1)权限控制
(2)Grant 授权,revoke 收回权限
7一些简单的入门命令(mysql数据库,默认是大小写不区分!)
7.1连接数据库:
(1)Cmd模式下的mysql.exe命令:
-h : 表示要连接的IP或者域名(localhost表示本地,127.0.0.1)
-P: 表示要连接的mysql服务的端口
-u :表示登录时的账号
-p: 表示要输入的密码
在这里插入图片描述
7.2Show databases; 查看有那些数据库。
7.3Use mysql; 切换到某数据库(数据库名必须存在)
7.4Show tables; 查看当前数据库中有那些表
7.5Select * from user; 查看表中的所有数据。
(1)* 表示table中的所有列
(2)From user: 表示从user表中去查询。
在这里插入图片描述
7.6Desc user; 描述表结构
在这里插入图片描述
7.7Exit; 退出
7.8综合使用
在这里插入图片描述
8数据库开启root账号远程连接:
8.1第一步:使用root账号登录(开启远程之前只能在服务器上用cmd登录。)
8.2执行命令:
grant all privileges on . to ‘root’@’%’ identified by ‘123456’ with grant option;
grant:授权
all privileges:所有的权限
*.*:所有的数据库中的表
To root :给root账号
’%’:允许从任意地址访问
identified by ‘123456’:使用root账号时远程登录的密码
with grant option:远程登录后可以继续授权。
flush privileges; 刷新权限,让权限设置生效。
在这里插入图片描述
9有如下需求:
把学生信息写入数据库。(id=1,name=”张三”,score=100)
9.1步骤1:连接数据库系统 -本地
9.2步骤2:创建数据库school
9.3步骤3:创建学生表student
9.4步骤4:把学生信息输入到student表里。
10DDL数据定义语言
10.1创建数据库
(1)语法:Create database [ if not exists] 数据库名 character set [=] utf8 ;
Create database:创建数据库
[ ] 中表示的内容都不是必选的
if not exists: 如果不存在,就新建,否则跳过此创建语句。
数据库名:
第一个字符一般时字母开头
一般用英文标识表的作用
不要使用中文、特殊支付、可以使用下划线。
不要使用系统中已经用了的一些保留字(Create、database、if、not、show、select、desc、exit):如果非要用请在名字上加反引号。··(键盘第二排第一个)
character set = utf8: 字符集为utf8 (国际上的文字都能放的下,默认的字符集可能存不了中文)
10.2修改数据库的字符集
(1)语法: alter database 数据名字 character set [ = ] gbk;
10.3查看数据库创建语句
(1)语法:show create database 数据库名;
10.4删除数据库
(1)语法:drop database [ if exists] 数据库名 ;
if exists:如果存在则删除,否则跳过此语句。
10.5没有重命名数据库的功能
10.6创建表
(1)语法:create table 表名(列名 数据类型 约束, 列名 数据类型 约束,……) [engine= innodb或者 myisam] [character set utf8];
表名、列名 :用英文、数字、下划线构成,不要和保留字重复了。
列与列用逗号隔开,但是最后一列后面不要加了
列数据类型:整数、小数、字符串、二进制、日期
约束:输入值的限制(例如不能为空,不能重复,等等….),默认可以为空。
Engine:我们一般使用innodb,支持事务,支持外键; myisam不支持,但是查询速度快。
(2)数据类型:能用小的就用小的,不要浪费空间资源。
Tinyint:大小1B,无符号是(0-255),有符号(-128,127)
如何标识无符号:在类型的后面加上unsigned 单词
应用场景:无符号的tinyint可以表示年龄

Int: 有符号的差不多是20多亿
应用场景:不能表示手机号的。
Float:差不多7位小数
应用场景:表示成绩(1000以内的)
应用场景:不要用float表示工资(15000.12 存入的时候最后一个小数会丢失)
Double:差不多15小数。
应用场景:表示工资应该没有问题。(几十亿的工资都没有问题)
Decimal(M,D):差不多30位小数
M表示一共的长度,D表示小数的长度。
应用场景:与钱相关的都能表示。
Char(M): 范围是(0-255)
应用场景:性别,(已审核,已审批); 固定长度的时候使用它。(create table student7(sex char(1));)可以存男、女
Varchar(M):范围是0-65535
应用场景:地址 ; 变长的字符串使用它。(create table student 8 (addr varchar(15))),效果:如果输入的是成都市,那么占用的空间只会是3.
Char和varchar有什么区别?
1.表示的最大长度不同
2.char是定长的,varchar是可变的。
3.如果应用于查询,char上的查询会更快点。
Longtext:
应用场景:存超过7万字的文本。(create table student9(addr LONGTEXT);)
以blob结尾的都是存的二进制
应用场景:声音,图片,视频
日期和时间
DATE:范围 1000-01-01 — 9999-12-31
应用场景:存出生日期,只要是存年份日期的就用这个
TIMESTAMP:时间戳,1594086480 - 2020-07-07 09:48:00
应用场景:用于记录不同的时间点就用这个。
Datetime:时间,范围(1000-01-01 00:00:00到9999-12-31 23:59:59)
应用场景:记录日期时间都用这个。
10.7与表相关的操作
(1)Show tables :展示当前数据库的所有表
(2)Desc 表名:展示表结构
(3)Drop table 表名:删除表。
(4)Create table 新表名 like 被复制的表名:复制一张表的结构。
只复制表结构,不复制数据。
(5)Create table 新表名 as (select * from 被复制的表名):复制一张表结构和数据。
用的是as
把查询的结果用表存下。具体新表的结构和查询的数据原结构保持一致
(6)Show create table 表名:展示表的创建语句。
(7)字符集:utf8格式的表才能存中文,创建表时默认取数据库database的字符集编码。
(8)注释:在列的最后加上comment即可
在这里插入图片描述
(9)Alter table表名 rename 新的表名; --重命名
(10)Alter table 表名 add 列名 列的定义; --新增一列,列的定义(类型,约束,注释)
在这里插入图片描述
(11)Alter table 表名 change 旧列名 新列名 新列的定义; --修改列名及类型
(12)Alter table 表名 modify 列名 新的列定义; —只修改列类型
(13)Alter table 表名 drop 列名; ----删除一列
11约束
11.1主键
(1)作用:唯一的标记一行(记录)
(2)特点:①一个表里面只有一个主键(通常是一列,也可以是多列)②可以没有主键,不推荐。③不能为空(null)
(3)使用:①通常情况每个表都应该有一个主键②尽量使用一个列来作为主键③尽量选择更新值少的列来作为主键
(4)注意:主键一般是整数int,也可以是字符串(只要不重复就行)
(5)创建
方法一:在新建表的时候指定。
create table student3(no int primary key ,name varchar(10));
CREATE TABLE student5 (
no varchar(6) NOT NULL DEFAULT ‘’,
name varchar(10) DEFAULT NULL,
PRIMARY KEY (no)
)
方法二:表已经创建了,现在要补充主键
alter table student5 add primary key(no);
注意:添加主键的列值不能有重复的,不能为空,否则添加主键失败。
(6)删除
Alter table 表名 drop primary key; --一个表里只有一个主键,删就完了
11.2自动增长
(1)在新增数据的时候可以自动加1(前提:一般是在整数类型上的列)
(2)一般配合主键使用(主键的列上的类型是整数)
(3)一个表里面只有一个自动增长。
(4)写法:create table student7(no int auto_increment primary key,name varchar(100));
11.3非空:限制输入框不能有空值
(1)注意:null才是空值,““ 或者 0 不叫空。
(2)写法:
create table student11(no int auto_increment PRIMARY key,name varchar(10) not null);
alter table student11 modify name varchar(10) not null; 先有表,后期再修改。
11.4检查
(1)目的:限制输入的内容必须是我指定的内容。
(2)Enum 表示枚举:只能选一个
(3)Set 表示集合:可以选多个。
(4)写法
create table student12(no int PRIMARY key,name varchar(20) not null,sex enum(“男”,“女”),hobby set(“篮球”,“足球”,“乒乓球”))
11.5默认值:
(1)目的:当没有输入的时候用默认值填充
(2)用法:create table student13(no int PRIMARY key,name varchar(20) not null,sex enum(“男”,“女”),hobby set(“篮球”,“足球”,“乒乓球”) DEFAULT “篮球”)
11.6唯一
(1)目的:限制列上的值不能重复
(2)特点:允许有空值,一个表中可以有多个唯一列
(3)使用:
create table student9(no int auto_increment primary key,name varchar(10) unique,tel int unique);
CREATE TABLE student9 (
no int(11) NOT NULL AUTO_INCREMENT,
name varchar(10) DEFAULT NULL,
tel int(11) DEFAULT NULL,
PRIMARY KEY (no),
UNIQUE KEY name (name),
UNIQUE KEY tel (tel)
)

alter table student10 add unique key(name); --后期添加, 添加之前这一列要唯一
alter table student10 drop index unique键的名字 ; 删除
11.7外键
(1)目的:限制2个表的关系完整。
(2)主表/从表
主表:一般是主键
从表:一般值是可以重复的
从表一定能在主表中找到对应的行,主表中的主键不一定在从表中找的到。
使用
在从表上建立外键约束
在这里插入图片描述
在从表上建立外键约束
在这里插入图片描述
删除外键约束
在这里插入图片描述
指定外键更新或删除的行为
主表update 或 主表 delete 从表 怎么做?
默认情况:主表不能更新或删除从表存在的值。
如果跟上cascade:表示从表跟着删除或修改
alter table course add CONSTRAINT teacher_id_fk FOREIGN key(teacher_id) REFERENCES teacher(id) on update CASCADE on DELETE CASCADE;
on update CASCADE:在主表更新的时候,从表也更新
on DELETE CASCADE:主表在删除的时候,从表也删除
上面的这两个可以只写一个
如果跟上set null;表示主表修改或删除时,从表设置为null
12范式
12.1作用:设计表的规范和标准 — 有的开发没有遵循。
12.2解读:先满足第一范式,再满足第二范式,然后再满足第三范式(一般做到三级就行)
(1)第一范式:每列保持原子性
能拆开就拆开(根据需求来)
(2)第二范式:确保每一行唯一性
解决方法:添加主键
(3)第三范式:确保每列和主键直接相关,而不是间接相关
解决办法:确保除外键之外,其他非主键属性不得再第二张表中出现。
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200712165718603.png解决:在这里插入图片描述

13DML:数据操纵
13.1插入
(1)语法一: insert into 表名 values(和表中的列一一对应的值), (和表中的列一一对应的值)
值的数量要和列的数量一样多
插入的列值要和列的类型和约束一致
插入的值要和表中的列顺序一致
在这里插入图片描述

如果要插入默认值用default代替,如果要插入空值用null代替
在这里插入图片描述
(2)语法二:insert into 表名(指定列1,指定列2)values(列1的值,列2的值), (列1的值,列2的值)
注意:插入的值要和指定的列一一对应(下面例子中线条连接的)
插入的值要满足列的类型和约束
必填项(且没有默认值)插入时一定要指定列
在这里插入图片描述
13.2从其他表选择相应的内容插入到新表
(1)语法: insert into 表名(列名) select 列名 from 源表名;
(2)例子一:
在这里插入图片描述
(3)例子二:

在这里插入图片描述
13.3修改
(1)语法:update 表名 set 列名=新值,列名2=新值2 [where 条件]
(2)例子
在这里插入图片描述
13.4删除
(1)语法一: delete from 表名 [where 条件]
作用:可以删除指定条件的数据行
如果要删除某几列的值,请用update 设置为null
(2)语法二:truncate table 表名
作用:整个表清空,自动增长设置为默认值1
注意:有外键的时候要满足外键约束
(3)Delete 和 truncate 有啥区别?
Truncate会删除所有,而delete删除指定的
Truncate 在删除大数据量的表的时候要快很多。
Truncate 自动增长设置为默认值1,有外键的时候要满足外键约束
(4)例子
在这里插入图片描述
14DQL数据查询语句
14.1查询结构:select 列名 from 数据源 [ [where 条件][group by 条件 [having 条件] ] [order by 条件] [limit 条件] ]
(1)条件的顺序不能变:比如group 不能卸载where前,limit 不能写在order by前面
14.2Select
(1)Select version(); #查询数据库的版本,后面会补充其他的函数。
(2)Select * :表示取所有的列
(3)Select 列名 as 新的列名 from 表:
在这里插入图片描述
(4)Select 列名 from 表: 如果列是数字型的可以做数学运算(+、-、、/)
例子:SELECT name ,age
10 as age_add1 FROM student
(5)Select 列名,加一个固定值 from 表:可以在查询结果中添加一个固定值
在这里插入图片描述
(6)Select distinct 例名 from表名:可以对列进行去除重复。
例子

那些班有学生?

select distinct class_id from student

获取班级和性别有那些? 联合(class_id,sex)一起去除重复!

select distinct class_id,sex from student
14.3From 数据源
(1)一个表 :今天
(2)多个表 :明天
14.4Where 条件
(1)比较符:= 、 > 、>= 、< 、<= 、 !=
(2)空值比较:null
Null 于任何数进行对比,结果都是false。
如果要判断等于用: is null
如果要判断不等于用:is not null
在这里插入图片描述
(3)特定的范围可以用between …and …
在这里插入图片描述
(4)模糊匹配
用like关键字
_ :表示一个任意字符(注意不能是0个)
%:表示0到多个任意字符(可以为0个)
例如:where name like “刘_%”
(5)逻辑运算符
And:并且
Or:或者
Not:否
在这里插入图片描述
如果不清楚运算优先级的时候加括号
(6)有的时候可以对多个and或者or简化写法
In :在集合内
在这里插入图片描述
Not in : 不在集合内
在这里插入图片描述
14.5排序order by
(1)顺序:默认就是顺序,也可以用单词asc表示(1,2,3,4,5,6)
(2)逆序:用单词desc表示 (6,5,4,3,2,1)
(3)如果有多列进行排序,可以单独指定排序方式(从左往右)
在这里插入图片描述
14.6限制返回的记录条数 limit
(1)有啥用:网页中翻页中的就是这。
(2)Limit 3,6 :表示从3开始取6条。(默认从0开始)
在这里插入图片描述
(3)Limit 3: 取前3条
14.7Group by;分组,一般用于统计
(1)统计:聚合函数
Count :计数
在这里插入图片描述
Sum :求和
Avg:平均值
Max:最大
Min:最小
例子:
Select count(id) from student; # 求人数
select sum(age) from student; # 求和 --240
select max(age) from student; # 求最大
select min(age) from student; # 求最小

  1. 计算的时候没有包含age 为null 的人数。
    select avg(age) from student; 240 / 12 还是
  2. 计算平均的时候要平均到为null的人上。
    2.1 第一步把有空值的转化为0,使用ifnull(列,0).
    select *,IFNULL(age,0) from student;
    2.2 在转化后的列上进行计算
    select avg(IFNULL(age,0)) from student; 240/18
    2.3 结果太长,想指定位数,使用 format(列,小数位数)
    select FORMAT(avg(IFNULL(age,0)),2) from student;
    (2)分组:
    使用单词group by
    Group by 后面可以跟1列或多列
    分组后在查询字段中一般要存在(在加上统计)
    例子

求男女的最大年龄

select sex,max(age) from student GROUP BY sex;

求男女的最小年龄

select sex,min(age) from student GROUP BY sex;

求男女有多少个人

SELECT sex,count(id) FROM student group by sex;
#求 男女的平均年龄
SELECT sex,avg(age) FROM student group by sex;
在这里插入图片描述
(3)分组后的筛选:用having
Having 是在分组之后用,where是在分组之前做筛选。
例子
在这里插入图片描述
(4)其他功能
去除重复

分组有去除重复的效果

select address from student GROUP BY address;

#通常用这个来解决去除重复的问题。
select DISTINCT address from student
(5)容易错的点:分组之后不要取与分组不想关的列
在这里插入图片描述
15多张表查询
15.1子查询
(1)只要在select语句中用到了第二个select,就是子查询(第二个查询)
(2)
(3)例子:
在这里插入图片描述

15.2联表查询
(1)目标:有的查询结果需要展示几个表中的字段。
(2)两种方式(一)
From 表1,表2
注意:navicat会给我们自动命名同名的列

在这里插入图片描述
(3)两种方式(二)
目的:解决一些匹配不到的情况
Left join: 根据连接条件进行连接,如果匹配失败左表都显示,右表用null代替。
在这里插入图片描述
Right join:根据连接条件进行连接,如果匹配失败右表都显示,左表用null代替。
[inner] Join:和 from a,b 一样的效果
在这里插入图片描述
16二个表以上的查询

  1. 查询学生成绩(显示学生id,学生姓名,课程名字,授课老师姓名,成绩);

1.1 分析:来自几个表?student,course,teacher,score

1.2 如何来查: 分析外键? student—> class—>score—>course—>teacher;

select * from student
left join class on student.class_id=class.id
left join score on student.id=score.student_id
left join course on score.course_id=course.id
left join teacher on course.teacher_id=teacher.id
order by student.id asc

  1. 有的时候想把上面的结果保存下来,以备后用
    2.1 可以创建一个视图来存中间查询结果。
    2.2.1 试图的特点:每次访问视图的时候相当于进行了一次查询。(最新的)
    create view student_info as

select student.id,student.name as student_name,class.c_name as class_name,course.name as course_name,score.score,teacher.name as teacher_name from student
left join class on student.class_id=class.id
left join score on student.id=score.student_id
left join course on score.course_id=course.id
left join teacher on course.teacher_id=teacher.id

2.2.2 以后如果还让你做于学生成绩相关的都可以用这个视图了。

select * from student_info where course_name=“数学”

2.2 如果想把查询结果写入实实在在的表:(缺点)

create table student_info_real as

select * from student
left join class on student.class_id=class.id
left join score on student.id=score.student_id
left join course on score.course_id=course.id
left join teacher on course.teacher_id=teacher.id

在这里插入图片描述
17函数
17.1字符串
(1)Concat(s1,s2,s3……):把s1,s2,s3 连接成一个字符串
(2)Concat_ws(sep,s1,s2,s3….):把s1,s2,s3 连接成一个字符串,用sep字符间隔
(3)Substring(被截取的字符串,从第几位开始,截取的长度): 第一个字符是位置上的1。
(4)Trim(str) : 去除字符串首尾的所有空格
17.2时间处理
(1)Curdate():返回当前的日期
(2)Curtime():返回当前的时间 ; 返回的是时分秒
(3)Now():返回当前的日期和时间
(4)Date_add(date,interval int unit):在时间上加unit
SELECT DATE_ADD(“2000-02-28”,INTERVAL 2 DAY)
SELECT DATE_ADD(“2000-02-28 10:00:00”,INTERVAL 24 SECOND)
(5)Date_sub(date,interval int unit):在时间上减unit
SELECT DATE_SUB(“2000-02-28 10:00:00”,INTERVAL 24 HOUR)
SELECT DATE_SUB(“2000-02-28 10:00:00”,INTERVAL 1 DAY)
(6)Date_fomat(date,格式):按指定的格式进行格式化输出
%Y: 表示年,4位
%m: 表示月,数值(1-12)
%d:表示日,数值(1-31)
%H:小时(00-23)
%i :分钟(00-59)
%s:秒
select updatetime,DATE_FORMAT(updatetime,"%Y/%m/%d %H:%i:%s") from student;
https://www.cnblogs.com/hjy1017/p/6055098.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值