Mysql入门(一)

MySQL

1 初始MySQL

JavaEE: 企业级Java开发 web

前端(页面:展示 数据)

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

数据库(存数据,txt,excel,word)

只会写代码,学好数据库,基本混饭吃
操作系统  数据结构与算法,当一个不错的程序员
离散数学 数字电路 体系结构 编译原理 +实战经验 ,高级程序猿--优秀的程序猿

1.1 为什么学数据库

  1. 岗位需求
  2. 现在的世界,大数据时代,得数据者得天下
  3. 被迫营业:存数据,去IOE
  4. 数据库是所有软件体系中最核心的存在 DBA

1.2 什么是数据库

studentNostudentNamestudentAge
1001Tom3
1002Jerry5

数据库:(DB,DataBase)

概念:数据仓库,软件,安装在操作系统(Windows,Linux,mac)之上,SQL,可以存储大量的数据

作用:存储数据,管理数据

1.3 数据库分类

关系型数据库:(SQL)

  • MySQL, Oracle, Sql server, DB2, SQLLite
  • 通过表和表之间,行与列之间的数据进行数据的存储。学员表,考勤表,…

非关系型数据库:(NoSQL) Not Only SQL

  • Redis, MongDB
  • 非关系型数据库,对象存储:通过对象的自身的属性来决定。

DBMS(数据库管理系统)

  • 数据库管理软件,科学有效地管理我们的数据。维护和获取数据。
  • MySQL,数据库管理系统

1.4 MySQL简介

MySQL是一个关系型数据库管理系统

前世:瑞典MySQL AB 公司

今生:属于Oracle旗下产品

MySQL是最好的RDBMS(Ralational DataBase Management System,关系型数据库管理系统)应用之一。

开源的数据库设计

体积小,速度快,总体拥有成本低,招人成本低,所有人必须会~

中小型网站、或者大型网站,集群!

官网:MySQL :: Download MySQL Community Server

安装建议:

  1. 尽量不要使用exe,注册表
  2. 尽可能使用压缩包安装~

1.5 安装MySQL

VX公众号找的教程

1.6安装sqlyog

  1. 创建连接

在这里插入图片描述

  1. 新建数据库
  2. 新建表

在这里插入图片描述

  1. 打开表

  2. 添加多条记录

    在这里插入图片描述

1.7 连接数据库

命令行连接!

mysql -u root -p --连接数据库
Enter password:
             --修改用户密码
             --刷新权限
             
---------------------------------------
--所有的语句都使用分号结尾
show databases;  --查看所有的数据库

mysql> use school;--使用use命令切换数据库
Database changed

mysql> show tables;--查看数据库中所有的表
+------------------+
| Tables_in_school |
+------------------+
| student          |
+------------------+
1 row in set (0.00 sec)

mysql> describe student;--显示数据库中所有的表的结构信息
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(10)      | NO   | PRI | NULL    |       |
| name  | varchar(100) | NO   |     | NULL    |       |
| age   | int(3)       | NO   |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> create database study;  --新建一个数据库
Query OK, 1 row affected (0.01 sec)

mysql> use study; --使用数据库
Database changed

mysql> show tables;  --空的表
Empty set (0.00 sec)

exit;  --退出连接
--单行注释(sql本身的注释)
/*   sql多行注释
databases
ad
*/

**数据库 xxx 语言 ** CRUD CV程序猿 API程序猿 CRUD程序猿!(业务!)

DDL 定义

DML 管理

DQL 查询

DCL 控制

2 操作数据库

操作数据库---->操作数据库中的表----->操作数据库中的表的数据

2.1 操作数据库(了解)

mysql语法不区分大小写

[]可选

{}必选

  1. 创建数据库

    CREATE DATABASE [IF NOT EXISTS] study;
    
  2. 删除数据库

    DROP DATABASE IF EXISTS study
    
  3. 使用数据库

    --tab键的上面 如果你的表名或者字段名是一个特殊字符,就需要带``     USE `school`
    USE school
    SELECT `user` FROM student;
    
  4. 查看数据库

    show databases;  --查看所有的数据库
    

对比sqlyog的可视化操作;

学习思路:

  • 对照sqlyog可视化历史记录查看sql
  • 固定的语法或关键字必须要强行要记住

2.2 数据库的列类型

  1. 数值

    • tinyint 十分小的数据, 只占一个字节
    • 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 YYYY-MM-DD 日期格式
    • time HH : mm: ss 时间格式
    • datetime YYYY-MM-DD HH: mm: ss 最常用的时间格式
    • timestamp 时间戳 1970.1.1到现在的毫秒数!也较为常用
    • year 年份表示
  4. null

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

2.3 数据库的字段属性(重点)

  • unsigned: 无符号整数,声明了该列不能为负数

  • zerofill: 0填充,不足的位数使用0填充, int(4) 5 0005

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

  • 非空: NULL, NOT NULL 设为not null,如果不赋值,就会报错。如果设为null,默认值为null!

  • 默认: 设置默认的值,sex ,默认值为男

    /*
    每一个表都必须存在以下五个字段,做项目用的,表示一个记录存在意义!
    id 主键
    `version`  乐观锁
    is_delete  伪删除
    gmt_create  创建时间
    gmt_update   修改时间
    */
    

MySQL中数据类型的长度问题总结_QZP51ZX的博客-CSDN博客_mysql中数据类型的长度问题总结

2.4创建数据库表

-- 目标:创建一个school数据库
-- 创建一个学生表,使用sql语句
-- 学号int,登录密码varchar(20),姓名,性别varchar(2),出生日期(datetime),家庭住址,email
-- 注意点:使用英文(),表的 名称 和字段 尽量使用··括起来
-- auto_increment 自增
-- 字符串使用单引号括起来
-- 所有的语句后面加,(英文的),最后一个字段不用加
-- primary key 主键 一般一个表只有一个唯一的主键
CREATE TABLE IF NOT EXISTS `student`(
    `id` INT(4)  NOT NULL AUTO_INCREMENT COMMENT '学号' ,
    `name` VARCHAR(30) NOT NULL DEFAULT '匿名'  COMMENT '姓名',
    `pwd`   VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT  '密码',
    `gender` VARCHAR(2) NOT NULL  DEFAULT '男'  COMMENT '性别',
    `birthday`  DATETIME DEFAULT NULL COMMENT '出生日期',
    `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
    `email`  VARCHAR(50)  DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (`id`)
)ENGINE INNODB DEFAULT CHARSET=utf8

格式

CREATE TABLE [IF NOT EXISTS] `表名`(
    `字段名`  列类型[属性] [索引] [注释],
    `字段名`  列类型[属性] [索引] [注释],
    `字段名`  列类型[属性] [索引] [注释],
    ....
    `字段名`  列类型[属性] [索引] [注释]
)[表类型] [字符集设置] [注释]

常用命令

SHOW CREATE DATABASE `school`  -- 查看创建数据库的语句
CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */

SHOW CREATE TABLE `student`  -- 查看student数据表的定义语句
CREATE TABLE `student` (
  `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
  `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
  `gender` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
  `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
  `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
  `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

DESC `student`  -- 显示表的结构

在这里插入图片描述

2.5 数据表的类型((p11)

-- 关于数据库引擎
/*
innodb 默认使用
myisam  早些年使用
*/
MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引不支持支持
表空间大小较小较大 约为MYISAM的2倍

常规使用操作:

  • MYISAM 节约空间 速度较快
  • INNODB 安全性高,事务的处理,多表多用户操作。
在物理空间的位置

所有的数据库文件都存在data目录下?????找不到数据库对应的文件夹

本质还是文件的存储

MySQL 引擎在屋里文件上的区别

  • INNODB 在数据库表中只有一个*.frm,以及上级目录下的 ibdata1 文件 ????????????????

2.6 修改删除表

修改


-- 重命名表
alter table `student` rename as `student1`;/* alter table `旧表名` rename as `新表名`;*/
-- 增加一个字段
alter table `teacher` add salary int(8); /* alter table `表名` add 字段名 列属性[];*/
-- 修改一个字段
-- 字段重命名
alter table `teacher` change age age1 int(1);  /* alter table `表名` change 旧名 新名 列属性[];*/
-- 修改字段的约束
alter table `teacher` modify age varchar(11);  /* alter table `表名` modify 字段名 列属性[]; */
-- 删除一个字段
alter table `teacher` drop salary;  /* alter table `表名` drop 字段名; */

删除表

-- 如果表存在再删除
drop table if exists `teacher`;
-- 展示表结构
desc teacher;

所有的创建和删除操作,尽量加上判断语句

注意点

  • 所有的表名和字段名都使用反引号``包裹起来
  • 注释 – 和/* */
  • sql关键字大小写不敏感,建议使用小写。
  • 所有的符号都使用英文!

3. MySQL的数据管理

3.1 外键(了解即可)

  1. 方式一,在创建表的时候,增加约束,(麻烦,比较复杂)

    CREATE TABLE IF NOT EXISTS `grade`(
      `gradeid` INT(2) NOT NULL AUTO_INCREMENT COMMENT'年级id',
      `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
      PRIMARY KEY(`gradeid`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8
    -- 学生表的gradeid 字段要去引用年纪表的gradeid
    -- 定义外键key
    -- 给这个外键添加约束(执行引用)references
    CREATE TABLE IF NOT EXISTS `student`(
        `id` INT(4)  NOT NULL AUTO_INCREMENT COMMENT '学号' ,
        `name` VARCHAR(30) NOT NULL DEFAULT '匿名'  COMMENT '姓名',
        `pwd`   VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT  '密码',
        `gender` VARCHAR(2) NOT NULL  DEFAULT '男'  COMMENT '性别',
        `birthday`  DATETIME DEFAULT NULL COMMENT '出生日期',
        `gradeid`  INT(2) NOT NULL COMMENT '学生的年级',
        `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
        `email`  VARCHAR(50)  DEFAULT NULL COMMENT '邮箱',
        PRIMARY KEY (`id`),
        KEY `FK_gradeid`(`gradeid`) ,
        CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
    )ENGINE INNODB DEFAULT CHARSET=utf8
    

    删除有外键约束的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)

    1. 方式二,创建表成功后添加外键约束

      CREATE TABLE IF NOT EXISTS `grade`(
        `gradeid` INT(2) NOT NULL AUTO_INCREMENT COMMENT'年级id',
        `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
        PRIMARY KEY(`gradeid`)
      )ENGINE=INNODB DEFAULT CHARSET=utf8
      DROP TABLE `student`
      CREATE TABLE IF NOT EXISTS `student`(
          `id` INT(4)  NOT NULL AUTO_INCREMENT COMMENT '学号' ,
          `name` VARCHAR(30) NOT NULL DEFAULT '匿名'  COMMENT '姓名',
          `pwd`   VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT  '密码',
          `gender` VARCHAR(2) NOT NULL  DEFAULT '男'  COMMENT '性别',
          `birthday`  DATETIME DEFAULT NULL COMMENT '出生日期',
          `gradeid`  INT(2) NOT NULL COMMENT '学生的年级',
          `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
          `email`  VARCHAR(50)  DEFAULT NULL COMMENT '邮箱',
          PRIMARY KEY (`id`)
      )ENGINE INNODB DEFAULT CHARSET=utf8
      -- 创建表的时候没有外键关系
      /* ALTER TABLE `表名` 
      ADD CONSTRAINT `约束名` FOREIGN KEY (`作为外键的字段名`) REFERENCES `那个表`(`对应字段`)*/
      ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
      

以上的操作都是物理外键,数据库级别的外键,不建议使用,(避免数据过多,造成困扰)

最佳实践

  • 数据库中单纯存表,只用来存储数据,只有行(数据)和列(字段)
  • 若要使用多张表的数据,想要使用外键(可以用程序去实现)

3.2 DML语言(全部记住)

**数据库的意义:**存储数据、管理数据

DML数据操作语言

  • insert
  • update
  • delete

3.3 添加

-- 插入语句(添加) 
-- insert into 表名([字段名1,][字段名2,...[字段名n]) values('值1'), ('值2'), ('值3'), (...), ('值n')
INSERT INTO `grade` (`gradename`) VALUES ('大四');

-- 由于主键自增,我们可以省略(如果不写字段名,它就会一一匹配)
-- 即下面这句等价于 INSERT INTO `grade`(`gradeid`,`gradename`) VALUES ('大三',null);则必报错。
INSERT INTO `grade` VALUES ('大三');
-- 一般写插入语句必须要保证数据和字段一一对应
-- 插入多个字段
INSERT INTO `grade`(`gradename`) VALUES ('大三'),('大二');
INSERT INTO `grade`(`gradeid`,`gradename`) VALUES ('5','大一'),('8','高一');

在这里插入图片描述
在这里插入图片描述

语法:insert into 表名([字段名1,][字段名2,…[字段名n]) values(‘值1’), (‘值2’), (‘值3’), (…), (‘值n’)

注意事项:

  1. 字段之间用逗号隔开,字段用反引号包裹,所有需要插入的字段用一个括号括起来
  2. 字段是可以省略的,但是后面的值,必须一一对应,不能少
  3. 可以同时插入多条数据,一组数组用括号括起来,单个数据用单引号括起来。

3.4 修改

update set 新值 where 条件
UPDATE `grade` SET `gradename`='初一' WHERE `gradeid`=5 ;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-reAlrDZS-1634484840174)(C:\Users\raylene\AppData\Roaming\Typora\typora-user-images\image-20210925235533194.png)]

不指定where 条件的情况下,会修改整个表
UPDATE `grade` SET `gradename`='初一';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4rxLVVnq-1634484840175)(C:\Users\raylene\AppData\Roaming\Typora\typora-user-images\image-20210925235735389.png)]

语法:

-- update `表名` set `字段名`='值' where  条件
-- 修改多个字段时,字段间用逗号隔开。

条件: where 子句运算符

操作符含义范围结果
=等于5=6false
<>或 !=不等于5<>6true
>
<
>=
<=
between … and …在某个闭区间[…,…]
AND两个条件都成立
OR两个条件成立一个即可
  • UPDATE(修改)和 INSERT INTO(新增) 不同,新增只需加数据,会一行一行的增加,而UPDATE修改,是需要条件过滤的,否则就会改动整个表的数据了。UPDATE不算是新增数据,即时刚开始 第四条数据,他没有 gender、age的数据,我加入进去了新数据,那也算是修改,并非添加,就是说:我把他空的数据,修改成了非空数据。
  • WHERE(过滤条件):条件,就好比你去某个班级,找男生帮忙搬东西,进去之后,发现男生太多了,你只需要10个男生,你就会给出条件:“来10个最强壮的”,那么这就是条件,过滤了剩下的男生,他们不会被选中。

语法:update 表名 set 字段名=‘值’ where 条件

注意事项:

  • 条件一定要带,不带条件会修改整个表
  • value可以是具体的值,也可以是变量current_time()
  • 多个字段之间用逗号隔开

3.5 删除

delete 命令

语法 :delete from 表名 where 条件

-- 删除数据(避免这样写,会全部删除)
DELETE FROM `grade`;
-- 删除指定数据
DELETE FROM `grade` WHERE `gradeid` = 1;

在这里插入图片描述

truncate 命令

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

-- 清空某张表
TRUNCATE `grade`;
truncate 与delete的区别
  • 相同点:都是清空数据库,表的结构和索引不会变
  • 不同点
    • TRUNCATE 重新设置 自增列 计数器会归零
    • TRUNCATE 不会影响事务
    • delete 自增列 计数器不会归零。

未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值