MySql基础--增删改查

本文介绍了数据库的作用,重点讲解了MySQL数据库中的表结构,包括数据类型、约束条件、创建、删除和修改方法。此外,详细阐述了MySQL的基础增删改查操作,涉及条件查询、分组查询、关联查询以及子查询的使用,包括各种SQL函数和查询技巧。
摘要由CSDN通过智能技术生成

1.什么是数据库?

2.数据库有什么作用?

3.MySQL--Table(表)

3.1表中的数据类型

3.2表中的约束

3.3表的创建、删除、修改

4.MySQL基础--增删改查

4.1增添数据、修改数据、删除数据

 4.2查询数据

 4.2.1条件查询

4.2.2分组查询

4.2.3关联查询

4.2.4子查询


1.什么是数据库?

数据库顾名思义就是我们存储数据的一个仓库,数据库分为了关系型数据库如(MySQL、Oracle、SQL Server)等、非关系型数据库如(MongoDB、Cassandra、Redis)等、内存数据库(Redis、Memcached)等、图数据库(Neo4j、ArangoDB)等。总的来说,不同类型的数据库适用于不同的数据存储和查询需求,根据项目的要求选择适合的数据库类型即可。本章我们主要将Mysql数据库。

2.数据库有什么作用?

数据库可以存储大量的数据,并且提供了一种结构化的方式来保存数据,是数据可以被轻松的存取,更新,管理等。我们在使用java编程语言时,可以通过导入Mysql包注册JDBC驱动连接到数据库,在java中就可以用sql语句对数据库进行增删改查,保存到数据库中的数据也不会因为关机而消失。在数据库中的数据也可以备份,数据也更加安全。

当我们在做一个项目之前,需要想到用户的需求,然后就要先构思数据库怎么写,防止数据库的冗余等各种问题。有了实际的后端前端的内容才有用处,不然就是空壳。

3.MySQL--Table(表)

3.1表中的数据类型

在学习增删改查之前我们首先要了解表,因为增删改查是在表的基础上完成的。再创建一个表之前我们要知道表中的数据类型,整数型由字节从小到大(1、2、3、4、8)来排序TINYINT、SAMLLINT、MEDIUMINT、INT、BIGINT。浮点类型为DECIMAL。字符类型有TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT也是逐渐增大的较大的字符类型可以存储文章、博客等长度可变。char()varchar()也是存储字符类型,char是一种固定长度的字符数据类型,长度在开始时定义,字符长度不够则会用空格补满,varchar是一种可变的字符串类型,长度也要开始时定义,比char更节省存储空间。还有date、datetime等数据类型。

3.2表中的约束

在数据中还有一些对数据的约束条件,如主键(PRIMARY KEY):在表中代表唯一的一条记录,不能为空,不能重复。NOT NULL数据不能为空、UNIQUE唯一性约束(不能重复如学号)、CHECK()检查约束设置条件比如age INT(3) Check(age>18)。comment“注释” 

3.3表的创建、删除、修改

CREATE TABLE 表名(列名  数据类型  【约束】【默认值】 【注释】......)

例如:

创建数据库时一定要创建编码这里我用的是utf-8

删除表:  DROP TABLE [if exists]  表名

修改表:RENAME TABLE  旧表名  TO  新表名

复制表结构:CREATE TABLE 新表名 LIKE 被复制表名

4.MySQL基础--增删改查

4.1增添数据、修改数据、删除数据

增添数据:

方式 1: INSERT INTO 表名 ( 1, 2……, n) VALUES( 1, 2….., n);//这种方式最常用
方式 2: INSERT INTO 表名 set 列名 1= 1,.. 列名 n= n;//一半给某
方式 3: INSERT INTO 表名 ( 1, 2……, n) VALUES( 1, 2….., n),( 1, 2….., n);
方式 4:INSERT INTO 表名 ( 1, 2……, n) 查询语句 ( 查询的列数与插入列数匹配 );

如图所示的插入四种方式用法,最后一个插入相当于把创建的test_user表中的数据插入到t_user中去(列要一致) 

更新数据:UPDATE 表名  SET 列名=‘新值’  WHERE(条件)id=2;如果不写条件则会把列全修改

删除数据:DELETE FROM 表名 WHERE(条件)注意主键id自增删除后不会重新排序!

TRUNCATE TABLE 表名;清空整张表

 4.2查询数据

语法:SELECT 查询列表 FROM 表名

特定列查询 :select column1,column2 from table
全部列查询 : select * from table
算数运算符 :+ - * /
排除重复行 : select distinct column1,column2 from table (是对查询结果中所有列相同则自动删除)
查询函数: select 函数 ; / 例如 version()
函数分为单行函数和多行函数
单行函数:会对查询中的每一行数据进行处理
单行函数中的字符处理
length() :获取参数值的字节个数
char_length() 获取参数值的字符个数
concat(str1,str2,.....) :拼接字符串
upper()/lower() :将字符串变成大写 / 小写
substring(str,pos,length) :截取字符串 位置从1开始(java中从零开始)
instr(str, 指定字符 ) :返回子串第一次出现的索引,如果找不到返回 0
trim(str) :去掉字符串前后的空格或子串 ,trim( 指定子串 from 字符串 )
lpad(str,length, 填充字符 ) :用指定的字符实现左填充将 str 填充为指定长度
rpad(str,length, 填充字符 ) :用指定的字符实现右填充将 str 填充为指定长度
replace(str,old,new) :替换,替换所有的子串
单行函数中的逻辑处理
(case when 条件 then  ' 结果1'  else  '结果2'  end)as 别名 ; 可以有多个when
ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回
原本的值
if函数:if else的 效果 if(条件,结果1,结果2)
单行函数中的数学函数
round( 数值 ) :四舍五入
ceil( 数值 ) :向上取整,返回 >= 该参数的最小整数
floor( 数值 ) :向下取整,返回 <= 该参数的最大整数
truncate( 数值 , 保留小数的位数 ) :截断,小数点后截断到几位
mod( 被除数 , 除数 ) :取余,被除数为正,则为正;被除数为负,则为负
rand() :获取随机数,返回 0-1 之间的小数
单行函数中的日期函数
now() :返回当前系统日期 + 时间( 年月日时分秒 )
curdate() :返回当前系统日期,不包含时间( 年月日
curtime() :返回当前时间,不包含日期( 时分秒 )
可以获取指定的部分,年、月、日、小时、分钟、秒
YEAR( 日期列 ),MONTH( 日期 ),DAY( 日期 ) ,HOUR( 日期 ) ,MINUTE( 日期 )
SECOND( 日期 )
str_to_date( 字符串格式日期 , 格式 ) :将 日期格式 的字符转换成指定格式的日期 例如select str_to_date('2003-3-3','%Y-%m-%d') from 表
date_format( 日期列 , 格式 ) :将日期转换成字符串
datediff(big,small) :返回两个日期相差的天数
日期格式图

分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类: sum 求和、 avg 平均值、 max 最大值、 min 最小值、 count 计数
(非空)如果在某一行中的某一个数据(height)为空,则count(height)就不会计这个数据
1.sum avg 一般用于处理数值型 max,min,count可以处理任何类型
2. 以上分组函数都忽略 null
3.count 函数的 一般使用count(*)用作统计行数
4. 和分组函数一同查询的字段要求是 group by 后的字段

 4.2.1条件查询

使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。
语法 :select < 结果 > from < 表名 > where < 条件 >
比较
=, != <>, >, <, >=, <=
逻辑运算
and
or
not
LIKE :是否匹配于一个模式 一般和 通配符搭配 使用,可以判断字符型数值
或数值型. 如库里 则库%
通配符: % 任意多个字符
between and 两者之间, 包含临界值【】
in 判断某字段的值是否属于in列表中的某一项
IS NULL(为空的)或 IS NOT NULL(不为空的)
UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]
UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,
mysql 会把所有的记录返回,且效率高于union 。( 两个语句查询的列数必须相等
排序
查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC
asc代表的是升序,desc代表的是降序,如果不写,默认是升序
order by子句中可以支持单个字段、 多个字段(height  asc,reg_time asc)
数量限制(分页功能)
limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)
SELECT * FROM table LIMIT offset rows;
SELECT * from table LIMIT 0,5 ; (0,1,2,3,4)起始位置和查询个数

4.2.2分组查询

分组在一些统计场景中,按照某一个条件进行区分。统计时,按照性别、班级、年纪、部门等区分

语法:
select 分组函数,列(要求出现在 group by 的后面)
from
[where 筛选条件 ]
group by 分组的列表
[having 分组后的筛选 ]
[order by 子句 ]

4.2.3关联查询

外键:引用另外一个数据表的某条记录。
外键列类型与主键列类型保持一致
数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键
(foreign key)建立起来的。
create table student(
id int not null auto_increment primary key,
num int,
name varchar(10)
majorid int,
CONSTRAINT 约束名 foreign key(majorid ) references major(id)
);
约束名规则:
例:FK_ForeignTable_PrimaryTable_On_ForeignColumn
多对多:学生选课
内连接 (inner join)
把满足了条件的两张表中的交集数据查询出来
语法: Select 结果 from 1 ,表 2 where 1.column1 = 2.column2
如图所示

解释:如图两种查询方式,第一种查询方式就是内关联查询,在student s是对student起别名省略了as,这样的方式可以避免在查询name时不知道是哪个表中的name而引起报错,第二种查询方式是先对两个表进行了笛卡尔积,再从笛卡尔积后的表中筛选出s.majorid=m.id的条件,效率更慢。 

多表关联
  左外连接 (left join)
select 结果 from
1 left join 2 on
1.column1 = 2.column2

解释:内连接如果外键为空则这一行不会被查询出来,左外连接即使外键为空也会被查询出来。

多表关联
 右 外连接 (left join)
select 结果 from
1 right join 2 on
1.column1 = 2.column2

解释:外键的中有值及时其他列都为空也可以被查询出来。

多表关联 GROUP_CONCAT(C.NAME)分组连接字符串

4.2.4子查询

含义:出现在其他语句中的 select 语句,称为子查询或内查询;外部的查询语句,称为主查询或
外查询 .
分类:
按子查询出现的位置:
from 后面:支持表子查询
where :支持标量子查询,列子查询
按功能、结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
表子查询(结果集一般为多行多列)

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值