MySQL 学习

Posted FzshuaiBlog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 学习相关的知识,希望对你有一定的参考价值。

1、初识 mysql

Java EE:企业级 Java 开发 Web

前端(页面:展示,数据!)

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

数据库(存数据,Txt,Excel,Word)

只会写代码,学好数据库,基本混饭吃!

操作系统,数据结构与算法!当一个不错的程序员

1.1、为什么要学习数据库

​ 1、岗位技能需求

​ 2、现在的世界,的数据者得天下

​ 3、存储数据的方法

​ 4、程序,网站中大量数据如何长久保存

​ 5、数据库是几乎所有软件体系中最核心的一个存在

1.2、什么是数据库

​ 数据库(DataBase,简称DB)

​ 概念:长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据仓库

​ 作用:保存,并能安全管理数据(如:增删改查),减少冗余

​ 数据库总览:

​ 关系型数据库(SQL)

​ MySQL、Oracle、SQL Server 等

​ 关系型数据库通过外键关联来简历表与表之间的关系

​ 非关系型数据库(NoSQL)

​ Redis、MongDB 等

​ 非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定

1.3、什么是 DBMS

​ 数据库管理系统(DataBase Management System)

​ 数据库管理软件,科学组织和存储数据,高效地获取和维护数据

2、数据库操作

2.1、结构化查询语句分类

名称解释命令
DDL(数据定义语言)定义和管理数据对象,如数据库、数据表等CREATE、DROP、ALTER
DML(数据操作语言)用于操作数据库对象中所含的数据INSERT、UPDATE、DELETE
DQL(数据查询语言)用于查询数据库数据SELECT
DCL(数据控制语言)用于管理数据库的语言,包括管理权限与数据更改GRANT、COMMIT、ROLLBACK

2.2、数据库操作

命令行操作数据库

创建数据库:create database [if not exists] 数据库;

删除数据库:drop database [if exists] 数据库;

查看数据库:show databases;

使用数据库:use 数据库名;

2.3、创建数据表

create table [if not exists] `表明`(
	'字段名1' 列类型 [属性][索引][注释]
    '字段名2' 列类型 [属性][索引][注释]
    ···
    '字段名n' 列类型 [属性][索引][注释]
)[表类型][表字符集][注释];

说明:反引号用于区别 MySQL 保留字与普通字符

数值类型

类型说明取值范围存储需求
tinyint非常小的数据有符号值:-27~27-1 无符号值:0~2^7-11字节
smallint较小的数据有符号值:-215~215-1 无符号值:0~2^16-12字节
mediumint中等大小的数据有符号值:-223~223-1 无符号值:0~2^24-13字节
int标准整数有符号值:-231~231-1 无符号值:0~2^32-14字节
bigint较大的整数有符号值:-263~263-1 无符号值:0~2^64-18字节
float单精度浮点数±1.1754351e-384字节
double双精度浮点数±2.2250738585072014e-3088字节
decimal字符串形式的浮点数decimal(m, d)

字符串类型

类型说明最大长度
char[N]固定长字符串,检索快但费空间,0<=N<=255N字符
varchar[N]可变字符串0<=N<=65535变长度
tinytext微型文本串2^8-1字节
text文本串2^16-1字节

日期和时间型数值类型

类型说明取值范围
DATEYYYY-MM-DD,日期格式1000-01-01~9999-12-31
TIMEHh:mm:ss,时间格式-838:59:59~838:59:59
DATETIMEYY-MM-DD hh:mm;ss1000-01-01 00:00:00~9999-12-31 23:59:59
TIMESTAMPYYYYYMMDDhhmmss格式表示的时间戳197010101000000~2037年某个时刻
YEARYYYY格式的年份值1901~2155

2.4、修改数据库

2.4.1、修改表

修改表名 :ALTER TABLE 旧表名 RENAME AS 新表名

添加字段 : ALTER TABLE 表名 ADD字段名 列属性[属性]

修改字段 :

  • ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
  • ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]

删除字段 : ALTER TABLE 表名 DROP 字段名

2.4.2、删除数据表

语法:DROP TABLE [IF EXISTS] 表名

  • IF EXISTS为可选 , 判断是否存在该数据表
  • 如删除不存在的数据表会抛出错误

2.5、创建外键

外键概念:

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表

在实际操作中,将一个表的值放入第二个表来表示关联,所使用的值是第一个表的主键值(在必要时可包括复合主键值)。此时,第二个表中保存这些值的属性称为外键(foreign key)。

外键作用

保持数据一致性完整性,主要目的是控制存储在外键表中的数据,约束。使两张表形成关联,外键只能引用外表中的列的值或使用空值。

2.5.1 建表时指定外键约束

-- 创建外键的方式一 : 创建子表同时创建外键

-- 年级表 (id\\年级名称)
CREATE TABLE `grade` (
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

-- 学生信息表 (学号,姓名,性别,年级)
CREATE TABLE `student` (
`studentno` INT(4) NOT NULL COMMENT '学号',
`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
PRIMARY KEY (`studentno`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

2.5.2 建表后修改

-- 创建外键方式二 : 创建子表完毕后,修改子表添加外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);

2.6、删除外键

-- 删除外键
ALTER TABLE student DROP FOREIGN KEY FK_gradeid;
-- 发现执行完上面的,索引还在,所以还要删除索引
-- 注:这个索引是建立外键的时候默认生成的
ALTER TABLE student DROP INDEX FK_gradeid;

3、DML语言

DML语言 :数据操作语言

  • 用于操作数据库对象中所包含的数据

  • 包括 :

    • INSERT (添加数据语句)
    • UPDATE (更新数据语句)
    • DELETE (删除数据语句)

3.1、INSERT 命令

语法:INSERT INTO 表名 (字段1, 字段2, …) VALUES (‘值1’, ‘值2’, …)

注意:

  • 字段或值之间用英文逗号隔开
  • ’ 字段1,字段2…’ 该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致
  • 可同时插入多条数据 , values 后用英文逗号隔开
-- 使用语句如何增加语句?
-- 语法 : INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3')
INSERT INTO grade(gradename) VALUES ('大一');

-- 主键自增,那能否省略呢?
INSERT INTO grade VALUES ('大二');

-- 查询:INSERT INTO grade VALUE ('大二')错误代码:1136
Column count doesn`t match value count at row 1

-- 结论:'字段1,字段2...'该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致.

-- 一次插入多条数据
INSERT INTO grade(gradename) VALUES ('大三'),('大四');

3.2、UPDATE 命令

语法:UPDATE 表名 SET column_name=value WHERE condition

注意:

  • column_name 为要更改的数据列
  • value 为修改后的数据 , 可以为变量 , 具体指 , 表达式或者嵌套的SELECT结果
  • condition 为筛选条件 , 如不指定则修改该表的所有列数据

where条件子句

可以简单的理解为 : 有条件地从表中筛选数据

运算符含义范围结果
=等于5=6false
<> 或 !=不等于5!=6true
>大于5>6false
<小于5<6true
>=大于等于5>=6false
<=小于等于5<=6true
BETWEEN在某个范围BETWEEN 5 AND 10
AND并且5>1 AND 1>2false
OR5>1 OR 1>2true

3.3、DELETE 命令

语法:DELETE FROM 表名 WHERE condition

注意:condition为筛选条件 , 如不指定则删除该表的所有列数据

-- 删除最后一个数据
DELETE FROM grade WHERE gradeid = 5

以上是关于MySQL 学习的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库

SQL测试题(注:最佳答案必须能在MySQL下运行)

字符串基本操作

Web项目实践--学生信息管理

Mysql学习日记-02外键 ,索引, sql语句的补充

数据库三范式