什么是数据库
在Java中,我们使用JVM来实现跨平台,那么计算机中存储的数据应该如何跨平台呢?
数据库就是为了解决操作系统之间跨平台而诞生的,它是一定数据格式的数据集合,它解决了不同操作系统,数据格式间的兼容问题.
目前数据库可以分为关系型数据库和非关系型数据库,关系型数据库查询数据得到对象,而非关系型数据库保存的是键值对,通过键值对来查询数据,得到数组.
对于关系型数据库来说,数据和列是一一对应的,是存在映射的,是以表作为基本单位;
而对于非关系型数据库,是存储键值对,它有关系型数据库的方便,也能大量处理数据,目前比较火的是Redis和mongoDB.
下图中的红标是目前数据库学习必须掌握的部分,但是本文仅仅讲述MySQL部分;
MySQL是关系型数据库,它的轻量级和开源本质让它成为很多中小型网站的数据库;
数据库中表是存储数据的,里面可以细分为记录,记录又是由字段组成,字段又可以分为段名,字段值,字段类型等,所以说字段是存储数据的基本单位.
表是一种数据化的文件,它有列,行,主键的概念,列又被叫做字段,行则是上文中所说的记录,每个字段可以分为字段名称,字段数据类型,字段约束,字段长度.
视图,这是一个概念,可以理解为它是一张虚表,并不存在,是基于select语句查询生成的结果集,用于简化重复的select操作;
函数是功能的实现,我们可以自定义函数,调用套路通过使用select函数名来调用,它只有一个返回值;
存储过程是数据库存储的过程,它可以返回多个值,也可以没有返回值;
索引:它是为了增加查询速度而建立的;
数据类型
MySQL中数据类型是为了限制数据的类型,常见的数据类型如下图所示,当然我们经常使用的也只有整型,浮点型,字符型,日期类型等.
数值型
时间类型
字符串类型
char和varchar区别在于前者是占用固定的存储空间,而后者是占用不固定的存储空间,哪怕是声明大小后,varchar依然是根据其需要占用的空间而占用;
SQL分类
数据查询语言DQL,代表人员select;
数据操作语言DML,代表人员insert,delete,update;
数据定义语言DDL,代表人员create,drop,alter;
事务控制语言TCL,代表人员commit,rollback;
数据控制语言DCl,代表人员grant,revoke;
使用root用户,创建一个test_01数据库,
CREATE DATABASE test_01;
并创建test01用户,
CREATE USER 'test01'@'localhost' IDENTIFIED BY 'test01';
赋予test01用户对test_01数据库拥有所有权
GRANT ALL PRIVILEGES ON test_01.* TO 'test01'@'localhost' IDENTIFIED BY 'test01';
FLUSH PRIVILEGES;
创建一个 xiaoming用户,让小明拥有最大权限(和root一样)
CREATE USER 'xiaoming'@'localhost' IDENTIFIED BY 'xiaoming';
GRANT ALL PRIVILEGES ON *.* TO 'xiaoming'@'localhost' IDENTIFIED BY 'xiaoming';
删除xiaoming用户
DROP USER 'xiaoming'@'localhost';
登录test01用户,在test_01数据库下创建t_student表,表中有 id,name,sex,course,score
其中 id是 int
name 是 varchar
sex 是 char
course 是 varchar
score 是 decimal
USE test_01;
CREATE TABLE t_student(
`id` INT COMMENT '学号',
`name` VARCHAR(100) COMMENT '姓名',
`sex` CHAR(100) COMMENT '性别',
`course` VARCHAR(100) COMMENT '科目',
`score` DECIMAL(4,2) COMMENT '分数'
)ENGINE = INNODB DEFAULT CHARSET = utf8;
向t_student表中插入3条数据
1 张三 男 javaSE 99
2 李四 女 javaWEB 98
3 王五 男 javEE 99.5
INSERT INTO t_student () VALUES(1,'张三','男','JavaSE',99);
INSERT INTO t_student () VALUES(2,'李四','女','JavaWeb',98);
INSERT INTO t_student () VALUES(3,'王五','男','JavaEE',99.5);
创建test数据库
CREATE DATABASE test0;
删除test数据库
DROP DATABASE test0;
创建 学生表(student)
表中有
id int
name varchar(30)
USE test;
CREATE TABLE student(
`id` INT COMMENT '学号',
`name` VARCHAR(30) COMMENT '姓名'
)ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT '学生表';
删除student表
DROP TABLE student;
把 course为javaEE的分数 更改为100
-- 前面建表的时候 score 设置不兼容100分 现在改过来
ALTER TABLE t_student MODIFY COLUMN score DECIMAL(5,2);
UPDATE t_student SET score = 100 WHERE course = 'JavaEE';
把 张三的性别更改为 女
UPDATE t_student SET sex = '女' WHERE `name` = '张三';
把 王五删除
DELETE FROM t_student WHERE `name` = '王五';
1 创建一个 test_01 数据库,并创建 test_01表
CREATE DATABASE IF NOT EXISTS test_01 DEFAULT CHARSET utf8;
表中有 id , name , phone 请合理使用数据类型
CREATE TABLE test_01(
`id` INT COMMENT '编号',
`name` VARCHAR(20) COMMENT '姓名',
`phone` INT COMMENT '电话'
)ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT '测试表';
向表中添加数据
ALTER TABLE test_01 MODIFY COLUMN phone TEXT;
1 张三 13113113111
INSERT INTO test_01() VALUES(1,'张三',13935735927);
2 李四 13213213222
3 王五 13313313333
INSERT INTO test_01() VALUES(2,'李四',13935735927);
INSERT INTO test_01() VALUES(3,'王五',15414654513);
把 id为2 的 电话更改为 13413413444
UPDATE test_01 SET phone = 15930145987 WHERE id = 2;
删除 id为3的记录
DELETE FROM test_01 WHERE id = 3;
查询剩余所有记录
SELECT * FROM test_01;
删除test_01表和数据库
DROP TABLE test_01;
DROP DATABASE test_01;
把t_student表删除
DROP TABLE t_student;
把test_01数据库删除
DROP DATABASE test_01;
把 test01用户删除(登录root用户)
DROP USER 'test01'@'localhost'