MySQL简单学习

Mysql

JavaEE:企业级java开发,web方面

  1. 前端:页面展示,本质是数据

  2. 后台:连接点,连接数据库,连接前端(控制视图跳转,给前端传递数据)

  3. 数据库:存数据

     

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

MySQL简单学习

操作 描述
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数据库常用函数和查询


下一篇:MySQL