JavaEE2005—二阶段Day01
一、数据库安装
1.两种方式:
压缩包版
安装程序版
官方版,文档里面路径,默认C盘(数据库,jdk)
mysql -uroot -p(如果密码突然,my.ini)
提示输入密码:
注册表 (类似一些数据表缓存)
1.1现有的数据存储方式有哪些?
Java程序存储数据(类,变量,对象、数组,集合),数据保存在内存种,属于瞬时状态的存储
文件(file)存储数据的位置,保存在硬盘中,属于持久状态存储
1.2以上这些有哪些缺点
对于一些数据来说数据类型的区分,一般没有
存储的数据量级较小
访问的安全限制比较小
没有备份,恢复机制
1.3数据库
数据库是按照数据结构来进行组织,存储和管理数据的仓库,是一个长期存储计算机内的,有组织的,有共享的,统一管理的数据集合。
分类:
网状结构数据库:以节点形式存储和访问
关系型:sql - server mysql DB2 oracle AS400 以表格形式存储,多表会建立关联关系
非关系:mongoDB , redis 多数使用哈希表,以键值(key/value)形式进行存储,实现特定的键和一个指针指向特定的数据。
1.4数据库管理系统(DBMS)
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。文件
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。
数据库:存储、维护和管理数据的集合。
优缺点:
数据保存在内存:
优点: 存取速度快
缺点: 数据不能永远保存!!!
内存比硬盘贵。
数据保存在文件:
优点: 数据永远保存!!!
缺点:
1)速度比内存操作慢,频繁的IO操作。
2)查询数据不方便
数据保存在软件(DBMS):
1)数据永远保存!!!
2)速度比较快
3)查询和管理数据方便
4)比较安全
数据库软件可以实现以上的功能!!!
常见数据库:关系型为主,非关系为辅,(详见上面)
##### 1.5mysql
```sql
显著特点:免费,体积小,关系型
mysql在WEB方面,mysql目前来说是最好的,最流行的。
官网下载地址:https://www.mysql.com/
mysql下载地址:https://dev.mysql.com/downloads/mysql/
mysql文件夹中的文件说明
bin 命令文件控制
lib 库文件
include 头文件
注意:my-default.ini 文件平时没有需求的时候,不需要进行改动
二、sql语言
注意:目前sql是数据库唯一通用语言,QBC HQL
SQL()结构化查询语言,用于存储数据、更新、查询和管理关系数据库的程序设计语言。
进入到mysql:mysql -u root -p
基本命令
大写和小写都可以执行,但是官方建议大写。结尾一般加上分号,以分号结束进行执行
#1.查看所有数据库
mysql> show databases; #显示当前mysql数据库的所有数据库
+----------------------+
| Database |
+----------------------+
| information_schema | #信息数据库,其中保存着所有数据库的信息(元数据:是关于数据 的数据,如数据库的名字或者表名,行列的类型)
performance_schema #性能优化数据库,mysql5.5增加的一个性能优化引擎
mysql #核心数据库,主要负责存储数据库的用户,权限设置,关键字等等, 不可删除
#2.自定义创建数据库
#格式 create database 数据库名字;
mysql> create database mysql2005;
Query OK, 1 row affected (0.00 sec) #你的操作影响了一行
#3.查看创建数据库的信息
mysql> show create database mydb3;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| mydb3 | CREATE DATABASE `mydb3` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
#默认创建的数据的编码设置utf8
#4.设置数据库编码
mysql> create database mydb1 character set gbk;
Query OK, 1 row affected (0.00 sec)
#5.删除数据库
mysql> drop database mydb1;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
#6.修改数据的编码
mysql> alter database mysql2005 character set gbk;
Query OK, 1 row affected (0.00 sec)
2.1sql的分类
DDL、DML、DQL、DCL
DDL:操作数据库、表、列等使用的关键字:CREATE(创建表 创建数据)、 ALTER(修改表的字段)、 DROP(删除数据库 删除表 删除一个字段)
DML是对表中的数据进行增、删、改的操作。不要与DDL混淆了。
INSERT INTO(向表中插入数据)、UPDATE(更新表的数据)、 DELETE FROM(删除表的数据)
DQL数据查询语言 (重要)
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
查询返回的结果集是一张虚拟表。
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
1) GRANT:授权。
2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
回滚---ROLLBACK
回滚命令使数据库状态回到上次最后提交的状态。其格式为:
SQL>ROLLBACK;
3) COMMIT [WORK]:提交。
在数据库的插入、删除和修改操作时,只有当事务在提交到数据
库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看
到所做的事情,别人只有在最后提交完成后才可以看到。
提交数据有三种类型:显式提交、隐式提交及自动提交。下面分
别说明这三种类型。
(1) 显式提交
用COMMIT命令直接完成的提交为显式提交。其格式为:
SQL>COMMIT;
(2) 隐式提交
用SQL命令间接完成的提交为隐式提交。这些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
(3) 自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
系统将自动进行提交,这就是自动提交。其格式为:
SQL>SET AUTOCOMMIT ON;
#1。改变数据库(切换数据库)
mysql> use mysql2005;
Database changed
#2.创建一个表
#格式
CREATE TABLE 表名(
字段1 字段类型[列级别约束条件][默认值],
字段2 字段类型[列级别约束条件][默认值],
….
字段n 字段类型[列级别约束条件][默认值]
[表级别约束条件]
)
#实现
mysql> create table worker(
-> id int(11),
-> name varchar(25),
-> age int(11)
-> );
Query OK, 0 rows affected (0.02 sec)
#3.查看表
mysql> show tables;
+---------------------+
| Tables_in_mysql2005 |
+---------------------+
| worker |
+---------------------+
1 row in set (0.00 sec)
#4.查看表信息
mysql> desc worker;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(25) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
总结
#1.创建数据库
create database mydb1;
#2.切换数据库
use mydb1;
#3.查看正在使用的数据库的信息
select database();
#4.查看当前数据库管理系统中所有的数据库
show databases;
#5.退出数据库
exit
#6.显示当前数据库中所有的表
show tables;
2.2数据库中的类型
1.数字数据类型
- INT - 正常大小的整数,可以带符号。如果是有符号的,它允许的范围是从-2147483648到2147483647。如果是无符号,允许的范围是从0到4294967295。 可以指定多达11位的宽度。
- TINYINT - 一个非常小的整数,可以带符号。如果是有符号,它允许的范围是从-128到127。如果是无符号,允许的范围是从0到255,可以指定多达4位数的宽度。
- SMALLINT - 一个小的整数,可以带符号。如果有符号,允许范围为-32768至32767。如果无符号,允许的范围是从0到65535,可以指定最多5位的宽度。
- MEDIUMINT - 一个中等大小的整数,可以带符号。如果有符号,允许范围为-8388608至8388607。 如果无符号,允许的范围是从0到16777215,可以指定最多9位的宽度。
- BIGINT - 一个大的整数,可以带符号。如果有符号,允许范围为-9223372036854775808到9223372036854775807。如果无符号,允许的范围是从0到18446744073709551615. 可以指定最多20位的宽度。
- FLOAT(M,D) - 不能使用无符号的浮点数字。可以定义显示长度(M)和小数位数(D)。这不是必需的,并且默认为10,2。其中2是小数的位数,10是数字(包括小数)的总数。小数精度可以到24个浮点。
- DOUBLE(M,D) - 不能使用无符号的双精度浮点数。可以定义显示长度(M)和小数位数(D)。 这不是必需的,默认为16,4,其中4是小数的位数。小数精度可以达到53位的DOUBLE。 REAL是DOUBLE同义词。
- DECIMAL(M,D) - 非压缩浮点数不能是无符号的。在解包小数,每个小数对应于一个字节。定义显示长度(M)和小数(D)的数量是必需的。 NUMERIC是DECIMAL的同义词。[decimal]
2.日期和时间类型
- DATE - 以YYYY-MM-DD格式的日期,在1000-01-01和9999-12-31之间。 例如,1973年12月30日将被存储为1973-12-30。
- DATETIME - 日期和时间组合以YYYY-MM-DD HH:MM:SS格式,在1000-01-01 00:00:00 到9999-12-31 23:59:59之间。例如,1973年12月30日下午3:30,会被存储为1973-12-30 15:30:00。
- TIMESTAMP - 1970年1月1日午夜之间的时间戳,到2037的某个时候。这看起来像前面的DATETIME格式,无需只是数字之间的连字符; 1973年12月30日下午3点30分将被存储为19731230153000(YYYYMMDDHHMMSS)。
- TIME - 存储时间在HH:MM:SS格式。
- YEAR(M) - 以2位或4位数字格式来存储年份。如果长度指定为2(例如YEAR(2)),年份就可以为1970至2069(70〜69)。如果长度指定为4,年份范围是1901-2155,默认长度为4。
3.字符串类型
虽然数字和日期类型比较有意思,但存储大多数数据都可能是字符串格式。 下面列出了在MySQL中常见的字符串数据类型。
- CHAR(M) - 固定长度的字符串是以长度为1到255之间个字符长度(例如:CHAR(5)),存储右空格填充到指定的长度。 限定长度不是必需的,它会默认为1。
- VARCHAR(M) - 可变长度的字符串是以长度为1到255之间字符数(高版本的MySQL超过255); 例如: VARCHAR(25). 创建VARCHAR类型字段时,必须定义长度。 [varchar]
- BLOB or TEXT - 字段的最大长度是65535个字符。 BLOB是“二进制大对象”,并用来存储大的二进制数据,如图像或其他类型的文件。定义为TEXT文本字段还持有大量的数据; 两者之间的区别是,排序和比较上存储的数据,BLOB大小写敏感,而TEXT字段不区分大小写。不用指定BLOB或TEXT的长度。
- TINYBLOB 或 TINYTEXT - BLOB或TEXT列用255个字符的最大长度。不指定TINYBLOB或TINYTEXT的长度。
- MEDIUMBLOB or MEDIUMTEXT - BLOB或TEXT列具有16777215字符的最大长度。不指定MEDIUMBLOB或MEDIUMTEXT的长度。
- LONGBLOB 或 LONGTEXT - BLOB或TEXT列具有4294967295字符的最大长度。不指定LONGBLOB或LONGTEXT的长度。
- ENUM - 枚举,这是一个奇特的术语列表。当定义一个ENUM,要创建它的值的列表,这些是必须用于选择的项(也可以是NULL)。例如,如果想要字段包含“A”或“B”或“C”,那么可以定义为ENUM为 ENUM(“A”,“B”,“C”)也只有这些值(或NULL)才能用来填充这个字段。
char和varchar的区别,面试题
char 固定长度,char(10) 如果填入的数据不足10,那么查看数据长度时依然显示10
varchar 可变长度
面试题:
1.基本的区别 2.分别能做什么 3.实际应用中你是如何使用的 4.你对他们两个的应用有什么个人见解
主要使用的数据类型:
数字:int float double decimal
日期:data datatime
字符串:char varchar blob(二进制)
应用
#1.创建一个员工表
mysql> create table worker2(
-> id int(11),
-> name varchar(25),
-> gender varchar(10),
-> birthday date,
-> entry_date date,
-> job varchar(10),
-> salary double,
-> resume blob
-> );
Query OK, 0 rows affected (0.02 sec)
#2.查看创建的表
mysql> show tables;
+---------------------+
| Tables_in_mysql2005 |
+---------------------+
| worker |
| worker2 |
+---------------------+
2 rows in set (0.00 sec)
#3.查看表信息,所有的字段
mysql> desc worker2;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(25) | YES | | NULL | |
| gender | varchar(10) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| entry_date | date | YES | | NULL | |
| job | varchar(10) | YES | | NULL | |
| salary | double | YES | | NULL | |
| resume | blob | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
#4.增加一个字段image
mysql> alter table worker2 add image blob;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc worker2;
#5.将job这个字段的数据类型的长度改为60
#第一种
mysql> alter table worker2 modify job varchar(60);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
#第二种
#格式:alter table worker2 change 旧字段 新字段 varchar(60);
mysql> alter table worker2 change job job varchar(60);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
#6.删除字段
mysql> alter table worker2 drop image;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
#7.更改表名
#第一种
mysql> alter table worker rename to user;
Query OK, 0 rows affected (0.01 sec)
#第二种
mysql> rename table worker2 to worker;
Query OK, 0 rows affected (0.01 sec)
#注意:modify和change是对表的字段进行修改和改变
rename(重命名) 单纯的对表名进行更改
#8.对字段名进行修改将name改成username
mysql> alter table worker change name username varchar(20);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
#9.删除库
mysql> drop database mydb3;
Query OK, 5 rows affected (0.04 sec)
#10.删除表
mysql> drop table user;
Query OK, 0 rows affected (0.01 sec)
#11.对编码进行设置
mysql> alter table worker character set gbk;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
alter对表的操作
#1.增加字段
Alter table table_name ADD 新字段名 数据类型 [约束条件]
#2.修改表名
alter table 旧名字 rename [to] 新名字
#3.修改字段的数据类型
alter table 表名 modify 字段名 数据类型
#4.修改字段名
alter table 表名 change 旧字段名 新字段名 数据类型
#5.删除字段
alter table 表名 drop 字段名
#6.修改字段的排列顺序
alter table 表名 modify 字段1 数据类型 first|after 字段2
first:设置成第一个
after:放在。。。后面(指定)
#7.删除表的外键约束
alter table 表名 drop foreign key 外键约束(字段名)
DML
INSERT
#单行插入
INSERT INTO 表名(field1,field2,。。。) values(value1,value2,。。。)
#多行、批量插入
insert into 表名 (field1,field2,。。。)values(value1,value2,。。。),
(value1,value2,。。。),
(value1,value2,。。。),
。。。
#注意
a.列名和列值的类型、个数以及顺序一一对应
b.可以把列名当作Java中形参,把列值当作实际参数
c.值不可以超过列定义的长度
d.如果插入的式空值,(报错,约束提示),写成null
e.插入的式日期。和字符串一样,用引号引起来
#1.创建一个表
mysql> create table worker1(
-> id int(11),
-> name varchar(25),
-> gender varchar(20),
-> salary double
-> );
Query OK, 0 rows affected (0.02 sec)
#2.插入单条数据
mysql> insert into worker1(id,name,gender,salary)values(1,"tom","male",5000);
Query OK, 1 row affected (0.01 sec)
#3.查看数据是否添加成功(查看全部数据显示)
mysql> select * from worker1;
+------+------+--------+--------+
| id | name | gender | salary |
+------+------+--------+--------+
| 1 | tom | male | 5000 |
+------+------+--------+--------+
1 row in set (0.00 sec)
#4.添加多条数据
mysql> insert into worker1 values(2,"jack","male",6000),(3,"rose","female",10000),(4,"hh","male",600);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>
update更新(修改)
#注意:操作(实质上所有的curd全部都可以叫做操作,update)
update 。。set 。。。
#格式:
update 表名 set field1 = new-value1,field2 = new-value2, [where ];
#注意:
a.完全可以更新一个字段和多个字段
b.where 相当于if(判断语句)
c.可以指定任何条件到where中
d.如果没有where语句,默认所有的行都被同时更新为指定的操作
#1.将所有员工的薪水改为3000
mysql> update worker1 set salary=3000;
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4 Changed: 4 Warnings: 0
#2.将tom的性别改为女(female)
mysql> update worker1 set gender="female" where name="tom";
Query OK, 0 rows affected (0.01 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql>
#3.将rose的性别改为男,并将薪资改为5000
mysql> update worker1 set gender="male",salary=5000 where name="rose";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#4.将jack的薪资上调1000
mysql> update worker1 set salary=salary+1000 where name="jack";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql>
总结
#注意where:
where子句其实就是一个操作符,类似于if语句,可以当作数据的筛选
操作符 说明
= 相等
<>/!= 不等号
< 小于
<= 小于等于
> 大于
>= 大于等于
in(A,B) 在A,B之间
between 位于两个值之间
and 链接多个表达式(并且的关系)
删除
delete
#格式
delete from 表名 [where ];
#注意:
a.如果where语句没有指定限制条件,默认将表中的数据全部删除
b.可以指定任何条件进行删除的限制
#1.删除表中hh的字段
mysql> delete from worker1 where name="hh";
Query OK, 1 row affected (0.01 sec)
#2.删除所有数据
mysql> delete from worker1;
Query OK, 3 rows affected (0.01 sec)
mysql> select * from worker1;
Empty set (0.00 sec)
#3.删除表
mysql> drop table worker1;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
Empty set (0.00 sec)
mysql> select * from worker1;
ERROR 1146 (42S02): Table 'mysql2005.worker1' doesn't exist
mysql>