自学内容网 自学内容网

MySQL其一,概念学习,可视化软件安装以及增删改查语句

目录

MySQL

1、数据库的概念

2、数据库分类

3、MySQL的安装

4、安装过程中的问题

DataGrip的使用:

SQLynx的使用:

5、编写SQL语句

6、DDL语句

7、DML

新增数据:

删除数据:

修改数据:


MySQL

SQL其实是一门开发语言。

大数据为啥要学习SQL语句?大数据起步比较晚。

起步晚,要流行:1)方便使用 2)简单易学 学习成本小

我们所有的大数据组件,每个组件都有自己的用法。想使用大数据,要求会SQL即可。能够吸引大批老的程序员使用新技术。

数据库:SQL语句

Hadoop(Hive): 类似的SQL语句

Spark : Spark SQL

Flink : Flink SQL

数仓学科: Python语言(打个基础)

1、数据库的概念

DB: 数据库的意思,其实本质上就是文本文件而已。我们一般无法察觉,也查看不了,原因是安全性。

数据库管理系统(DataBase Management System,DBMS):文件文件就是数据库的本质,数据库管理系统其实就是用来管理数据文本内容的工具(软件)而已。

数据库管理系统就i是一套软件而已,别人开发出来供我们使用的。

Java : API (开发帮助文档)

2、数据库分类

两大派(华山派 -- 剑宗和 气宗 ):关系型数据 和 非关系型数据库

关系型数据库:主流

MySQL:免费的,以前是SUN公司,后来Oracle 一个表500万数据的时候开始考虑性能问题

Oracle: Oracle 收费的,软件贼大,安全型贼好。 一般政府部门,银行系统。互联网公司都在去O。

MS Server: 微软的

DB2 : IBM的

Access : 微软出来的。小垃圾 其实就是一个excel表格。

非关系型数据库

互联网发达起来

  • HBase是一个分布式的、面向列的开源数据库 上亿行,百万列
  • MongoDB是一个基于分布式文件存储的数据库 H5
  • Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API 每个公司都在用。是基于内存的数据库。

非关系型书库的出现不是为了革命,而是辅助。

什么是关系型数据库呢?

通过行和列存储数据,这样设计出来的数据库都是关系型数据库。

3、MySQL的安装

SQL和数据库的关系?

SQL是一种语言,标准语言。

mysql、oracle 都可以编写和执行sql。

官方了两种安装包:

Oracle: 1G
MS Server:  特别大

数据库的密码: 统一 123456

mysql8.0 它底层进行了优化,同样的sql语句,在mysql8.0 比 mysql5.x 运行速度快。

4、安装过程中的问题

版本要注意:mysql 5.5 和 5.7 特别多

我们现在用的是mysql 8.0版本,他们之间存在一定的兼容问题。

假如你有一个新的电脑:安装软件的时候,比如jdk、mysql、idea等跟工作相关的软件安装C盘。

这些软件是数据库的Server端。 服务器端是不要钱。

安装玩之后,可以使用黑窗口操作。

进入bin之后,输入cmd

登录进去后,就可以编写sql了。

展示所有数据库
show databases;

黑窗口编写SQL语句太费劲了,如果有可视化的软件就好了:

软件购买

远程连接:

可以连接本地和远程,比如同桌的数据库

点击"测试连接" 看是否连接成功!

    原因是Navicat 12版本,连接高版本的数据库,使用的密码校验机制跟 mysql8.0 的机制有不一样的地方。

人工修复一下这个Bug:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;

//更新一下用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

//刷新权限
FLUSH PRIVILEGES;

alter user 'root'@'localhost' identified by 'root';

如何使用Navicat编写命令:

F6 或者 Fn + F6

远程连接工具都有哪些?

Navicat 、 SQLYog 、DataGrip

粘贴激活码即可。

DataGrip的使用:

先创建项目:起个英文名

添加数据源mysql:

选择mysql:

SQLynx的使用:

无需安装,解压即用。

该客户端的优点:1)支持国产的一些数据库 2)运行速度比较快(导入导出)

5、编写SQL语句

1) SQL语句的分类

SQL: Structure Query Language(结构化查询语言),SQL最早是被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准。后来被国际化标准组织(ISO)采纳为关系型数据库语言的国际标准。

国家的统一的语言:普通话 各个地方都有方言。每一个数据库都有方言。方言就是独自。

  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象(数据库、表、列)

创建一个数据库、创建表、添加字段等

  • DML(Data Manipulation Language):数据操作语言,用于定义数据库记录(数据)

数据的新增、修改、删除

  • DQL(Data Query Language):数据查询语言,用于查询记录(数据)

专门针对数据的查询的

  • TCL(Transaction Control Language):事务控制语言,DCL(Data Control Language):数据控制语言,用于定义访问权限和安全级别

控制事务、添加用户、赋予权限、修改密码等。

6、DDL语句

数据库的操作:

展示所有的数据库
show databases;
# 创建数据库
CREATE DATABASE mydb01;
# 创建数据库,并采用指定的字符集
CREATE DATABASE mydb02 CHARACTER SET UTF8;
utf8字符集是可以支持中文的,非常的方便。

查看数据库(了解)
# 查看创建数据库mydb1定义的信息
SHOW CREATE DATABASE mydb01;
mysql> show create database mydb01;

1 row in set (0.07 sec)

mysql> alter database mydb01 character set gbk;
Query OK, 1 row affected (0.09 sec)

mysql> show create database mydb01;

# 将数据库mydb1的字符集修改为GBK
ALTER DATABASE mydb1 CHARACTER SET GBK;

DROP DATABASE mydb1; (不重要)

# 切换当前使用的数据库
USE mydb1; 
# 查询当前使用的数据库
SELECT DATABASE();

查看mysql的版本:
select verion();

关于表的操作:

展示该数据库中的所有表:
show tables;

创建一个表:
语法:
create table 表名( 字段一 数据类型(数据长度),.....);
实战:
create table stu (
   name varchar(255),
   phone varchar(11),
   age int(3)
 );

查看表结构:
desc stu;

# 查看创建一个表的信息
SHOW CREATE TABLE t_users; #不常见

在sql语句中 # 后面的语句不执行,代表注释
修改表的名字
alter table stu rename to student;
以下内容可以练习一遍即可:
# 给一张表添加一个字段
ALTER TABLE t_users ADD score DOUBLE(5,2);
# 修改一张表的字段类型
ALTER TABLE t_users MODIFY score INT;
# 修改一张表的字段名
ALTER TABLE t_users CHANGE name uname VARCHAR(50);
# 修改一张表的字符集
ALTER TABLE t_users CHARACTER SET GBK;

修改表添加一个身高字段:
int 整数   1 2 3 4... 不能写1.11
double 小数 (5,2)  带小数为总共有5个长度,2 表示小数点后能存2位,所以整数为长度是3.
 double(5,2)  最大能表示到 999.99
 alter table student add height double(5,2);
# 删除一张表中的字段
ALTER TABLE t_users DROP score;

表的删除:
drop table student ;

-- 创建一个跟这个表一模一样的表结构
create table stu2  like stu;
-- 创建一个表,表结构跟另一个表一模一样,并且数据也跟它一模一样,类似于copy 某个表
create table stu3 as select * from stu;
-- ------------展示table的DDL语句------------------
-- 查看所有的表
show tables;
-- 创建一个表
create table stu01(
    id int(20),
    name varchar(20),
    age int(3)
);
-- 查看表结构
desc stu01;
describe stu01;
-- 修改表结构,不是修改表中的数据
-- 重命名
alter table stu01 rename to student;

desc student;
-- 添加列
alter table student add score double(5,2);
-- 修改一个列的数据类型
alter table student modify score int(3);
-- 修改字段的名字
alter table student change name sname varchar(30);
-- 修改一张表的字符集
alter table student character set utf8;
show create table student;
-- 删除一个字段
alter table student drop score;
-- 新建一个表,该表的表字段跟student 一模一样
create table stu like student;
desc stu;
-- 创建一个表,表结构和数据都跟你一模一样
create table stu2 as select * from student;
-- 删除表
drop table student;
DDL语句:
   数据库的新增修改删除查看。
   表的新增修改删除查看
   表字段的新增修改删除查看(已经涵盖在了表的修改操作中了)

假如 编写sql语句 回车代表换行,不代表执行,一个sql语句见 ; 表示写完了。

建表语句中,经常出现字段的类型:

比如 age 年龄 数据类型 数字表示 int

常见的数据类型:

数据类型

类型描述

示例

int

整型,整数类型

double

浮点型

double(5,2): 表示最多有5位,其中必须有两位数小数,即最大值是999.99

char

固定长度的字符串

char(5): 固定5位字符,即'aa'也占用5位字符

varchar

可变长度的字符串

varchar(5): 可以根据内容动态分配空间,'aa'只占用两位。括号里的5表示最大的位数。

text

字符串类型

blob

字节类型

很少用的,一般存在 比如 音乐,图片

date

日期类型

yyyy-MM-dd

time

时间类型

hh:mm:ss

timestamp

时间戳类型

yyyy-MM-dd hh:mm:ss,会自动赋值

datetime

时间类型

yyyy-MM-dd hh:mm:ss

作业:字段类型 5遍
其实特别简单: 记住 int  varchar 就可以了。

DDL语句都可以使用图形化界面解决(练习练习即可!)

图形化界面操作(必须掌握):

7、DML

DML指的是对数据库中的数据进行增、删、改的操作。不要和DDL搞混了。

新增数据:

语法-- 必须遵循的法则

INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);注意:列名与列值的类型、个数、顺序要一一对应。

mysql> use mydb03;
Database changed
mysql> show tables;
+------------------+
| Tables_in_mydb03 |
+------------------+
| stu              |
+------------------+
1 row in set (0.08 sec)

mysql> desc stu;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| name   | varchar(255) | YES  |     | NULL    |       |
| age    | int(11)      | YES  |     | NULL    |       |
| height | double(5,2)  | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
3 rows in set (0.12 sec)

mysql> insert into stu(name,age,height) values('zhangsan',22,190.9);
Query OK, 1 row affected (0.07 sec)

mysql> insert into stu(name,age,height) values('lisi',23,180);
Query OK, 1 row affected (0.11 sec)

mysql> select * from stu;  # 该语句是查询语句,表示查询stu中所有的数据
+----------+-----+--------+
| name     | age | height |
+----------+-----+--------+
| zhangsan |  22 | 190.90 |
| lisi     |  23 | 180.00 |
+----------+-----+--------+
2 rows in set (0.08 sec)

# insert into 表名  如果表名后面不添加任何的字段名,就是向所有字段插入值。
mysql> insert into stu values('wangwu',24,175);
Query OK, 1 row affected (0.06 sec)

mysql> select * from stu;
+----------+-----+--------+
| name     | age | height |
+----------+-----+--------+
| zhangsan |  22 | 190.90 |
| lisi     |  23 | 180.00 |
| wangwu   |  24 | 175.00 |
+----------+-----+--------+
3 rows in set (0.09 sec)
# insert into 表名  如果表名后面添加字段名,说明想向这个字段设置值,其他字段不管了。
mysql> insert into stu(name) values('zhaoliu');
Query OK, 1 row affected (0.09 sec)

mysql> select * from stu;
+----------+------+--------+
| name     | age  | height |
+----------+------+--------+
| zhangsan |   22 | 190.90 |
| lisi     |   23 | 180.00 |
| wangwu   |   24 | 175.00 |
| zhaoliu  | NULL | NULL   |
+----------+------+--------+

null 就是空的意思,没有任何值,不是 0 也不是 '' 

desc stu;
insert into stu(id,sname,age) values(1,'zhangsan',20);
select * from stu;
insert into stu values(2,'lisi',20);
insert into stu(id,sname) values(3,'王五');
insert into stu(id,sname) values (4,'sisi'),(5,'五仁'),(6,'六子');

课下练习:

create table emp(
id int,
name varchar(100),
gender varchar(10),
birthday date,
salary double(10,2),
entry_date date,
resume text
);

INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5','good girl');

INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
VALUES(2,'lisi','male','1995-5-10',10000,'2015-5-5','good boy');

INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
VALUES(3,'你好','male','1995-5-10',10000,'2015-5-5','good boy');

创建一个新的表,跟stu表不一样

需求是:从stu中,查询数据导入到emp表中。

insert into emp(sname,sage,sheight)  select * from stu;

mysql> insert into emp(sname,sage,sheight)  select * from stu;
Query OK, 4 rows affected (0.11 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from emp;
+----------+------+---------+--------+
| sname    | sage | sheight | gender |
+----------+------+---------+--------+
| zhangsan |   22 |     191 | NULL   |
| lisi     |   23 |     180 | NULL   |
| wangwu   |   24 |     175 | NULL   |
| zhaoliu  | NULL | NULL    | NULL   |
+----------+------+---------+--------+
4 rows in set (0.07 sec)

stu

emp

name varchar

sname varchar

age int

sage int

height double

sheight double

select 语句查询出来的数量以及字段类型和顺序都必须 和 insert into 中表的字段数量、类型、顺序一样,跟表名字、表字段的名字没有半毛钱关系。
对比:
这个语句执行的时候必须有表
insert into 表名  select * from 表2

这个语句执行的时候可以没有表,sql语句帮创建表
create table 表名 as select * from 表2

删除数据:

# 删除数据
DELETE FROM 表名;
# 删除掉表中所有的数据
TRUNCATE TABLE 表名;

delete from stu where name='zhaoliu';
# where 后面可以添加条件,满足条件的删除掉
DELETE 和 TRUNCATE

1. delete删除表中的数据,表结构还在;删除的数据可以恢复。
2. truncate是直接将表DROP掉,然后再按照原来的结构重新创建一张表。数据不可恢复。
3. truncate删除效率比delete高。

where条件:

如何造数据:

字段

解释

name

姓名

groupid

小组

score

成绩

# 删除姓名叫"张三"的数据
delete from student where name='张三';

# 删除成绩不是100的数据
delete from student where score != 100;
delete from student where score <> 100;

# 删除不及格的数据
delete from student where score < 60;
# 删除成绩在[60, 80]范围的数据
delete from student where score >= 60 and score <= 80;

delete from student where score between 60 and 80;
# 删除小组是1,3,5的数据
delete from student where groupid = 1 or groupid = 3 or groupid =5;
delete from student where groupid in (1,3,5);
# 删除成绩是空的数据
delete from student where score is null;
# 删除成绩不及格的第三组的数据
delete from student where score < 60 and groupid = 3;

# 删除姓张的数据
delete from student where name  like '张%';

% 表示任意0个或者多个字符
# 删除名字中含有  伟 字的同学
delete from student where name  like '%伟%';

修改数据:

需求:只要这个同学姓张,就加10分
考虑语法:
UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值

根据语法编写sql语句:
score = 10 是将 score 的数据重置为 10
update student set score = 10 where name like '张%';
修改为:
update student set score = score + 10 where name like '张%';
# 将所有员工薪水修改为5000元。
UPDATE emp SET salary=5000 

# 将姓名为’zhangsan’的员工薪水修改为3000元。
UPDATE emp SET salary=3000 WHERE name=’ zhangsan’;

# 将姓名为’lisi’的员工薪水修改为4000元,job改为ccc。
UPDATE emp SET salary=4000,job='ccc' WHERE name='lisi';

# 将wu的薪水在原有基础上增加1000元。
UPDATE emp SET salary=salary+1000 WHERE name='wu';

ifnull(字段名,默认值)
update stu set age = ifnull(age,0) + 1;

原文地址:https://blog.csdn.net/yyzzyyds/article/details/144363851

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!