IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL基本知识02 -> 正文阅读

[大数据]MySQL基本知识02

数据库C[create]R[read]U[update]D[delete]语句

Insert 语句 ?添加数据

INSERT INTO?? table_name [(column [, column. . .])]

VALUES??????? (value [ , value. . . ]);

注意:1.插入的数据应与字段的数据类型相同。

比如把'abc'添加到int类型会错误

2.数据的长度应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。

3.在values中列出的数据位置必须与被加入的列的排列位置相对应。

4.字符和日期型数据应包含在单引号中。???????

5.列可以插入空值[前提是该字段允许为空],insert into table value(null)

6. insert into tab_name(列名..) values ()()()形式添加多条记录

7.如果是给表中的所有字段添加数据,可以不写前面的字段名称

8.默认值的使用,当不给某个字段值时,如果有默认值就会添加,否则报错

如果某个列没有指定not null ,那么当添加数据时,没有给定值,则会默认给nul1

如果我们希望指定某个列的默认值,可以在创建表时指定???????????

使用update语句修改表中数据

UPDATE?? tbl_name

????????? SETcol_name1=expr1 [ , col_name2=expr2 ... ]

[WHERE where_definition]

使用细节:

1.UPDATE语法可以用新值更新原有表行中的各列。

2.SET子句指示要修改哪些列和要给予哪些值。

3.WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。慎用

4.如果需要修改多个字段,可以通过set字段1=值1,字段2=值2.….

Delect语句

使用delete语句删除表中数据。

delete from tbl_name

??????? WHERE? where_definition]

使用细节

1.如果不使用where子句,将删除表中所有数据。

2. Delete语句不能删除某一列的值(可使用update 设为null或者‘ ’)

3.使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。drop table表名;

Select语句

SELECT [DISTINCT]*l ?{ column1,column2 . column3. . }

??????? ??????FROM? table_name;

注意事项(创建测试表学生表)

1. Select 指定查询哪些列的数据。

2. column指定列名。

3.*号代表查询所有列。

4.From指定查询哪张表。

5. DISTINCT可选,指显示结果时,是否去掉重复数据

使用表达式对查询的列进行运算:

SELECT* l ?{ column1 l expression,column2 l expression,..}

???????? FROM table_name;

在select语句中可使用as语句

?????? SELECT column_name as 别名from表名;

在where子句中经常使用的运算符

比较运算符 ???????> < <= >= = <> !=??????? 大于、小于、大于(小于)等于、不等于

????????????????? BETWEEN ....AND... ????????显示在某一区间的值

??????????????????????????????? IN(set)????? ?????????????显示在in列表中的值,例: in(100,200)

????????????????? LIKE “张pattern”?????????? 模糊查询

????????????????? NOT LIKE "??????????????? 模糊查询

????????????????? IS NULL?????????????????? 判断是否为空

逻辑运算符 ???????and????????????????????? 多个条件同时成立

????????????????? Or?????????????????????? 多个条件任一成立

????????????????? Not????????????????????? 不成立,例: where not(salary>100);

使用order by子句排掌查询结果:

SELECT column1, column2 . column3. .

??????? FROM table;

??????? order by column ascl desc,...

1.Order by指定排序的列,排序的列既可以是表中的列名,也可以是select语句后指定的列名。

2. Asc升序[默认]、Desc降序

3.ORDER BY子句应位于SELECT语句的结尾。

合计/统计函数- count

Count返回行的总数

??select count(* ) ?l? count(列名from table_name

??????? [WHERE?? where_definition]

注意: sum仅对数值起作用,否则会报错。

注意:对多列求和,“, ”号不能少。

合计函数- avg

AVG函数返回满足where条件的一列的平均值

select avg(列名){,avg(列名)...}? from table_name

????????? [WHERE? where_definition]

合计函数-Max/min

Max/min函数返回满足where条件的一列的最大/最小值

select max(列名from table_name

????? [WHERE? where_definition]

使用group by子句对列进行分组[先创建测试表]

SELECT column1, column2. column3. . FROM table

?????? Group by column

使用having子句对分组后的结果进行过滤

SELECT column1, column2 . column3 . .

?????? FROM table

?????? group by column having ...

字符串相关的知识

CHARSET(str)?????????????????????????????????????? 返回字串字符集

CONCAT (string2 [,….])??????????????????????????????? 连接字串

INSTR(string ,substring )??????????? 返回substring在string中出现的位置,没有返回0

UCASE (string2 )???????????????????????????????????? 转换成大写

LCASE(string2 )????????????????????????????????????? 转换成小写

LEFT (string2 ,length )??????????????????????? 从string2中的左边起取length个字符

LENGTH(string )????????????????????????????????????? string长度[按照字节]

REPLACE(str ,search_str?????????????????????? 在str中用replace_str替换search_str

,replace_str )

STRCMP (string1 ,string2 )?????????????????????????? 逐字符比较两字串大小,

SUBSTRING(str , position [,length])??????????????? 从str的position开始【从1开始计算】,取length个字符

LTRIM (string2 ) RTRIM(string2 ) ?trim????????????????? 去除前端空格或后端空格

数学相关的函数

ABS(num)????????????????????????????????????????? 绝对值

BIN(decimal_number )?????????????????????????? ????十进制转二进制

CEILING (number2 )???????????????????????? 向上取整,得到比num2大的最小整数

CONv(number2,from_base,to_base)??????????????????? 进制转换

FLOOR (number2 )????????????????????????? 向下取整,得到比 num2小的最大整数

FORMAT (number,decimal_places )???????????????????? 保留小数位数

HEX (DecimalNumber )???????????????????????? ??????转十六进制

LEAST (number , number2 [….])??????????????????????? 求最小值

MOD (numerator ,denominator )?????????????????????? 求余

RAND([seed])???? ?????????????????????????????RAND([seed])其范围为0≤v≤ 1.0

注意:rand(返回一个随机浮点值v,范围在0到1之间(即,其范围为0svS 1.0)。若已指定一个整数参数N, 则它被用作种子值,用来产生重复序列。

时间日期相关函数date.sql

CURRENT_DATE( )??????????????????????????????? ?当前日期

CURRENT_TIME( )???????????????????????????????? 当前时间

CURRENT_TIMESTAMP( )?????????????????????????? 当前时间戳

DATE (datetime )????????????????????????????????? 返回datetime的日期部分

DATE_ADD(date2,INTERVAL d_value d_type )????????? 在date2中加上日期或时间

DATE_SUB (date2,INTERVAL d_value d_type )????? 在date2上减去一个时间

DATEDIFF (date1 ,date2 )???????????????????????? 两个日期差(结果是天)

TIMEDIFF(date1,date2)?????????????????????? 两个时间差(多少小时多少分钟多少秒)

Now ( )???????????????????????????????????????? 当前时间

EAR[Month]DATE (datetime )????????????????? ?????年月日

FROM_UNIXTIMEO

注意:

1.DATE ADD()中的interval后面可以是year minute second day等

2.DATE SUB()中的interval后面可以是year minute second hour day等

3.DATEDIFF(date1,date2)得到的是天数,而且是date1-date2的天数,因此可以取负数

4.这四个函数的日期类型可以是date, datetime或者timestamp

注意:在实际开发中,我们也经常使用int来保存一个unix时间戳,

然后使用from_unixtime()进行转换,还是非常有实用价值的

加密和系统函数pwd.sql

USER()?????????????????????????????? 查询用户

DATABASE() ?????????????????????????数据库名称

MD5(str)???????????????????? 为字符串算出一个 MD5 32的字符串,(用户密码)加密

PASSWORD(str)?????????????? 从原文密码str计算并返回密码字符串,通常用于对mysql

select * from mysql.user \G????? 数据库的用户密码加密

流程控制函数

IF(expr1,expr2,expr3)???????????? 如果expr1为True ,则返回expr2否则返回expr3

IFNULL(expr1,expr2)????????????? 如果expr1不为空NULL,则返回expr1,否则返回expr2

SELECT CASE WHEN expr1 THEN expr2????? 如果expr1 为TRUE,则返回expr2,如果expr2

WHEN expr3 THEN expr4 ELSE expr5????????? 为t,返回expr4,否则返回expr5

END;[类似多重分支.]

mysql表查询--加强

基本语法:select ...limit start,rows

表示从start+1行开始取,取出rows行, start 从0开始计算

总结

数据分组的总结

如果select语句同时包含有group by ,having , limit? order by那么他们的顺序是group by , having , order? by,limit

SELECT column1 , column2 . column3. . FROM? table

????????? group by column

????????? having condition

order by column

limit start, rows,

MySQL数据库多表查询

多表查询是指基于两个和两个以上的表查询.在实际应用中,查询单个表可能不能满足你的需求,

在默认情况下:当两个表查询时,规则

1.从第一张表中,取出一行和第二张表的每一行进行组合,返回结果[含有两张表的所有列].

2.一共返回的记录数第一张表行数*第二张表的行数

3. .这样多表查询默认处理返回的结果,称为笛卡尔集

4. 解决这个多表的关键就是要写出正确的过滤条件where 需要进行分析

注意:多表查询的条件不能少于表的个数-1,否则会出现笛卡尔集

自连接:自连接是指在同一张表的连接查询。

mysql表子查询

(1)子查询

子查询是指嵌入在其它sql语句中的select语句,也叫嵌套查询

(2)单行子查询

单行子查询是指只返回一行数据的子查询语句

(3)多行子查询

多行子查询指返回多行数据的子查询使用关键字in

多列子查询

多列子查序则是指查询返回多个列数据的子查询语句

(字段1,字段2.…)= (select字段1,字段2 from……)

表复制

自我复制数据

有时,为了对某个sql语句进行效率测试,我们需要海量数据时,可以使用此法为表创建海量数据。

mysql表外连接

●外连接

1.左外连接(如果左侧的表完全显示我们就说是左外连接)

??select .. from表1 left join表2 on 条件[表1:就是左表 表2:就是右表]

2.右外连接(如果右侧的表完全显示我们就说是右外连接)

??select .. from表1 right join表2 on 条件[表1:就是左表 表2:就是右表]

mysql约束

约束用于确保数据库数据满足特定的商业规则。在mysql中,约束包括: not null、unique,primary key,foreign key,和check五种.

(1)primary key(主键)-基本使用

字段名 ??字段类型primary key

用于唯一的标示表行的数据,当定义主键约束后,该列不能重复

在实际开发中,每个表往往都会设计一个主键.

(2)not nulI(非空)

如果在列上定义了not null,那么当插入数据时,必须为列提供数据。

字段名 ?字段类型not null

(3)unique(唯一)

当定义了唯一约束后,该列值是不能重复的.。

字段名 ?字段类型unique

(4)foreign key(外键)

用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null

FOREIGN ?KEY(本表字段名)REFERENCES

主表名(主键名或unique字段名)

外键注意事项:

1.外键指向的表的字段,要求是primary key 或者是unique

2. 表的类型是innodb,这样的表才支持外键

3.外键字段的类型要和主键字段的类型一致(长度可以不同)

4.外键字段的值,必须在主键字段中出现过,或者为null[前提是外键字段允许为null]

5.一旦建立主外键的关系,数据不能随意删除了.

(5)Check

用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000~2000之间如果不再1000~2000之间就会提示出错。

oracle和sql server 均支持check ,但是mysql5.7目前还不支持check ,只做语法校验,但不会生效。check.sql

基本语法:列名类型 ??????check (check条件)

user表

id, name, sex(man,woman), sal(大于100小于900)

在mysql中实现check的功能,一般是在程序中控制,

或者通过触发器完成。

自增长

字段名整型primary key auto_increment

添加自增长的字段方式

insert into xxx(字段1,字段2.….) values(null,"值'...);

insert into xxx(字段2....) values('值1,"值2'.…);

insert into xxx values(null, "值1',.....)

细节:

1.一般来说自增长是和primary key配合使用的

2自增长也可以单独使用[但是需要配合一个unique]

3.自增长修饰的字段为整数型的(虽然小数也可以但是非常非常少这样使用)

4.自增长默认从1开始,你也可以通过如下命令修改alter

table表名auto increment = xxx;

5. 如果你添加数据时,给自增长字段(列)指定的有值,则以指定的值为准,如果指定了自增长,一般来说,就按照自增长的规则来添加数据

mysql索引

说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,查询速度就可能提高百倍干倍。

注意:

没有索引为什么会慢?因为全表扫描.

使用索引为什么会快?形成一个索引的数据结构,比如二叉树

索引的代价

1.磁盘占用

2.对dml(update(修改) delete(删除) insert(添加))语句的效率影响

索引的类型

1.主键索引,主键自动的为主索引(类型Primary)

create table t1 (

??id int primary key, --主键,同时也是索引,称为主键索引.

name varchar(32));

2.唯一索引(UNIQUE)

create table t2(

id int unique, -- id是唯一的,同时也是索引,称为unique索引.

name varchar(32));

3.普通索引 (INDEX)

4.全文索引(FULLTEXT)[适用于MyISAM]

一般开发,不使用mysql自带额全文索引,开发中考虑使用:全文搜索Solr 和 ElasticSearch (ES)

索引使用

1.添加索引(建小表测试id , name ) index_use.sql

create [UNIQUE] index index_name on tbl_name (col_name[(length)]

[ASC | DESC] ,...…);

alter table table_name ADD INDEX [index_name] (index_ col name..)

2.添加主键(索引)ALTER TABLE表名ADD PRIMARY KEY(列名.…);

3.删除索引

DROP INDEX index name ON tbl_name

alter table table _name drop index index_name;

4.删除主键索引比较特别: alter table t_b drop primary key:

5.查询索引(三种方式)

show index(es) from table name;

show keys from table name;

desc table Name;

小结:哪些列上适合使用索引

1.较频繁的作为查询条件字段应该创建索引

select * from emp where empno = 1

2.唯一性太差的字段不适合单独创建索引,即使频繁作为查询·条件

select * from emp where sex ='男‘

3.更新非常频繁的字段不适合创建索引

select * from emp where logincount =1

4、不会出现在WHERE子句中字段不该创建索引

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:56:33  更:2022-07-20 19:00:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:21:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码