零基础班第六课 - MySQL实操(一)
- 创建新DB和新用户&Dbeaver链接
- 字段类型
- SQL语句分类
- 创建删除表&增删改查
- 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字段的意思是:允许哪个机器来访问数据库
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.
测试修改为VM8的IPV4地址后可以进行链接。
update user set Host = ‘10.0.0.1’ where User = ‘ruoze’;
flush privileges;
如果我们使用的是云主机,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;
找到哪个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数据库昨晚直接电源关闭后,今天连接数据库操作时间还是昨天的,没有更新成最新的时间。
百度后如下操作就可以:
设置时间:
一、使用命令与互联网时间同步,然后再写入硬件(也就是CMOS)
ntp服务器同步时间
代码:
(1)、sudo ntpdate cn.pool.ntp.org
将调整后的时间写入cmos
代码:
(2)、sudo hwclock --systohc
4、SQL一
为什么要做自增长主键:避免无谓的开销,插入数据是一个跟着一个的,存取效率是最高的。不要在sql中强行写自增长的值。
默认引擎是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的大小升序排列;
limit:限制多少行
select * from stu_info order by stu_age limit 2;
当我们使用这条语句时,有两个stu_age=24的数据,该查询会以id降序的方式输出
select * from stu_info order by stu_age , id asc limit 2;
推荐学习大数据的网站:www.ruozedata.com
B站可以搜索:若泽大数据 进行学习。
更多推荐
所有评论(0)