当前位置:主页 > 查看内容

数据库---基础知识(1)

发布时间:2021-06-06 00:00| 位朋友查看

简介:注意每条命令后面都要加; 注意日期要加单引号’’,eg:2019-01 01 10:30:00’ 判空is null—不能用 判非空is not null—不能用 一、数据库基本操作 1、显示数据库信息 show databases ; 2、创建数据库 create database 数据库名称 3、选中使用数据库 use 数据……
  • 注意每条命令后面都要加";"
  • 注意:日期要加单引号’’,eg:'2019-01 01 10:30:00’
  • 判空:is null;—>不能用=
  • 判非空:is not null;—>不能用!=

一、数据库基本操作
1、显示数据库信息

show databases;

2、创建数据库:

create database 数据库名称;

3、选中(使用)数据库:

use 数据库名称;

4、删除数据库(最好不要删除):

drop database 数据库名称;

二、数据表操作
1、创建表(注意创建表之前要先选中数据库

create table 表名 (表的结构); //表的结构即表的属性和该属性类型

**注意:**表名最好不要和数据库关键字重复

2、 查看数据表名称

 show tables;  //该命令只能查看表名

3、查看表的具体结构

 desc 表名;   //该命令可查看到表中的具体信息

4、删除数据表(最好不要使用)

drop table 表名;

三、MySQL表的增删改查—“初阶
1、新增

  • 基础插入(插入一条记录的所有列)
 insert into 表名 values(记录);  //一条记录包含了若干个列,即具体信息
  • 一次插入多条记录(括号间要用逗号隔开)
insert into 表名 values
(记录),
(记录),
(记录),
...;
  • 一次插入一条记录的某几个列(显示指定要插入那些列)
insert into 表名(显示指定要插入的列名) values(被指定属性的具体信息)

2、查看表的信息

  • 查看所有列的信息
select * from 表名;
  • 查看指定列的信息
select 列名 from 表名;
  • 将查找结果放到一个表达式中(即通过表达式修改表中内容)
 select 列名+10 from 表名;  //比如将某个列的内容+10
 select 列名1+列名2+... from 表名;  //计算某些属性总和
  select 列名1+列名2+... as 别名 from 表名;  //给总和起个别名 
  • 去重
    select distinct 列名 from 表名
    指定多列去重(都加在distinct之后)时,要保证两列都是重复的时才能去重
  • 排序
    order by(默认升序排序)—>使用asc也是升序
    order by 列名desc 显示加上desc—>降序
    select 列名 from表名 order by列名

order by 列名1desc, 列名1desc 按照多列来排序
null在order by 中被当作最小值,如果不加order by ,对于查询结果的记录之间的顺序,不能有任何预期~~~
注意:null不参与±*/运算
多列排序是在第一列分不出大小时,再按照第二列排,如果分不出大小,不管第二列

  • 条件查询(SQL中的=时等号,不是赋值符)
    select 列名 from表名 where 条件(NuLL会被当成false,不显示)
    where多个条件之间用连接符链接
    注意:不能针对列的别名进行where比较
    and和or优先级(不加括号时):and>or
    =和<=>的区别:第一种不能被筛选出来,第二种可以
  • 范围查询
    a)between and----->等价于and
    b)in—>筛选—>等价于or
  • 使用like进行模糊查找---->根据部分条件找所有—>对字符、字符串、数字都适用
    eg:where 列名 like ’ ’
    通配符:%(可代表多个字符),_(每个下划线只代表一个字符)
    a)以t开头:‘t%’
    a)以t结尾:‘%t’
    a)包含t:‘%t%’
    注意:模糊匹配效率较低,实际不常用
  • 分页查询(将多条记录分页展示)
    limit
    select * from 表名 limit 展示数据行数 offset N
    N 表示从第N条数据开始查找

3、修改 update
指定修改某些行、某些列
update 表名 set 修改数据 where 条件(针对什么样的行进行修改)

例如:将Tom的语文成绩修改为99
update set chinese=90 where name=‘tom’

注意:不加where,就是修改了该列所有数据
set 多个列时,用逗号隔开

decimal(3,1)–>共三位有效数字,小数点之后有一位

4、删除
只要指定删除复合条件的行就行
delete from 表名 where 删除条件
如果没有where条件,删除所有数据,变成一个空表,与直接删除表不一样
四、数据库备份:
1、MySQL支持bin log
2、备份 mysqldump工具
3、基于磁盘文件进行还原

五、数据库约束
1、约束类型(针对列)
1)*not null :*指定某一列不能存储null值
2)*unique :*规定某一列的某行必须有唯一值
3)*default :*规定没有给列赋值时的默认值
default 指定的默认值,会在按列插入时生效(按列插入但是未被指定的列,就是按照默认值来插入)
如果手动给某一列设为null,不会触发默认值效果
4)primary key :—>"主键 " not null和unique 的结合,确保某列(或两个列或多列的结合)有唯一标识,即不能为空,也不能重复

设计表的时候,一般都需要指定一个主键**(只能指定一个)**,主键就是一条记录的唯一标实
自增主键:primary key auto_increment-–每次插入主键的值都会自动加1(应用于给一组数据生成一个唯一的id ),删除掉某条记录再加入,主键还是自增一次

5)foreign key :—>“外键” 保证一个表中数据匹配另一个表中的值的参照完整性

语法:foreign key (字段名) references 主表(列)
注意:外键要对主表的主键进行约束

 create table class(id int primary key ,name varchar(50));
 create table student(id int primary key auto_increment,name varchar(50),classid int, foreign key (classid) references class(id));

外键约束,就是要求当前表里的classid字段的值,必须在class表中的id中出现过才可以
**注意:**如果class表中的id已经被student中的classid用到了,那么就不能删除class表中的对应记录,更不能删除整个class表

六、数据库的设计
1、定义:“数据库设计”,其实就是设计表,根据当前问题的场景,分析需要创建出哪些问题的场景,需要创建出那些表,表中应该都有那些字段,以及这些字段中的约束是怎样的
2、基本思路:从具体问题的场景中,先提取出"实体"(即对象),然后再找出多个"实体"之间的关联关系(一对一/一对多/多对多/无关)
3、举例:
问题场景:描述学生的考试成绩
分析:
1)实体:学生、课程、成绩
2)三者之间的关联关系
学生和课程:多对多
学生和成绩:一对多(不考虑同分)
课程和成绩:没关系 (两者之间没有直接的关系,而是靠学生为媒介关联起来的)
3)设计表
学生表:(id,name)
课程表:(id,name)
成绩表:(student_id,course_id,score)—>通过成绩表将学生表和课程表联系起来

六、MySQL表的增删改查—“进阶
1、新增—>将查询结果作为新增的内容(插入和查找的结合)

insert into 表二名称 select 表一列名 from 表一;

2、聚合查询—>“聚合”指的是**“行”**之间的聚合,和“列”无关
1)聚合函数
count(),sum(),avg(),max(),min()
注意:除count之外,其他四个对于不是数字的没有意义
a) count—求行数

select count(*) from 表名 ;  //先执行select * from 表名,再数一数结果中有多少行

**注意:**当select count(某一列)时,如果当前列里的值为null,则不会被计数到其中

b)sum—求和
举例:查询所有学生语文的总成绩

select sum(chinese) from student;

扩展:查看警告信息

show warnings;

c)avg—求平均值
举例:查询所有学生语文成绩的平均值

select avg(chinese) from student;

d)max—求最大值
举例:

select max(chinese) from student;

e)min—求最小值
举例:

select min(chinese) from student;

2)group by 子句
针对某一列,按照列里面的内容,将这些记录中值相同的分在一组
举例:

select 要被分组的列,所求值 from 表名 group by要被分组的列;

//举例:求公司中不同岗位薪资的平均值
select role,avg(salary) from 表名 group by role;

**注意:**group by 往往要搭配聚合函数来使用(先分组,再聚合),如果不是用聚合函数,此时尝试查询一些不重复的类,可能结果就不太科学

3)条件筛选—having—>要和group by搭配使用

  • 使用group by分组之前,按条件筛选记录,使用where
  • 使用group by分组之后,按条件筛选,就要使用having
    举例:
select 要被分组的列,所求值 from 表名 group by要被分组的列 having 条件;

//举例:求公司中不同岗位薪资的平均值,并筛选出平均薪资低于1500的岗位
select role,avg(salary) from 表名 group by role having avg(salary)<1500;
;原文链接:https://blog.csdn.net/qq_45277758/article/details/115407534
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐