零基础班第六课 - MySQL实操(一)

  1. 创建新DB和新用户&Dbeaver链接
  2. 字段类型
  3. SQL语句分类
  4. 创建删除表&增删改查
  5. SQL一

一、创建新的DB和新用户&Dbeaver链接

楼主Linux上使用的MySQL版本是5.6版本

1、mysql - uroot -p
2、show databases;	//展示所有数据库
3、use myqsl;		//使用mysql数据库
4、show tables;		//显示所有的table表
5、desc user;		//查看表中的字段,列的名称
Host字段的意思是:允许哪个机器来访问数据库

零基础班第六课 - MySQL实操(一)_第1张图片
1.1、创建一个新的database和用户ruoze

1、create database ruozedata;		//创建名称为“ruozedata”的数据库
2、grant all privileges on ruozedata.* to ruoze@'%' identified by '960210';		//赋予所有权限给“ruoze”这个用户能通过任意机器来访问“ruozedata”这个数据库下的所有内容(具有读、写、执行权限),通过密码“960210”来访问。
//赋予ruozedata这个数据库下的所有(读、写、执行)权限给“ruoze”用户,它能通过任意机器IP使用密码“960210”,来进行访问。
3、flush privileges;
4、exit;		//退出当前窗口
测试登录:mysql -uruoze -p -h127.0.0.1
enter password:960210
提示如下:```ERROR 1045 (28000): Access denied for user 'ruoze'@'localhost' (using password: YES)

只允许windows当前电脑来访问,win+R,cmd下输入ipconfig,获取到当前电脑的ipv4地址,192.168.5.170,使用root用户进入到数据库mysql下的user表,使用如下语句更新Host信息,update user set Host = ‘192.168.5.170’ where User = “ruoze”;flush privileges,刷新权限后测试链接,dbeaver报错?
-思考-::为什么报错?
我们搭建的是虚拟机,是根据VM8的网卡进行跳转的,当我们windows电脑去访问的时候实际上是以VM8的IPV4地址去进行跳转的;所以我们设定windows的IP的时候会报错,找到真正访问MySQL的IP.
零基础班第六课 - MySQL实操(一)_第2张图片
零基础班第六课 - MySQL实操(一)_第3张图片
零基础班第六课 - MySQL实操(一)_第4张图片
测试修改为VM8的IPV4地址后可以进行链接。

update user set Host = ‘10.0.0.1’ where User = ‘ruoze’;
flush privileges;
零基础班第六课 - MySQL实操(一)_第5张图片
如果我们使用的是云主机,dbeaver的服务器地址是云主机的外网IP;我们要在mysql数据库下对user表中的当前访问用户的Host做出修改,两种可能(1)、ip是cmd窗口下查询到的本机IPV4地址;(2)、浏览器下直接输入ip;无论访问还是授权,两个都应该使用外网地址。

在生产中:不可能来一个IP在数据库中加一个IP,一般设定的是一个网段来访问;比如IP进来,eg1:192.168.137.0:意味着ip是192.168.137.1~192.168.137.255的机器都可以访问;eg2: 192.168.0.0:意味着 192.168.1.1255、192.168.2.1255、192.168.255.1~255:

比如mysql是共用的,第一组有10人访问,第二组5人访问,赋予ip会累死;会给一个测试组,在一个网段内的IP都能访问。

1.2、dbeaver 免安装 绿色版本(前提电脑JDK需要部署)
www.dbeaver.io 上下载community社区版,下载速度缓慢,挂载VPN下载即可。

1.3、如何查看mysql的连接数
show processlist;
kill id;
零基础班第六课 - MySQL实操(一)_第6张图片
找到哪个process卡,导致夯住,锁死–>和其他人确认清楚在杀掉。

二、字段类型

数值类型
int 整数
long 长整型
float 单精度型
double 双精度型
decimal 小数值(金额字段)
字符串类型 定义 可存储字节
char 定长字符串 0~255字节
varchar 变长字符串 0~65535字节

Char(M): M的长度是固定的,M取值为0~255之间,当保存char值时,在他们的右边填充空格以达到指定的长度。又当我们检索到char值时,它尾部的空格会被删掉。
Varchar(M)定义的列的长度为可变字符串,M取值可以为0~65535之间,varchar值保存时不进行填充。参考博客如下:
https://blog.csdn.net/mzd8341/article/details/75267013

日期和时间类型
date(日期) YYYY-MM-DD
time(时间) HH:MM:SS
datetime
timestamp

三、SQL语法

DDL(Data Definition Language):create database 、create table、drop
DML(Data Manipulation Language): insert 、update 、 delete 、select
DCL: grant

插曲:开发界一直流传着一句话,不就是增删改查么,从其他地方复制黏贴,根据自己的逻辑再增删改查。Don’t be afraid.

create table rzdata(
id int auto_increment primary key,		//mysql第一列一定需要是自增长主键

num int,
name varchar(100),
age int,			//业务定义

createtime timestamp default current_timestamp,
createuser varchar(100),			
updatetime timestamp default current_timestamp on update current_timestamp,			//更新时间会被改成当前时间
updateuser varchar(100)
);

建表规范:1、id 自增长
2、createuser updatetime updateuser
3、生产上建表也要有统一规范,stu_nu或者Stuno;个人建表喜好不同,eg:创建时间:createtime、cretime、ctime、cre_time、create_time
订单编号:oederno 、order_no 、ordernum 、orderid、
假设:两张表 oder_no、orderid	做关联,比如业务快速发展,订单系统、仓储系统,各人用各人的,后期有问题
4、字段名称不允许中文、不准用中文的汉语拼音建字段

–约束:主键 primary key,一张表只能一个有一个主键,但是可以有一个或多个字段组成联合主键。 primaey key = unique + not null
唯一约束:unique
非空约束:not null
默认约束:

3.1、增删改查:

1、增:insert into test.rzdata(num,name,age,createuser,updateuser)
values (1416,'john',24,'sail','ghost');
//可以简写成i
insert into test.rzdata
values (1416,'john',24,'sail','ghost');			需要根据字段得一一对应的关系给补齐
2、查:select * from test.rzdata;
3、改:update test.rzdata set name = 'tom',creatuser = 'victor' where createtime = '2019-06-27 10:38:24'		//也可以修改某行的值
变换:update test.rzdata set name = 'tom',creatuser = 'victor'		//意味着所有数据都需要进行修改

dbeaver数据库昨晚直接电源关闭后,今天连接数据库操作时间还是昨天的,没有更新成最新的时间。
零基础班第六课 - MySQL实操(一)_第7张图片
百度后如下操作就可以:
设置时间:

一、使用命令与互联网时间同步,然后再写入硬件(也就是CMOS)
ntp服务器同步时间
代码:
(1)、sudo ntpdate cn.pool.ntp.org
将调整后的时间写入cmos
代码:
(2)、sudo hwclock --systohc

4、SQL一

为什么要做自增长主键:避免无谓的开销,插入数据是一个跟着一个的,存取效率是最高的。不要在sql中强行写自增长的值。

零基础班第六课 - MySQL实操(一)_第8张图片
默认引擎是InnoDB,默认编码目前是latin1.
**Select * 语句,**假设只取stu_name,stu_age两列,然而我们使用了select * ,数据量大的话,网络带宽就上去了。

select * from stu_info;

select stu_num,stu_name from test.stu_info;

select stu_num,stu_name from test.stu_info where stu_name = 'john';

条件查询:where

select stu_num,stu_age,stu_name from stu_info;
select * from stu_info where stu_age=24 and stu_name=‘john’;
select * from stu_info where stu_age=24 or stu_name=‘john’;
select * from stu_info
where stu_age=25 and (stu_num = 1416460024 and stu_name = ‘john’);
因为是and,需要括号前后的语句都需要满足,才有返回值,一方未满足的话,返回空值;
把stu_age=25 and ==> stu_age = 25 or ,返回满足这两个条件中任意一个的值

模糊查询:

关键字:like
需求1:找出名字中含有’o‘字符的
select * from stu_info where stu_name like ‘%o%’; //只知道名字中带有o字符

需求2 名字第一个字符以j开头
select * from stu_info where stu_name like ‘j%’;

需求3 名字第三位是m结尾
select * from stu_info where stu_name like ‘%m’;

需求4 名字第四位是t,后续还有字符位
select * from stu_info where stu_name like ‘___t’%; //可以用占位符_先表示出来

排序:

**需求一、**按照年龄进行升序、降序排序,如果asc不写,则默认是升序排列。
select * from stu_info order by stu_age asc;

select * from stu_info order by stu_age desc;

在根据年龄升序的过程中,如果遇到两个年龄相同的,它会默认按照主键id的大小升序排列;
零基础班第六课 - MySQL实操(一)_第9张图片

limit:限制多少行

select * from stu_info order by stu_age limit 2;
当我们使用这条语句时,有两个stu_age=24的数据,该查询会以id降序的方式输出
零基础班第六课 - MySQL实操(一)_第10张图片
select * from stu_info order by stu_age , id asc limit 2;

推荐学习大数据的网站:www.ruozedata.com
B站可以搜索:若泽大数据 进行学习。

你可能感兴趣的:(零基础班MySQL+SQL语法,零基础班第六课-SQL01)