关系型数据库从零开始学(第二节)关系型数据库查询常用的SQL命令

数据库:

目标①配置环境②常见SQL命令③在express中操作mysql④了解session的原理⑤能够了解jwt的实现原理

1关系型数据库的数据组织结构

数据库、数据表、数据行、字段,与excel相似

2实际开发库、表、行、字段关系

项目独立数据库

不同数据存储到数据库不同表中,比如用户信息、商品信息、购物车信息

字段决定表中存储的信息

表中的行代表具体数据

3安装配置

MySQL server :提供服务

MySQL Workbench :操作数据

4创建数据库、表

create database 数据库名称 ; //创建数据库,mysql命令以   ;   结尾,不要忘记!

show databases ;  //查询数据库

use 数据库名称; //使用指定的数据库

create table users(

       id int not null,

       name char(12),

       status tinyint

     );   //创建表



 数据库字段类型主要以下类型------------------------------可以在使用的时候再看,先了解主要的几种就可以了,在数据类型结尾-------------------------------------------

数值

tinyint

1.十分小的数据,占用1个字节,有符号的范围是-128 - 127,无符号的范围是 从 0 到 255 的整型数据

2.java类型Integer

smallint

1.较小的数据,占用2个字节

2.java类型Integer

mediumint

1.中等大小的数据,占用3个字节

2.java类型Integer

int

1.标准的整数,占用4个字节,范围为-231~231 -1 (-2147483648 ~ 2147483647),可以达到21亿,一般足够用了

2.unsigned,无符号,范围大小 是 0 到4294967295 (40亿)

id int unsigned NOT NULL AUTO_INCREMENT

3.int(num)一般加上zerofill,才有效果。zerofill的作用一般可以用在一些编号相关的数字中,比如学生的编号 001 002 … 999这种

id int(4) unsigned zerofill NOT NULL AUTO_INCREMENT

4.java类型Integer

bigint

1.占用8 个字节,范围从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到18446744073709551615

float

1.浮点型,占4个字节

2.float单精度在一些处理器上比double双精度更快而且只占用double双精度一半的空间

3.缺点是当值很大或很小的时候,它将变得不精确。

4.float(m,d),一个显示宽度m和一个小数点后面带的个数d,同decimal的参数一样

5.unsigned和 zerofill 修饰符也可以被 float、double和 decimal数据类型使用, 并且效果与 int数据类型相同

6.java类型Float

double

1.浮点型,占8个字节

2.double 双精度是消耗内存的,并且是 float 单精度的两倍

3.当你需要保持多次反复迭代的计算精确性时,或在操作值很大的数字时,双精度型是最好的选择。

4.double(m,d),一个显示宽度m和一个小数点后面带的个数d,同decimal的参数一样

5.unsigned和 zerofill 修饰符也可以被 float、double和 decimal数据类型使用, 并且效果与 int数据类型相同

6.java类型Double

decimal

1.字符串形式的浮点数,一般用于计算金额,decimal 类型是适合财务和货币计算

2.decimal(m,d),m是数字的最大位数,他的范围是从1-65;d是小数点后的位数,他的范围是0-30,并且不能大于m。

3.如果m被省略了,那么m的值默认为10,如果d被省略了,那么d的值默认为0.

比如:decimal(5,2),最大位数5位,2位小数,范围-999.99~999.99

4.小数点左侧位数1–2占1个字节,3-4占2个字节,5-6占3个字节,7-9占4个字节

5.unsigned和 zerofill 修饰符也可以被 float、double和 decimal数据类型使用, 并且效果与 int数据类型相同

6.java类型BigDecimal

字符串

char

1.固定大小的字符串,0~255

2.java类型String

varchar

1.可变大小的字符串,0~65535

2.java类型String

tinytext

1.微型文本,最大长度是 255 (2^8 – 1) 个字符。

2.java类型String

text

1.文本串, 最大长度是 65535 (2^16 – 1) 个字符,64kb

2.java类型String

MEDIUMTEXT

1.文本串, 最大长度是 16777215 (2^24 – 1) 个字符,16M

2.java类型String

LONGTEXT

1.文本串, 最大长度是 4294967295 (2^32 – 1) 个字符,4GB

2.java类型String

注意:text类型可用于存储富文本,在utf8mb4下,英文占用1个字节,一般汉字占3个字节,emoji表情占4个字节。

1

二进制字符串类型

BINARY与VARBINARY类型

BINARY和VARBINARY类似于CHAR和VARCHAR,只是它们存储的是二进制字符串。

BINARY (M)为固定长度的二进制字符串,M表示最多能存储的字节数,取值范围是0~255个字符。如果未指定(M),表示只能存储1个字节。例如BINARY (8),表示最多能存储8个字节,如果字段值不足(M)个字 节,将在右边填充’\0’以补齐指定长度。

VARBINARY(M)为可变长度的二进制字符串,M表示最多能存储的字节数,总字节数不能超过行的字节长度限制65535,另外还要考虑额外字节开销,VARBINARY类型的数据除了存储数据本身外,还需要1或2个字节来存储数据的字节数。VARBINARY类型必须指定(M) ,否则报错。

BLOB类型

(binary large object),二进制大对象,是一个可以存储二进制文件的容器,在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。

TinyBlob 最大 255,Blob 最大 65K,MediumBlob 最大 16M,LongBlob 最大 4G

需要注意的是,在实际工作中,往往不会在MySQL数据库中使用BLOB类型存储大对象数据,通常会将图片、音频和视频文件存储到服务器的磁盘上 ,并将图片、音频和视频的访问路径存储到MySQL中。

日期时间

date

1.YYYY-MM-DD日期格式,范围1000-01-01 ~ 9999-12-31

2.java类型Date

time

1.HH:mm:ss时间格式,范围-838:59:59 ~ 838:59:59

2.java类型Time

DATETIME

1.YYYY-MM-DD HH:mm:ss (最常用的时间格式),范围1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

2.java类型Date

TIMESTAMP

1.时间戳, 1970.1.1到现在的毫秒数!也较为常用

DATETIME和TIMESTAMP的区别

DATETIME 类型在所有的日期时间类型中占用的存储空间最大,总共需要 8 个字节的存储空间

不考虑存储空间优化的情况下,DATETIME是最优的时间存储类型 ;考虑存储空间的情况下,TIMESTAMP是最优的时间存储类型

TIMESTAMP会先将用户输入转换成UTC时间进行存储,查询时也会将时间转换成当前UTC时间,所以当数据库服务器的时区跟查询客户端时区不一致时,会出现查询不到的情况。比如查询客户端与数据库服务器都在中国,北京是东八区时间是UTC+8小时,那么存储时会先-8小时,查询时+8。

使用函数CURRENT_TIMESTAMP(), NOW()可以向datetime类型字段插入系统当前日期和时间。

YEAR[(2|4)]

1.缺省为4位格式,4位格式取值范围为 1901 ~ 2155,2位格式取值范围为 70-69(1970-2069)

2.java类型Year

ENUM

1.枚举类型,ENUM类型只允许从成员中选取单个值,不能一次选取多个值

2.当ENUM类型包含1~255个成员时,需要1个字节的存储空间;当ENUM类型包含256~65535个成员时,需要2个字节的存储空间。ENUM类型的成员个数的上限为65535个。

3.没有限制非空的情况下,可以添加null值

4.java类型Enum

JSON类型

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式 。简洁和清晰的层次结构使得 JSON成为理想的数据交换语言

CREATE TABLE json_demo(content JSON);

insert into json_demo(content)values('{"name":"baidu","host":"www.baidu.com"}'),

('{"name":"alibaba","host":"www.alibaba.com"}');

select JSON_EXTRACT(content,'$.name')as name,JSON_EXTRACT(content,'$.host')as host from json_demo;

-----------------------------------------------------------------------------------------数据类型结束---------------------------------------------------------------------------------------

-----------------------------------------------------------------------------↓↓↓↓↓常见的几种数据类型↓↓↓↓↓--------------------------------------------------------------------------------

TINYINT //表示占用一个字节的数字,网页中经常把status设定为tinyint类型

PK(Primary Key) 主键,唯一标识

NN (Not Null) 值不允许为空

UQ  (Unique) 唯一值

AI (Auto Increment) 值自动增长

5 SQL Structured Query Language 结构化查询语言,操作数据库里面的数据,只能在关系型数据库中使用

select 语句用于从表中查询数据

select * from 表名称 // *号是通配符,也可以是列名称,关键字对大小写不敏感

select * from users 


select name,id from users //将username 以及password从users表中查询出来



insert into 用于插入新的数据行

insert into users(username,password) values ('tony stark','098123') //图片示例未使用此行,形式是一样的



update 修改表中的数据

语法:update 表名称 set 列名称 = 新值 where 列名称=某值

示例:update users set password = '8888' where id = 7 //users表中id=7的用户的password改为了8888

    update users set password='8888',status=1 where id = 7 //同时修改多个值



delete用于删除表中的行

delete from 表名称 where 列名称 = 值

示例:delete from users where id= 4 //千万记得ID!!!,很容易搞成删数据库跑路!!! ,如果数据类型是Unique,被删除后,后续的新行也不再占用删除过的值。


where用于限定选择的标准

where子句中可以使用的运算符

= 等于

<>不等于

>大于

<小于

>= 大于等于

<= 小于等于

between 在某个范围内

like 搜索某种模式

示例: select * from users where status = 1



      select * from  users where username<>admin


AND和OR运算符 ,用于where子语句

and === JavaScript中 && 运算符

or=== JavaScript中的|| 运算符

示例:select * from users where status=0 and id<3



      select * from users where status = 0 or username = 'zs'


order by 语句用于根据指定的列对结果集进行排序,默认升序,desc降序

示例:select * from users order by status //通过状态升序排序查询结果


          select * from users order by status desc  // 通过id降序排序查询结果 本行关键字 desc



          select * from users order by status desc,username asc //查询结果先按状态排序,再按username排序


count(*) 返回查询结果的总数据条数

示例:select count(*) from users where status=0



AS 为列设置别名

示例:select count(*) as total from users where status=0 //结果的列名就变为了total



      select username as uname ,password as upwd from users//查询结果的列明就变为了uname和upwd

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容