mysql基础操作

前言:

在IT行业中,无时无刻不在与数据打交道,对于数据的存储来说是相对比较重要的,而存储在内存的数据是不稳定的,存储在硬盘上的数据(也就是使用数据库来存储)一般来说是比较稳定的,除非对硬盘使用一些极端方式,让其里面数据失效。所以,这里将会介绍一种数据库-mysql来进行数据的存储。

1.什么是mysql?

mysql是一个客户端-服务器的程序,mysql服务器是真正的本体,用来进行存储数据,查询数据并返回结果,并且数据是存储在硬盘上的。要想使用mysql来进行数据的存储,就需要对其中的数据库进行操作。mysql其实就是由很多的数据库(逻辑上的数据集合)组成的,每一个数据库中都有很多的表,mysql服务器把这些相关的表放在一起就组成的数据库,所以可以理解成mysql就是通过表来组织的。

2.mysql数据库操作:

mysql的相关操作对字母的大小写并不敏感,但是建议用小写。

(1)创建数据库

create database 数据库名;

需要注意的是:

每一条sql语句后面都需要有分号(;),否则会报错。

在创建数据库的时候,由于不能重复创建,可以在数据库名前加上if not exits,表示如果这个数据库不存在再进行创建。通过此操作可以避免一些sql语句的报错。

在创建数据库的时候还应该指定一下字符集,mysql默认保存的是拉丁文,不支持中文,所以可以将字符集设定为utf8(相较于jbk来说更全面一点,也更流行)。具体方式就是在数据库名后面加上charset = utf8。

(2)查看数据库

show databases;

查看当前硬盘上有哪些数据库。

(3)选用数据库

use database 数据库名;

这一步相对来说比较重要。表是从属于数据库的,所以在进行表的相关操作时就需要先选中数据库,然后才能进行相关操作。

(4)删除数据库

drop database 数据库名;

这一步是比较危险的。如果进行了该操作,该数据库中的所有表,以及表中的所有数据都会被删除,并且是不能进行恢复的,所以进行此操作的时候需要慎重。

3.mysql中数据类型:

上述都是比较常见实用的一些数据类型,具体数据类型见官方文档。

需要注意的是:

(1)varchar(size):size指的不是字节数,而是字符数,例如一个中文字符,在jdk字符集下是2个字节,在utf8字符集下是3个字节,并且size不是在一开始就就会分配这么多,而且根据你所添加的数据的大小来分配合适的空间,但最多分配size个。

(2)不建议使用无符号数据类型(java中没有但mysql中有),以防两个数据相减得到一个很大的数。

(3)timestamp:表示时间戳,它是每时每刻都是在变换的。

4.mysql表操作:

数据库中表中的每一列称为一个字段,每一行称为一条记录。在创建表之前需要先选中某个数据库。

(1)创建表

create table 表名(列名 数据类型名,..........);

ps:

也可以加上if not exits。

类型名在列名后面。

如果想要列名与关键字相同的话,就是需要将列名用·(Esc下面,Tab上面键)引起来。

(2)查看所有表

show tables;

(3)查看当前表中的所有结构

desc 表名;

其中有Field,Type,Null,Key,Default,Extra这几个属性,其中Null:YES/NO,YES表示允许该字段可以为null,NO表示该字段不能为null;Field:字段;Default:如果没有赋值的话就是默认值null。

(4)删除表

drop table 表名;

该操作也是一个很危险的操作,该操作只会将表中的数据给全部删除,但数据库还在,在使用该操作时需慎重。

5.mysql表中列的增删查改 => CRUD

mysql中单双引号也不太敏感,都可以使用。

(1)增(Create)

insert into 表名 values(值1,值2,..........);

值1,值2必须与创建表时,数据类型的顺序一致。

在进行增加的时候可以全列插入(insert into People values("lisi",15,2),("zhangsan",20,1);)  People是一张表,表中有name,age,id属性),指定列插入(insert into table People(name,age) values("lisi",20);)

(2)查(Retrieve)

a.全列查询

select * from 表名;

ps:当数据量过大的时候是一个比较危险的操作,因为在一个数据量很大的环境下进行该操作的话就有可能把硬盘的io口跑满或者把网卡的带宽跑满,这样以后其他客户端访问服务器进行很慢,就好比一条宽度有限的公路突然涌入了很多车,这时候就会导致,后面的车过这条路会很慢。

b.指定列查询

select 列名,列名,..... from 表名;

这里的列名可以有很多个也可以只有一个。

c.查询字段为表达式

select 表达式 from 表名;

eg:有一张名为Student的表,里面有name,math,chinese,english这几个属性。现在要查询chinese-10的所有学生的成绩。

select name,chinese-10 from Student;

(chinese-10)这个操作就是一个表达式,这个操作不会修改数据库中的原始数据,只是mysql服务器针对客户端的查询需求,返回的一份临时数据。

d.别名(as)

select 表达式/列名 as 别名 from 表名;

ps:as可以在排序的时候使用,但不能在where的时候使用。

e.去重(distinct)

select distinct 列名 from 表名;

这个操作会去掉表中对应列中的相同元素。

如果修饰多个列时,则会保留一个有指定多列属性的记录。

eg:select distinct chinese,math from Student;

保留一个chinese和math都相同的学生

f.排序(asc/desc)

select 列名 from 表明 order by 列名 asc/desc;

asc表示升序,desc表示降序。这个操作一般放在sql语句的最后,如果只是order by的话就默认是升序排序。

ps:

如果一个sql语句不加排序相关操作,就默认是无序的。

进行多列排序时,会有一个优先级顺序,写在第一梯队的先进行排序,如果相同的时候,则再进行按照第二梯队的进行排序,以此类推。

还可以针对表达式排序,指定列排序。

上述所有的排序操作也不会数据库的原始数据有影响,都是mysql服务器针对客户端的查询需求,所返回的一份临时数据结果集。

g.条件查询(where)

select 列名 from 表名 where 条件;

在设置条件时,需要注意运算符,如下是各种运算符:

ps:

sql中没有"=="这个符号,使用"="/"<=>"(多建议使用这种)来表示等于。

LIKE:模糊匹配 ,通过%表示任意多个字符,_表示任意一个字符。eg:王%:以王为开头的内容;%王%:中间内容是王;%王:以王为结尾的内容。

条件中不能使用别名!!!条件大多时候放在sql语句最后,有排序的话,在排序之前。

h.分页查询(limit)

select 列名 from 表名 limit 限制个数;

通过limit能限制查询出来的数据个数,还可以加上offset + 偏移量(从下标为0的位置开始,也就是第一行开始)

ps:limit一般放在sql语句最后面(在排序之后)

(3)改(Update)

update 表名 set 列名 <=> 值 where 条件;

eg:一个学生的数学成绩(math decimal(3,1))为55,这时候想要让他的数学成绩/2,本来操作完成后结果应该是27.75,但是由于math的数据类型是decimal(3,1),所以mysql会自行进行截断(四舍五入),最终结果会保留成27.8。

(4)删(Delete)

delete 列名 from 表名 where 条件/limit;

ps:这个操作也是一个危险操作,需慎重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值