MYSQL基础
Posted ༺࿈梦༒缘࿈༻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL基础相关的知识,希望对你有一定的参考价值。
目录
一、数据库的数据类型
使用mysql数据库存储数据时,不同的数据类型决定了 MySQL存储数据方式的不同。为此,MySQL数据库提供了多种数据类型,其中包括整数类型、浮点数类型、定点 数类型、日期和时间类型、字符串类型、二进制…等等数据类型。
1.数值类型
分为整型和浮点型:
数据类型 | 大小 | 说明 | 对应Java类型 | 对应C类型 |
---|---|---|---|---|
BIT [ (M) ] | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围从0到2^M-1 | 常用Boolean对BIT,此时默认位数是1位,即只能存0和1 | char[ ] |
TINYINT | 1个字节 | 都是整型,但字节大小依次增大 | Byte | signed char |
SMALLINT | 2个字节 | Short | short int | |
INT | 4个字节 | Integer | int | |
BIGINT | 8个字节 | Long | long long | |
FLOAT(M,D) | 4个字节 | 单精度,M指定长度,D指定小数位数,会发生精度丢失 | Float | float |
DOUBLE(M,D) | 8个字节 | 双精度,M指定长度,D指定小数位数,会发生精度丢失 | Double | double |
DECIMAL(M,D) | M/D 最大值+2 | 双精度,M指定长度,D指定小数位数,精度数值 | BigDecimal | char[ ] |
NUMERIC(M,D) | M/D 最大值+2 | 双精度,M指定长度,D指定小数位数,精度数值 | BigDecimal | char[ ] |
对于整型类型的范围:
1. 有符号范围: -2 ^ (类型字节数*8-1) 到 2^ (类型字节数*8-1) -1,如 int 是4个字节,就是 -2^31到2^31-1
2.无符号范围: 0到 2^ (类型字节数*8-1) -1, 如 int 就是2^32-1
尽量不使用 unsigbed,对于int类型可能存放不了的数据, unsigned int 同样可能存放不了,与其如此,还不如设计的时候,将int类型提升为bigint类型
2.字符串类型
数据类型 | 大小 | 说明 | 对应Java类型 | 对应C类型 |
VARCHAR(SIZE) | 0-65,535字节 | 可变长度字符串 | String | char[ ] |
TEXT | 0-65,535字节 | 长文本数据 | String | char[ ] |
MEDIUMTEXT | 0-16,777,215字节 | 中等长度文本数据 | String | char[ ] |
BLOB | 0-65,535字节 | 二进制形式的长文本数据 | byte[ ] | char[ ] |
3.日期类型
数据类型 | 大小 | 说明 | 对应Java类型 | 对应C类型 |
DATETIME | 8个字节 | 范围从1000年到9999年,不会进行时区的检索及转换 | java.util.Data、 java.sql.Timestamp | MYSQL_TIME |
TIMESTAMP | 4个字节 | 范围从1970年到2038年,自动检索当前时区并进行转换 | java.util.Data、 java.sql.Timestamp | MYSQL_TIME |
二、数据库基本操作
-- --单行注释 # --单行注释 /*...*/ --多行注释
在cmd中的复制粘贴:选中内容,Enter 键复制,鼠标右键 粘贴
1.数据库操作
1.1创建数据库
create database [数据库名];
1.2查看所有数据库
show databases;
1.3使用指定数据库
use [数据库名];
1.4删除数据库(非常危险)
drop database [数据库名];
三、数据表的基本操作
1.简单表操作
1.1创建表
create table [表名] (若干个列名);
1.2查看所有表
show tables;
1.3查看指定表结构
desc [表名];
1.4删除表(非常危险)
drop table [表名];
2.插入操作
2.1.全列插入
insert into [表名] values(对应的列数据);
2.2指定列插入
insert into [表名] (若干个指定列) values (对应的列数据);-- 没有被插入的列会被默认填充为NULL
--select * from 表示全列查找
2.3一次插入多条记录
insert into [表名] values (对应的列数据),(对应的列数据),(对应的列数据)....;
3.查询
3.1全列查询
select * from [表名];
3.2 指定列查询
select [列名], [列名]... from [表名];
3.3查询字段为表达式
select [表达式] from [表名];
表达式计算得到的结果类型不一定和原来的列类型完全一致,会尽可能保证数据是正确的.
3.4查询字段并指定别名
select [列名/表达式] as [别名] from [表名];--as可以省略
3.5去重查询
单列
select distinct [列名] from [表名];
对这一列相等的数据进行去重(原来的表不受影响)
多列
select distinct [列名], [列名] ... from [表名]; --指定的列完全相同才会被合并在一起
使用distinct的时候,必须把对应的列都放到distinct之后,
所有的select操作都不会对原来的表造成任何改变.基于原来的表,生成一个结果表
想要修改,得用insert,update,dalete....
3.6排序
单列
select [列名],[列名]... from [表名] order by [列名] asc;--升序
select [列名],[列名]... from [表名] order by [列名] desc;--降序
字段为表达式
select [表达式] from [表名] order by [表达式] desc;--降序
使用别名
select [表达式] as [别名] from [表名] order by [别名] desc;--降序
多个列
列越靠前,优先级越高
select * from [表名] order by [列名1] desc, [列名2] desc... ;
--先按[列名1]排序,如果相等,再按照[列名2]进行排序
如果有空值NULL,则NULL会被认为是最小的.
3.7条件查询
[特别重要]:WHERE
比较运算符:
运算符 | 说明 |
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于(不是赋值),NULL不安全,例如NULL = NULL的结果是NULL |
<=> | 等于,NULL安全,例如NULL <=> NULL的结果是TRUE(1) |
!=,<> | 不等于 |
BETWEEN x AND y | 表示当值在[x,y]闭区间之间,就返回TRUE(1) |
IN(若干个选项) | 当值与其中任意一个匹配,就返回TRUE(1) |
IS NULL | 是NUL |
IN NOT NULL | 不是NULL |
LIKE | 模糊匹配,%表示任意多个(包括0个)任意字符; _表示任意一个字符 |
逻辑运算符:
运算符 | 说明 |
AND | 逻辑与,多个条件必须都为TRUE(1),结果才是TRUE(1) |
OR | 逻辑或,任意一个条件为TRUE(1),结果就为TRUE(1) |
NOT | 逻辑取反,条件为TRUE(1),结果为FALSE(0) |
select * from [表名] where [语句];
1. where条件可以使用表达式,但不能使用别名。
2. and的优先级高于or,在同时使用时,需要使用小括号()包裹优先执行的部分
例:
a)查找chinese为NULL的同学信息
b) 查找英语成绩不及格的同学信息
c)查找数学成绩>语文的同学信息
d)查找总分在250以下的同学信息
e)查询语文成绩大于80 并且英语成绩也大于80 的同学信息
f)查询语文成绩在[80, 90]的同学信息
--不能把前后两个数字写反
g)查询语文成绩是84.8, 85.7或者72.3的同学信息
h)查询所有姓张的同学信息
--like 操作要搭配通配符来使用
--%:匹配多个任意字符
--_:匹配一个任意字符
i)查询所有同学中语文成绩为 7 开头的同学信息
3.8分页查询
-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
select ... from [表名] [where ...] [order by ...] limit n;
-- 从 s 开始,筛选 n 条结果
select ... from [表名] [where ...] [order by ...] limit s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
select ... from [表名] [where ...] [order by ...] limit n offset s;
a)查找同学信息中总分最高的前3名.
b)查找同学信息中总分最高的 4 -> 6名
如果limit后面的数字太大,会超出记录的数目,但是返回结果不会有任何的错误
如果 offset后面的数字超出记录的数目,就会得到一个空值
4. 修改
update [表名] set [列名] = [修改的值],[列名] = [修改的值] ... [where...];
a)将ID为3的英语成绩改成90
update每次修改几行记录路是不确定的 ,具体取决于where中的条件怎么写,得看where过滤之后剩下多少记录
b)将张灵玉的语文改为60,数学改为70,英语改为80
c)将所有同学的语文成绩都减10
d)将总成绩倒数3名的同学的语文
修改完的值不能超过指定列的数据类型的范围
在MYSQL中,NULL做任何的运算之后,还是为NULL
5.删除
delete from [表名] [where ...];
a)删除张之维同学的信息
b)删除所有信息
以上是关于MYSQL基础的主要内容,如果未能解决你的问题,请参考以下文章