MySQL数据库知识点

1.MySQL数据库的常用命令

--启动MySQL服务
net start mysql
--连接数据库
mysql -u root -p123456
--创建数据库
create database 数据库名
--查看所有的数据库
show databases
--切换数据库
use 数据库名
--删除数据库
drop database [if exists] 数据库名
--创建数据库表
CREATE TABLE [IF NOT EXISTS] '表名' (
    '字段名' 列类型 [属性][索引][注释],
    '字段名' 列类型 [属性][索引][注释],
    ...
    '字段名' 列类型 [属性][索引][注释],
    [PRIMARY KEY ('字段名')]
)[表类型][字符串设置][注释]--其中[表类型]ENGINE=INNODB [字符串设置]DEFAULT CHARSET=utf8[]表示可选操作
--查看数据库表
show tables
--退出连接
exit
--终止MySQL服务
net stop mysql

2.数据库的列类型

  (1)数值

  tinyint 十分小的数据 1个字节

  smallint 较小的数据 2个字节

  mediumint 中等大小的数据 3个字节

  int 标准的整数 4个字节 常用的

       bigint 较大的数据 8个字节

       float 浮点数 4个字节

       double 浮点数 8个字节

       decimal 字符串形式的浮点数 金融计算的时候,一般用decimal

  (2)字符串

  char 字符串固定大小的 0-255

  varchar 可变字符串  0-65535  常用的变量 String

  tinytext 微型文本 2^8-1

  text 文本串 2^16-1  保存大文本

  (3)时间日期

  java.util.Date

  date YYY-MM-DD 日期格式

  time HH:mm:ss 时间格式

  datetime YYY-MM-DD HH:mm:ss 最常用的时间格式

  timestamp 时间戳 1970.1.1到现在的毫秒数 

  year年份的表示

  (4)null

  没有值,未知

  注意:不能使用null进行运算,结果为null

3.数据库的字段属性

  (1)Unsigned

  无符号的整数

  声明了该列不能声明为负数

  (2)zerofill

  0填充

  不足的位数,使用0来填充,int(3), 5 ----005

  (3)自增

  通常理解为自增,自动在上一条记录的基础上+1(默认)

  通常用来设计唯一的主键--index,必须是整数类型

  可以自定义设计主键自增的起始值和步长

  (4)非空:null、 not null

  假设设置为not null,如果不给它赋值,就会报错

  NUll,如果不填写值,默认就是null

  (5)默认

  设置默认的值

  sex,默认值为男

4.数据表的类型

  关于数据库引擎

  INNODB 默认使用

  MYISAM 早些年使用

  MYISAM INNODB
事务支持 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间的大小 较小 较大,约为2倍

  常规使用操作

  MYISAM 节约空间 速度较快

  INNODB 安全性高,事务的处理,多表多用户操作

  在物理空间存在的位置

  所有的数据库文件都存在data目录下,一个文件夹就对应一个数据库

  本质还是文件的存储

5.删除修改表

  (1)修改

  修改表名 :alter table 旧表名 rename as 新表名

  例子:alter table teacher rename as teacher1

  增加表的字段:alter table 表名 add 字段名 列属性

  例子:alter table teacher1 add age int(11)

  修改表的字段:

  1)修改约束:alter table 表名 modify 字段名 列属性[]

  例子:alter table teacher1 modify age varchar(11)

  2)字段重命名:alter table 表名 change 旧名字 新名字 列属性[]

  例子:alter table teacher1 change age age1 int(1)

  删除表的字段:alter table 表名 drop 字段名

  例子:alter table teacher1 drop age1

  (2)删除

  删除表(如果表存在再删除):drop table if exists 表名

  例子:drop table if exists teacher1

6.DML语言

  数据库操作语言

  insert、updata、delete

  (1)insert(添加)

--插入语句
insert into ‘表名’(‘字段名1’,‘字段名2’,...)
values(‘值1’),(‘值2’),...
--例:insert into ‘grade’ (‘gradename’) values('大四')
--一般写插入语句,一定要数据和字段一一对应
--插入多个字段
insert into 'grade'('gradename')
values('大二'),('大三')
insert into 'student'('name','pwd','sex')
values('张三','123456','男'),('李四','aaaa','男')

  (2)updata(修改)

--修改学员的名字,带了条件
updata 'student' set 'name'='张三' where id=1;

--不指定条件的情况下,会改动所有表
updata 'student' set 'name'='狂神';

--语法
updata '表名' set '属性'=‘new_value’,... [where 条件]

--修改多个属性,用,隔开
updata 'student' set 'name'='狂神',‘email’='152462455@qq.com' where id=1;

  条件:where 子句 运算符 id等于某个值,大于某个值,在某个区间内修改

操作符 含义 范围 结果
= 等于    
<>或!= 不等于    
>      
<      
<=      
>=      
between...and... 在某个范围内 [2,5]  
and &&与    
or ||或    
--通过多个条件定位数据
updata 'student' set 'name'='长江七号' where 'name'='狂神' and 'sex'=‘女’;

--修改的新值,可以是一个具体的值,也可以是一个变量
updata 'student' set 'birthday'=current_time where 'name'='长江七号' 
and 'sex'=‘女’;

  (3)delete(删除)

  语法:

delete from '表名' [where 条件]
--删除数据,没有条件,会全部删除
delete from 'student'

--删除指定数据
delete from 'student' where id=1;

  truncate命令

  作用:完全清空一个数据库表,表的结构和索引约束不会变  

  语法:truncate table ‘表名’

  delete和truncate的区别

  相同点:都能删除数据,都不会删除表的结构

  不同点:truncate重新设置自增列,计数器会归零

      truncate不会影响事务

      delete不会影响自增

7.DQL语言

  数据查询语言

  所有的查询操作都用它 select

  简单的查询,复杂的查询都能做

  数据库中最核心的语言,最重要的语句

  使用频率最高的语言

  (1)指定查询字段

--查询全部的学生 select 字段 from 表
select * from student
    
--查询指定字段
select 'StudentNo','StudentName' from student

--别名, 给结果取一个名字 as 可以给字段起别名,也可以给表起别名
select 'StudentNo' as 学号,'StudentName' as 学生姓名 from student as s
    
--函数 concat(a,b)(连接字符串)
select concat('姓名:',StudentName) as 新名字 from student

语法:

select 字段,... from 表名

有的时候,列名字不是那么见名知意,我们会起别名,字段名 as 新名字或表名 as 新名字

  (2)distinct(去重)

  作用:去除查询出来的结果中重要的数据,只显示一条

--查询一下有哪些学生参加了考试,成绩
select * from result  --查询全部的考试成绩
select 'StudentNo' from result --查询有哪些学生参加了考试
select distinct 'StudentNo' from result  --发现重复数据,去重
select version()  --查询系统版本(函数)
select 100*3-1 as 计算结果  --用来计算表达式(表达式)
select @@auto_increment   --查询自增的步长(变量)
    
--学员考试成绩+1分查看
select 'StudentNo','StudentResult'+1 as '提分后' from result

数据库中的表达式:文本值,列,null, 函数,计算表达式,系统变量...

select '表达式' from 表名

  (3)where条件子句

  作用:检索数据中符合条件的值
  搜索的条件由一个或者多个表达式组成!结果为布尔值

  逻辑运算符

运算符 语法 描述
and && a and b a&&b 逻辑与
or || a or b a||b 逻辑或
not ! not a !a 逻辑非
--where
  
select 'StudentNo','StudentResult' from result
    
--查询考试成绩在95-100分之间的
select 'StudentNo','StudentResult' from result
where StudentResult>=95 and studentResult<=100
    
--and &&
select 'studentNo','studentresult' from result
where studentResult>=95 && studentResult<=100
    
--模糊查询
select 'studentNo','studentResult' from result
where studentResult between 95 and 100
    
--除了1000号学生以外的同学的成绩
select 'studentNo','studentName' from result
where studentNo!=1000
    
select 'studentNo','studentName' from result
where not studentNo=1000

  模糊查询:比较运算符

运算符 语法 描述
is null a is null  
is not null a is not null  
between a between b and c 若a在b和c之间,结果为真
like a like b SQL匹配,如果a 匹配b,则结果为真
in a in(a1,a2,a3,....) 假设a在a1,或者a2...其中的一个值中,结果为真
 --模糊查询
 --查询姓刘的同学
 --like 结合 %(代表0到任意个字符)  _(一个字符)
   select 'studentNo','studentName' from student
   where studentName like '刘%'
    
 --查询姓刘的同学,名字后面只有一个字符
   select 'studentNo','studentName' from student
   where studentName like '刘_'
    
 --查询名字中间有嘉字的同学  %嘉%
   select 'studentNo','studentName' from student
   where studentName like '%嘉%'
    
 --in(具体的一个或者多个值)
 --查询1001,1002,1003号学员
   select 'studentNo','studentName' from student
   where studentNo in(1001,1002,1003)
        
 --查询学生
   select 'studentNo','studentName' from student
   where address in ('安徽','河南洛阳');

--null not null 
--查询地址为空的学生  为空
  select 'studentNo','studentName' from student
  where address='' or address is null
    
--查询有出生日期的同学  不为空
  select 'studentNo','studentName' from student
  where BornDate is not null
        
--查询没有出生日期的同学,为空 
  select 'studentNo','studentName' from student
  where BornDate is null

  (4)联表查询

--链表查询 join

--查询参加了考试的同学(学号,姓名,科目编号,分数)
select * from student
select * from result

/*思路
1.分析需求,分析查询的字段来自那些表,(多个表——连接查询)
2.确定使用那种连接查询 7种
确定交叉点(两个表中那个数据是相同的)
判断条件:学生表中的studentNo=成绩表中的studentNo
*/
--内连接
select s.studentNo,studentName,subjectNO,studentResult
from student as s
inner join result as r
on s.studentNo=r.studentNo

--right join右连接
select s.studentNo,studentName,subjectNO,studentResult
from student as s
right join result as r
on s.studentNo=r.studentNo

--left join 左连接
select s.studentNo,studentName,subjectNO,studentResult
from student as s
left join result as r
on s.studentNo=r.studentNo


--查询缺考的同学
select s.studentNo,studentName,subjectNO,studentResult
from student as s
left join result as r
on s.studentNo=r.studentNo
where studentResult is null

--思考题(查询参加考试的同学信息,学号,学生姓名,科目名,分数)
/*思路
1.分析需求,分析查询的字段来自那些表,student, result , subject(连接查询)
2.确定使用那种连接查询
确定交叉点
判断条件
*/

select s.studentNo,studentName,subjectName,studentResult
from student as s
right join result as r
on r.studentNo=s.studentNo
inner join subject as sub
on r.subjectNo=sub.subjectNo

  (5)排序

--排序:升序 asc, 降序 desc
--order by 通过那个字段排序
--查询的结果根据成绩降序排序
select s.studentNo,studentName,subjectName,studentResult
from student as s
inner join result as r
on r.studentNo=s.studentNo
inner join subject as sub
on r.subjectNo=sub.subjectNo
where subjectName='数据库结构-1'
order by studentResult desc

  select完整的语法

select [all | distinct]
(*| table.* | [table.field1[as alias1][.table.field2][as alias2]][...])
from table_name[as table_alias]
    [left|right|inner join table_name]  --联表查询
    [where....] --指定结果需满足的条件
    [group by...] --指定结果按照哪几个字段来分组
    [having]  --过滤分组的记录必须满足的次要条件
    [order by...]  --指定查询记录按什么排序
    [limit ([offset.]row_count | row_countOFFSET offset)];
    --指定查询的记录从哪条至哪条

 

 

 

 

上一篇:SpringCloudGateway之filters限流


下一篇:Linux ===> Linux设置临时ip命令