0


MySQL——数据库的操作

基础操作

(1)创建数据库

      create database 数据库名;

     数据库名、表名、列名 都不能和关键字重复。

     sql的关键字是大小写不敏感的

注:1)数据库在创建的时候是不能重复的,此时就可以在创建的时候,加上一个修饰,来应对上述问题; 例如:create database if not exists 数据库名;

此时就不会出现数据库同名报错,发现数据库已经存在,是不会继续创建数据库的。(避免在批量执行的情况下,一条sql语句报错,后续指令无法执行的情况。)

2)创建 数据库 的时候,可以手动指定一下 字符集的

character set 字符集名字/charset 字符集名字

需要再数据库中保存中文,mysql默认的字符集是拉丁文,不支持中文,必须要在创建数据库的时候,手动指定编码方式为支持中文编码(GBK , UTF8)

create database 数据库名字 charset utf8;

(2)查看数据库

     列出当前的mysql服务器上一共有哪些数据库       show databases;

(3)选中数据库 use 数据库名;

(4)删除数据库 drop database 数据库名;

     删除操作,删除的不仅仅是database,而且也删除了database中所有的表,和表里面所有的数据!删除数据库操作,是一个非常危险的操作!!!

数据表的操作

(针对数据表的操作,前提是先 选中数据库)

mysql中支持的类型

整数:int, long, 小数:double, decimal, 字符串:varchar, 时间日期:datetime

(1)创建表

进行表操作的前提,是必须要先能够选中数据库~~

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

如果想让表名/列名和关键字一样,可以使用 反引号 ` 来把表名、列名引起来。

(2)查看所有表(查看当前数据库中的所有表)

show tables;

数据库中的内容,都是持久化存储的,后序重启电脑,数据依然存在。

(3)查看指定表的结构

desc 表名;

(4)删除表

drop table 表名;

删除表的同时,也会把表里的数据给一起删除掉~ 危险操作!!!

删除表的严重性,可能比删除数据库,更严重!!

CRUD 操作

(1)新增

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

此处的值,要和列相匹配。(列的个数和类型)

指定列插入:insert into 表名(列名,列名...) values (值,值...);

此处指插入name,id这一列就会被填充为默认值。(此处默认值为null)

还可以一次插入多行记录~

insert into 表名 values (值,值...),(值,值...)....

这里是提示,就是反馈效果,客户端给服务器发起插入请求,服务器要返回这次插入是否成功~~

一次插入多行记录,相比于一次插入一行,分多次插入,要快不少~

通过select就可以查询到表中的数据~

datetime类型,如何插入呢?

  可以使用一个固定格式的字符串,来表示时间日期

如果想填写的时间日期,就是当前时刻。 SQL提供了一个现成的函数,now()

(2)查询(复杂***)

DECIMAL (3,1) 总长度是3,小数点后1位

①全列查询:select * from 表名; 危险操作!!(*)

*表示“通配符”可以代指所有的列

   这里查询出来之后,服务器通过网络把这些数据返回给客户端,并且在客户端以表格的形式打印出来。

②指定列查询:select 列名,列名.... from 表名;

③查询字段为表达式 不会影响到数据库服务器硬盘上存储的原始数据

一边查询,一边进行计算~~

在查询的时候,写作由列名构成的表达式,把这一列中的所有行都带入到表达式中,参与运算。

查询所有同学语文成绩 -10分 的效果

** 这里的操作不会修改数据库服务器上的原始数据,只是在最终响应的“临时结果”中做了计算**

计算每个同学的总成绩~~

SQL在查询的时候,可以进行一些简单的统计操作。

表达式查询,是 列 和 列之间的运算,把每一行都带入这样的运算中,不是 行 和 行之间

④带别名的查询: select 表达式 as 别名 from 表名;

查询的时候给 列/表达式 指定别名。(给表也能指定别名)

as 别名,可以针对表达式,列,表名

⑤去重:distinct 修饰某个列/多个列

         值相同的行,只会保留一个

多行去重前(名不同):

多行去重后:

⑥查询的时候排序:select 列名 from 表名 order by 列名 asc(升序)/desc(降序);

把行进行排序 不会影响到数据库服务器硬盘上存储的原始数据

明确排序规则:

  1. 针对哪个列作为比较规则
  2. 排序的时候是升序还是降序

order by 指定的列,如果你select的时候没有把这一列查出来,也不影响 排序

order by 还可以针对表达式进行排序

使用别名

指定多个列进行排序,order by 后面可以写多个列 使用,隔开

先按照数学成绩排序,如果数学成绩相同,再按照语文排序

指定列后加desc

⑦条件查询:select 列名 from 表名 where 条件;(遍历这个表的每一行记录,把每一行的数据分别带入到条件中。如果条件成立,这个记录就会被放入结果集合中。如果条件不成立,这个记录就pass)

会指定具体的条件,按照条件针对数据进行筛选

LIKE模糊匹配:

通过一些特殊符号,描述出规则/特征 后续哪些值,符合上述特征。

(1)查询英语不及格的同学及英语成绩

(2)查询语文成绩好于英语成绩的同学

无论有几个列,都可以使用上述运算符来描述条件

(3)查询总成绩在200分一下的同学 (条件查询搭配表达式)

注意: select条件查询执行的顺序:

1)遍历表中的每个记录;

2)把当前记录的值,带入条件,根据条件进行筛选;

3)如果这个记录条件成立,就要保留,进行列上的表达式计算(第三步定义的别名,where是第二步执行的,执行where的时候,total还处于“未定义”的状态)

4)如果有 order by 会在所有的行都被获取之后(表达式也算完了) 再针对所有的结果进行排序。

⑧分页查询:select 列名 from 表名 limit N offset M;

N表示这次查询最多查出几个记录

M表示这次查询的这N个记录,是从第几个下标开始算

(3)修改

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

Set这个词 在计算机里,有两种典型的含义

  1. 设置 getter/setter
  2. 集合 TreeSet/HashSet

计算机中,一个术语往往有多种含义,必须结合上下文来了解这个含义

1)把孙悟空同学的数学成绩变更为80分

Rows matched: where条件 筛选出了一行记录

Changed:修改成功了一行

2)把曹孟德同学的数学成绩变更为60分,语文成绩变更为70分

使用update,可以一次修改多个列 set列 = 值,列 = 值.....

3)把总成绩倒数前三(limit)的同学,数学成绩再加上30分

98.0+30=128.0 不符合前面dicimal(3,1)

4)将所有同学的成绩更新为原来的两倍

update 后面不写任何条件,就是针对所有行都进行修改

8行:所有的行数 实际只修改了7行

警告:show warnings; 查看警告

截断(truncated)

87.5/2 = 43.75 超出了dicimal (3,1) 的范围,于是就进行了截断

null未修改

(4)删除: delete from表名where条件/order by/limit;

1>删除孙悟空同学的考试成绩

2>删除整张表的数据

不指定任何条件,就是删除整个表

和drop table 不一样

  1. drop table是删除了表,也删除了表里的记录
  2. delete 是只删除了表里的记录,表还在(空表)

delete和update都是很危险的操作!!!

delete一旦删除的条件没设置好,就可能把不该删除的给删除掉了

  这里的修改/删除持久生效,都会影响到 数据库服务器 硬盘中的数据~
标签: 数据库 mysql oracle

本文转载自: https://blog.csdn.net/m0_66359935/article/details/143191103
版权归原作者 码奇奇 所有, 如有侵权,请联系我们删除。

“MySQL——数据库的操作”的评论:

还没有评论