首页 > 数据库 >MySQL数据库笔记

MySQL数据库笔记

时间:2022-09-20 22:36:00浏览次数:68  
标签:-- 数据库 笔记 student MySQL table null select

1. 操作数据库

1.1 创建数据库

create database 数据库名

如果想数据库没有就创建,有就不创建可以执行这句话sql

create database if not exists 数据库名

1.2 删除数据库

drop database 数据库名

如果存在就删除

drop database if not exists 数据库名

1.3 使用数据库

切换数据库

/* 如果你的表名或者字段是一个特殊符号,就需要带`` */
user 数据库名

查看所有的数据库

show database

查看数据库

show database 数据库名

2. 数据库的列类型

数值

  • tinyint 十分小的数据 1个字节
  • smallint 较小的数据 2个字节
  • mediumint 中等大小的数据 3个字节
  • int 标准的整数 4个字节
  • bigint 较大的数据 8个字节
  • float 浮点数 4个字节
  • double 浮点数 8个字节
  • decimal 字符串形式的浮点数 金融计算的时候一般使用decimal

字符串

  • char 字符串固定大小的 0 - 255
  • varchar 可变字符串 0-65535
  • tinytext 微型文本 2^8 - 1
  • text 文本串 2^16 - 1

时间日期

java.util.Date

  • date YYYY-MM-DD 日期格式
  • time HH: mm: sss 时间格式
  • datetime YYYY-MM-DD HH: mm: ss
  • timestamp 时间戳 1970.1.1到现在的毫秒数
  • year 年份表示

null

  • 没有值,未知
  • 注意,不要使用NULL进行运算,结果为NULL

3. 数据库的字段属性

Unsiged:

  • 无符号的整数
  • 声明了该列不能声明负数

zerofll:

  • 0填充的
  • 不足的位数

自增

  • 通常理解为自增,自动在上一条记录的基础上+1(默认)
  • 通常用来设计唯一的主键~index,必须是整数类型
  • 可以自定义设计主键自动的起始值和步长

非空

  • 假设设置为not null,如果不给它赋值,就会报错
  • NULL,如果不填写值,默认就是null

默认

  • default
  • 设置默认的值

4. 操作数据表

4.1 创建数据表

-- comment 注释
-- default 默认值
-- auto_increment 自增

create table `student`(
	`studentno` int(4) not null comment 学号,
    `loginpwd` varchar(20) default null,
    `studentname` varchar(20) default null comment 学生姓名,
    `sex` tinyint(1) default null comment 性别,0或1,
    `gradeid` int(11) default null comment 年级编号,
    `phone` varchar(50) not null comment 联系电话,允许为空,
    `address` varchar(255) not null comment 地址,允许为空,
    `borndate` datetime default null comment 出生时间,
    `email` varchar (50) not null comment 邮箱账号允许为空,
    `identitycard` varchar(18) default null comment 身份证号,
    primary key (`studentno`),
    unique key `identitycard`(`identitycard`),
    key `email` (`email`)
)engine=myisam default charset=utf8;

常用命令

show create database 数据库名 -- 查看创建数据库的语句
show create table 表名 -- 查看数据表的定义语句
desc student -- 显示表的结构

4.2 数据表的类型

-- 关于数据库引擎
-- INNODB 默认使用
-- MYISAM 早些年使用
MYISAM INNODB
事物支持 NO YES
数据行锁定 NO YES
外键约束 NO YES
全文索引 YES NO
表空间的大小 较少 较大,约为2倍

常规使用操作:

  • MyiSam 节约空间,速度较快
  • INNODB 安全性高,事物处理,多表多用户操作

在物理空间存在的位置

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

本质还是文件的存储!

MySQL引擎在物理文件上的区别

  • INNODB在数据库中只有一个*.frm文件,以及上级目录下的ibdata1文件
  • MYISAM对应文件
    • *.frm - 表结构的定义文件
    • *.MYD 数据文件(data)
    • *.MYI 索引文件(index)

设置数据库表的字符编码

charset = utf8

不设置的话,会是mysql默认的字符集编码(不支持中文)

MySQL默认编码是Latin1,不支持中文

在my.ini中配置默认的编码

character-set-server=utf8

4.3 修改、删除数据表

修改数据表

修改数据表名

-- alter table 旧数据表名 rename as 新数据表名
alter table teacher rename as teacher1

新增表的字段

-- alter table 数据表名 add 字段名 列属性
alter table teacher add age int

修改表的字段(重命名,修改约束)

change:字段重命名

# alter table 表名 change 旧列名 新列名 类型
mysql> alter table t1 change number id char(2);

modify:修改列名的类型

# # alter table 表名 modify 列名 类型
alter table t1 modify num int(2);

alter table t1 modify id int(2) not null;
-- 字段重命名
-- alter table 表名 change 字段名 列属性[]
alter table teacher change age varchar(50) 
-- 修改约束
-- alter table 表名 modify 字段名 列属性[]
alter table teacher modify age int

使用modify给现有的主键设置增值

alter table 表名 modify 字段 类型 primary key auto_incrment;

alter table yq modify id int primary key auto_incrment;

注意:modify只能修改列名类型,不能重命名列名,change既能修改列名类型也能重命名列名

删除表的字段

-- alter table 数据表名 drop 字段名
alter table teacher1 drop age1

所有的创建和删除操作尽量加上判断, 以免报错

注意点:

  • ``字段名,使用这个包裹
  • 注释 -- /**/
  • sql关键字大小写不敏感,建议小写
  • 所有的符号全部用英文

5. MySQL数据库管理

5.1 外键

建表的同时创建

constraint 外键名 forengin key (列名) references 数据表 (列名)

给现有的表添加外键约束

alter table 成绩 add constraint FK_成绩_学号11 foreign key(学号) references 学生表(学号)

5.2 DML语言

数据库意义:数据存储,数据管理

DML管理:数据操作语言

  • insert
  • update
  • delete

5.3 添加

-- 添加单个数据
-- insert into 数据表名 values("值1", "值2", ...)
insert into teacher values(1, 'yefeng')
-- 添加多个数据
-- insert into 数据名 values("值1", "值2", ...),("值1", "值2", ...)
insert into teacher values(1, 'yefeng'), (2, 'LXY')

注意事项:

  1. 字段和字段之间使用英文逗号隔开
  2. 字段是可以省略的,但后面的值必须要一一对应,不能少
  3. 可以同时插入多条数据,values后面的值,需要使用隔开

5.4 修改

update 修改谁 (条件)set 原来的值 = 新值

-- 修改学员名字,带了简介
update 'student' set name = 'yefeng' where id = 1

-- 不指定条件的情况下,会改动整张表的内容
update 'student' set name = 'yefeng'

-- 修改多个属性,逗号隔开
update 'student' set name = 'yefeng', password = '12345' where id = 1

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

操作符 含义 范围 结果
= 等于 5=6 false
<> or != 不等于 5<>6 true
>
<
<=
>=
between... and... 在某个范围内容 [2, 5]
and && 5 >1 and 5 < 10 true
or || 5 < 1 or 5 < 10 true

注意:

  • 数据库的列,尽量带上``
  • 条件,筛选的条件,如果没有指定,则会修改所有的列
  • value,是一个具体的值,也可以是一个变量

5.5 删除

delete 命令

语法:delete from 表名 where 条件

-- 删除数据(避免这样写,会全部删除)
delete from 'student'

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

truncate命令

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

-- 清空student表
truncate 'student'

delete 的 truncate的区别

  • 相同点: 都能删除数据,都不会删除表结构
  • 不同点:
    • truncate 重新设置自增列计数器会归零
    • truncate 不会影响事物
delete from 数据表名 -- 不会影响自增
truncate table test -- 自增会归零

了解即可: delete删除的问题, 重启数据库,现象

  • INNODB 自增列会重1开始(存在内存当中的,断点即失)
  • MYISAM 继续从上一个自增量开始(存在文件中的,不会丢失)

6. DQL查询数据

6.1 DQL

(data query language:数据查询语言)

  • 所有的查询操作都用它 select
  • 简单的查询,复杂的查询它都能做
  • 数据库中最核心的语言,最重要的语句
  • 使用最频率最高的语句

6.2 指定查询字段

语法: select 字段, .... from 表

-- 查询全部的学生 select 字段 from 表
select * from student

-- 查询指定的字段
select 'studentID' 'studentName' from student

-- 别名,给结果起一个名字 as 可以给字段起别名,也可以给表起个别名
select 'studentNo' as 学号, 'studentName' 学生姓名 from student as s

-- 函数 Concat(a,b)
select cancat('姓名:' studentName) as 新名字 from student

去重 distinct

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

select distinct '字段列' from 表名

select distinct 'student' from result

数据库的列(表达式)

select version() -- 查询系统版本(函数)
select 100*3-1 as 结果 -- 用来计算(表达式)
select @@auto_increment_increment -- 查询自增的步数 (变量)

-- 学员考试成绩 + 1分 查看
select 'studentno', 'studentresult' + 1 as '提分后' from result

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

6.3 where 条件子句

作用: 检索数据中符合条件的值

逻辑运算符

运算符 语法 描述
and && a and b a&&b 逻辑与
or || a or a||b 逻辑或
not ! not a !a 逻辑非
select studentNO, studentResult from result

-- 查询考试字段在95~100分之间
select studentNO, studentResult from result
where studentResult >= 95 and StudentResult <=100

模糊查询: 比较运算符

运算符 语法 描述
is null a is null 如果操作符为null,结果集为真
is not null a is not null 如果操作符为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 * from student where student like '刘%'

-- 查询姓刘的同学,名字后面只有一个字的
select * from student where student like '刘_'

-- 查询姓刘的同学, 名字后面只有两个字的
select * from student where student like '刘__'

6.4 联表查询 join

-- inner join 
select s.name, t.name '老师名字'  from student s inner join teacher t
on s.tid = t.id 

-- left join 
select s.name, t.name '老师名字'  from student s left join teacher t
on s.tid = t.id 

-- right join 
select s.name, t.name '老师名字'  from student s right join teacher t
on s.tid = t.id 
操作 描述
inner join 如果表中至少有一个匹配,就返回行
left join 会从左表中返回所有的值,即使右表中没有匹配
right join 会从右表中返回所有的值,即使左表中没有匹配

自连接

自己的表和自己的表连接,核心:一张表拆为两张一样的表即可

6.5 分页和排序

分页 limit

语法:select * from 表名 limit 查询起始下标, 显示多少条(下标从0开始)

-- 每页只显示3条数据
select s.id, s.name, t.name '老师名字'  from student s inner join teacher t
on s.tid = t.id order by id desc limit 0, 3

排序 order by

排序: 升序asc,降序desc

select s.id, s.name, t.name '老师名字'  from student s inner join teacher t
on s.tid = t.id order by id desc

7. Mysql函数

数学运算

函数 用法 功能
abs select abs(-8) 绝对值
ceiling select ceiling(9.4) 向上取整
floor select floor(9.4) 向下取正
rang select rang() 返回一个0~1之间的随机数
sing select sing(10) 判断一个数的符号 0-0 负数返回-1,正数返回1

字符串函数

函数 用法 功能
char_length select char_langth("this") 字符串长度
concat select concat('我','爱','你‘) 拼接字符串
insert select insert("我来编程", 1, 2, '超级爱') 查询,从某个位置开始替换某个长度
lower select lower('KUAN') 转换成小写字母
upper select upper('xiao') 转换成大写字母
instr select instr('yefeng', 'e') 返回第一次出现的子串的索引
replace select replace("坚持就能成功", "坚持", "努力") 替换出现的指定字符串
substr select substr("坚持就能成功", 4, 6) 返回指定的子字符串
reverse select reverse(si isht) 反转

时间日期函数

函数 用法 功能
current_date select current_date() 获取当前日期
curdate select curdate() 获取当前日期
now select now() 获取当前的时间

聚合函数

函数 描述
count() 计数
sum() 求和
avg() 平均数
max() 最大值
min() 最小值
... ...

8. 事务

8.1 什么是事务

要么都成功, 要么都失败


  1. SQL执行 A给B转账 A 1000 --> 200 B 200
  2. SQL执行 B收到A的钱 A 800 --> B 400

将一组SQL放在一个批次中去执行~

事务原则:ACID原则 分别是原子性、一致性、隔离性和持久性

原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操

作要么都发生,要么都不发生。

一致性(Consistency)

事务前后数据的完整性必须保持一致。

隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每

一个用户开启的事务,不能被其他事务的操作数据所干

扰,多个并发事务之间要相互隔离。

持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改

变就是永久性的,接下来即使数据库发生故障也不应该对

其有任何影响

脏读:

指一个事务读取了另外一个事务未提交的数据。

在这里插入图片描述

不可重复读:
在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)

页面统计查询值

生成报表的时候,B有人转账进来300(B事务已经提交)

虚读(幻读)
是指在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。

(一般是行影响,如下图所示:多了一行)

set autocommit = 0 -- 关闭事物

set autocommit = 1 -- 开启自动提交

start transaction -- 标记一个事物的开始,从这个之后的sql都在同一个事物内

-- 了解
savepoint 保存点名 -- 设置一个事物
rollback to savepoint 保存点名 -- 回滚到	保存点
release savepoint 保存点名	-- 撤销保存点

9. 索引

9.1 索引的分类

  • 主键索引 (primary key)
    • 唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引 (unique key)
    • 避免重复的列出现,唯一索引可以重复,多个列都可以标识位 唯一索引
  • 常规索引 (key/index)
    • 默认的, index。key关键字来设置
  • 全文索引 (fulltext)
    • 在特定的数据库引擎下才有,MyiSAM
    • 快速定位数据
-- 索引的使用
-- 1.在创建表的时候给字段增加索引
-- 2.创建完毕后,增加索引

-- 显示所有的索引信息
show index from 表名
show index from student
-- 增加一个全文索引(索引名)列名
alter table  school.student add fulltext index 'studentName' ('studentName')

-- explain分析sql执行的状况
explain select * from student -- 非全文索引
explain select * from student where match(studentName) against ('刘')

标签:--,数据库,笔记,student,MySQL,table,null,select
From: https://www.cnblogs.com/lengyingmofeng/p/16712858.html

相关文章

  • Java学习笔记---JDK8新特性(Lambda表达式)
    1.Lambda表达式基础格式:()->{};//()为lambda表达式的参数//->为箭头操作符//{}为lambda方法体lambda表达式结果为一个实例对象,用于直接实例化......
  • 《人工智能》李开复版读书笔记
    前言:本读书笔记大多为摘录,是我认为非常有价值的部分。欲知详情,还请阅读原书。 如今,人工智能已经无处不在。手机上的常见应用,大多使用了人工智能技术,例如图像处理与机器......
  • Vin-Mono论文阅读笔记(二)
    估计器初始化简述单目紧耦合VIO是一个高度非线性的系统,需要在一开始就进行准确的初始化估计。通过将IMU预积分与纯视觉结构进行松耦合对齐,我们得到了必要的初始值。理解:......
  • 2022-9-20 Spring学习笔记
    目录1.Spring1.1JavaBean1.2Spring的优势1.3将对象放入IOC容器配置类赋值的方法根据不同类型的赋值作用域自动装配注解1.4类型转换1.SpringSpring框架是Java应用最广......
  • [MySQL]解决mysql数据库连接报错:is not allowed to connect to this mysql server
    这是因为mysql数据库只允许自身所在的本机器连接,不允许其他机器远程连接。如果是root用户,执行sql语句:usemysql;selecthostfromuserwhereuser='root';如果是l......
  • 刷题笔记(leetcode02-两数相加)
    普通的循环解法,C代码:1/**2*Definitionforsingly-linkedlist.3*structListNode{4*intval;5*structListNode*next;6*};7......
  • C#处理读取使用US7ASCII的oracle数据库中文显示乱码问题
    方式一:(推荐)OracleDataAccessComponents(ODAC)+OleDbConnection该方式无需配置环境变量1、下载ODAC组件,地址为https://www.oracle.com/technetwork/topics/dotne......
  • mysql5.7安装和配置
    mysql下载官网:https://dev.mysql.com/downloads/我是用的是用压缩包然后进行配置下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip......
  • 【Coel.学习笔记】随机化算法:模拟退火与爬山法
    简介模拟退火(\(\text{SimulateAnneal}\))和爬山法是随机化算法,二者的原理都在于通过随机生成答案并检查,把答案逐步缩小在一个可行的区间,尽可能地靠近正确答案。在考场......
  • mysql(9)存储引擎
    MySQL体系结构存储引擎简介存储引擎是基于表的,不是基于数据库的,每个表可以单独指定存储引擎InnoDBInnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之......