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-1 | 1字节 |
smallint | 较小的数据 | 有符号值:-215~215-1 无符号值:0~2^16-1 | 2字节 |
mediumint | 中等大小的数据 | 有符号值:-223~223-1 无符号值:0~2^24-1 | 3字节 |
int | 标准整数 | 有符号值:-231~231-1 无符号值:0~2^32-1 | 4字节 |
bigint | 较大的整数 | 有符号值:-263~263-1 无符号值:0~2^64-1 | 8字节 |
float | 单精度浮点数 | ±1.1754351e-38 | 4字节 |
double | 双精度浮点数 | ±2.2250738585072014e-308 | 8字节 |
decimal | 字符串形式的浮点数 | decimal(m, d) |
字符串类型
类型 | 说明 | 最大长度 |
---|---|---|
char[N] | 固定长字符串,检索快但费空间,0<=N<=255 | N字符 |
varchar[N] | 可变字符串0<=N<=65535 | 变长度 |
tinytext | 微型文本串 | 2^8-1字节 |
text | 文本串 | 2^16-1字节 |
日期和时间型数值类型
类型 | 说明 | 取值范围 |
---|---|---|
DATE | YYYY-MM-DD,日期格式 | 1000-01-01~9999-12-31 |
TIME | Hh:mm:ss,时间格式 | -838:59:59~838:59:59 |
DATETIME | YY-MM-DD hh:mm;ss | 1000-01-01 00:00:00~9999-12-31 23:59:59 |
TIMESTAMP | YYYYYMMDDhhmmss格式表示的时间戳 | 197010101000000~2037年某个时刻 |
YEAR | YYYY格式的年份值 | 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=6 | false |
<> 或 != | 不等于 | 5!=6 | true |
> | 大于 | 5>6 | false |
< | 小于 | 5<6 | true |
>= | 大于等于 | 5>=6 | false |
<= | 小于等于 | 5<=6 | true |
BETWEEN | 在某个范围 | BETWEEN 5 AND 10 | |
AND | 并且 | 5>1 AND 1>2 | false |
OR | 或 | 5>1 OR 1>2 | true |
3.3、DELETE 命令
语法:DELETE FROM 表名 WHERE condition
注意:condition为筛选条件 , 如不指定则删除该表的所有列数据
-- 删除最后一个数据
DELETE FROM grade WHERE gradeid = 5
以上是关于MySQL 学习的主要内容,如果未能解决你的问题,请参考以下文章