MySQL简单学习
2021/5/9 19:25:28
本文主要是介绍MySQL简单学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Mysql
JavaEE:企业级java开发,web方面
-
前端:页面展示,本质是数据
-
后台:连接点,连接数据库,连接前端(控制视图跳转,给前端传递数据)
-
数据库:存数据
DBMS
DataBasic ManageSystem:数据库管理系统
数据库:存储数据
数据库管理系统:管理和操作数据
MySQL本质是关系型数据库管理系统,将数据保存在不同的表中,MySQL所使用的SQL语言适用于访问数据库的最常用标准化语言。开源的数据库软件,体积小、速度快、总体拥有成本低
连接数据库
1、命令行连接
mysql -uroot -p123456 --连接数据库 update mysql.user set authentication_string=password('123456') where user='root' and Host='localhost'; --修改密码 flush privileges; --刷新权限 --------------------------------------------------------------------- --所有的语句都是分号结尾 show databases; --查看所有的数据库 mysql> use school --use 数据库名 来切换数据库 Database changed show tables; --查看数据库中所有的表 describe students; --describe 表名 显示数据库中所有的表的信息 create database school; --创建一个数据库名,create database 数据库名称 exit; --推出连接 -- 单行注释(SQL的本身注释) /**/多行注释
操作数据库
操作数据库>操作数据库中的表>操作数据库中表的数据
mysql关键字不区分大小写
操作数据库
1、创建数据库
create database if not exists school(库名)
2、删除数据库
drop database if exists school(库名)
3、使用数据库
use 库名
如果表名或者字段名是一个特殊字符,需要带 ``
4、查看数据库
show databases; --查看所有的数据库 show tables; --查看数据库中所有的表
数据库的列类型
数值
整数:
-
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: ss 时间格式
-
datetime YYYY-MM-DD HH: mm: ss 最常用的时间格式
-
timestamp 时间戳 1970.1.1到现在的毫秒数 也较为常用
-
year 年份表示
null
-
没有值,未知
-
注意:不要使用NULL进行运算
数据库的字段属性
Unsigned:
-
不能声明为负数
-
无符号的整数
zerofill:
-
0填充的
-
不足的位数使用0填充 比如:int(3) 5 会变成005
自增
-
通常理解为自增,自动在上一条记录的基础上+1(默认)
-
通常用来设计唯一的主键,并且必须为整数类型
-
可以自定义主键自增的起始值和步长
非空
-
假设设置为非空,如果不给它赋值,就会报错
默认
-
设置默认的值
格式
CREATE TABLE IF NOT EXISTS ‘student’ ( ‘id’ INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号', ‘字段名’(单引号为中文) 列类型 属性 索引 注释(注释和默认值的单引号为英文) )
常用命令
-
查看创建数据库的语句
show create database school
-
查看数据库中表的数据
show create table student
-
查看表的具体信息
desc student
数据表的类型
-- 关于数据库引擎 /* 默认使用INNODB MYISAM 早些年使用 */
修改和删除表
修改
修改表名
ALTER TABLE ‘student’ RENAME AS teacher ALTER TABLE 旧表名 RENAME AS 新表名
增加表的字段
ALTER TABLE teacher ADD age INT(2)
修改表的字段(重命名,修改约束)modify:修改 change:改变
ALTER TABLE teacher MODIFY age VARCHAR(11) -- 修改约束 ALTER TABLE 表名 MODIFY 字段名 列属性() ALTER TABLE teacher CHANGE age age1 INT(2) -- 字段重命名 ALTER TABLE 表名 CHANGE 旧名字 新名字
删除表的字段
ALTER TABLE teacher DROP age1 ALTER TABLE 表名 DROP 字段名
删除
删除表
DROP TABLE IF EXISTS teacher --DROP TABLE IF EXISTS 表名
DML语言
数据库管理语言:Database Manage Language
插入语句
-
insert into 表名(‘字段名’)values ('值'),数据和字段一一对应
INSERT INTO teacher(‘name’) VALUES('学习')
-
插入多个字段
--每个字段对应一个数据 INSERT INTO teacher(`‘password’`,`’sex‘`,`‘birthday’`) VALUES ('111222333','女','1999:11:4') --一个字段多个数据 INSERT INTO teacher(`‘password’`) VALUES (‘111222333’),('222333'),('333444')
注意事项
1、字段和字段之间使用英文逗号隔开
2、可以同时插入多条数据,values后面的值,需要使用,用逗号隔开 values(),(),(),()
修改
语法:UPDATE 表名 SET 修改的字符名=‘修改的值’ WHERE 条件 UPDATE `teacher` SET `’name‘`='修改1' WHERE `‘id’`=2 -- 不指定条件的情况下,会改动所有表 修改多个属性,用逗号隔开 UPDATE `teacher` SET `’name‘`='修改2',`‘email’`='1903467504@qq.com' WHERE `‘id’`=2 通过多个条件定位 UPDATE `teacher` SET `’name‘`='修改3' WHERE `‘password’`='123456' AND `’name‘`='学白'
where 的几个特殊条件:
between 2 and 5:2到5之间,包括2和5
and:表示&&
OR:表示||
删除
delete命令
--删除数据 DELETE FROM ‘student’ --删除指定数据 DELETE FROM 'student' WHERE 'id'=2
TRUNCATE命令
作用:完全清空一个数据库表,表的结构和索引约束不会变
TRUNCATE 'student'
delete和truncate的区别
-
相同点:都能删除数据,都不会删除表结构
-
不同点:truncate之后自增会归零、delete不会影响自增
truncate不会影响事物
DQL语言
数据库查询语言:Database Query Language
关键字:select
指定查询字段
-- 查询学生的全部信息 select 字段名 from 表 *表示全部 SELECT * FROM student SELECT * FROM grade -- 查询指定字段 SELECT `studentno`,`subjectno` FROM result -- 别名,给查询结果起一个名字(关键字as) 格式:select 字段名 AS 字段别名,...from 表名 AS 表的别名 SELECT `studentname` AS 学生姓名,`sex` AS 学生性别 FROM student AS 学生表 -- 函数 concat(a,b):拼接 SELECT CONCAT('学生姓名:',studentname) AS 新格式 FROM student
语法:select 字段,... from 表
有的时候,列名字不是那么的见名知意,我们可以起别名(AS) 字段名 AS 别名 表名 AS 别名
查询MySQL系统版本
SELECT VERSION()
加减乘除查询
SELECT 100*2/4+15-20 AS 计算的结果 -- 加减乘除查询
去重
关键字:distinct
作用:去除select语句查询出来的的结果中重复的数据,重复的数据只显示一条
SELECT DISTINCT 'studentNo' FROM result -- 发现重复数据,去重
数据库的列
-- 查询MySQL系统版本 SELECT VERSION() -- 查询自增的步长 SELECT @@auto_increment_increment
数据库中的表达式:文本值,列,NULL,函数计算表达式,系统变量
SELECT 表达式 from 表
where条件子句
作用:检索数据中符合条件的值
逻辑运算符
运算符 | 语法 | 描述 |
---|---|---|
and && | a and b | 逻辑与,两个都为真,结果为真 |
or || | a or b | 逻辑或,其中一个为真,则结果为真 |
Not !(取反) | not a | 逻辑非,真为假,假为真 |
-- 查询考试成绩在80-100分的学生 SELECT `studentno`,`studentresult` FROM result WHERE studentresult>=80 AND studentresult<=100 -- 模糊查询(区间) SELECT studentno,studentresult FROM result WHERE studentresult BETWEEN 90 AND 100 -- 除了1000号学生之外的同学的成绩 SELECT studentno,studentresult FROM result WHERE studentresult !=95 SELECT studentname,sex,phone FROM student WHERE NOT sex=1
模糊查询
比较运算符
运算符 | 语法 | 描述 |
---|---|---|
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,a3...其中的某一个值中,结果为真 |
-- like关键字 %(代表0到任意个字符) _(代表一个字符) -- 查询姓张的同学 SELECT `studentno`,`studentname`,`address`,`sex` FROM student WHERE studentname LIKE '张%'; -- 查询名字当中有强的同学 SELECT `studentno`,`studentname`,`address`,`sex` FROM student WHERE studentname LIKE '%张%'; -- In关键字 -- 查询课程时长在100和110小时的克 SELECT `subjectno`,`subjectname`,`classhour` FROM `subject` WHERE classhour IN (110,100) -- null和not null
联表查询
Join对比
left join、inner join、right join
操作 | 描述 |
---|---|
Inner join | 如果表中至少有一个匹配,就返回行 |
left join | 会从左表中返回所有的值,即使右表中没有匹配 |
right join | 会从右表中返回所有的值,即使左表中没有匹配 |
-- ====================联表查询===================== -- left join Inner join Right join -- join (连接的表)on (判断条件) 连接查询(这是个语法) -- where 等值查询(这是个条件) -- Inner join SELECT s.`studentno`,`studentname`,`address`,`subjectno`,`studentresult` FROM student AS s INNER JOIN result AS r ON s.studentno=r.studentno -- Left join SELECT s.`studentno`,`studentname`,`address`,`subjectno`,`studentresult` FROM student AS s LEFT JOIN result AS r ON s.studentno=r.studentno -- Right join SELECT s.`studentno`,`studentname`,`address`,`subjectno`,`studentresult` FROM student AS s RIGHT JOIN result AS r ON s.studentno=r.studentno -- 查询 SELECT s.`studentno`,`studentname`,`address`,`subjectno`,`studentresult` FROM student AS s LEFT JOIN result AS r ON s.studentno=r.studentno WHERE studentresult IS NULL -- 查询参加了考试的同学信息,包括学号、学生姓名、科目名、分数 /* 思路: 1、分析需求,分析查询的字段来自哪些表 2、确定使用哪种连接查询 3、确定交叉点(这两个表中的哪个数据是相同的) */ SELECT s.`studentno`,`studentname`,`address`,r.`subjectno`,`studentresult`,`subjectname` FROM student AS s RIGHT JOIN result AS r ON s.studentno=r.studentno INNER JOIN `subject` AS sub ON r.subjectno=sub.subjectno
查询数据的语法
1、查询数据:select
2、FROM 表 join 连接的表 on 交叉条件
3、假设存在一种多张表查询,先查询两张表再慢慢查询
这篇关于MySQL简单学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-25MySQL报错Duplicate entry '0' for key 'PRIMARY'
- 2024-05-29阿里 Canal 实时同步 MySQL 增量数据至 ClickHouse 数据库
- 2024-05-24在Linux下管理MySQL的大小写敏感性
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享