Java 笔记 26

• 数据库

• mysql 卸载与安装

• 连接mysql

• mysql数据类型

• 导入和导出

• sql

• DDL

• DML


 
数据库
1、为什么要使用数据库?
 (1)持久化(永久保存)
 (2)方便管理数据2、数据库:Database,简称DB
 通俗的讲,就是数据的仓库,专门存储数据的
 它保存了一系列有组织的数据的文件系统或数据结构。3、数据库管理软件,数据库管理系统,DBMS Database Management System
 mysql,oracle,sql server,db2,redis…
 数据库管理软件:操纵和管理数据库的大型软件4、SQL:结构化查询语言 Structured Query Language
 专门操作数据库的语言5、mysql
 关系型数据库:二维表
 体积小,成本低,速度快,开源等优点mysql 卸载与安装
mysql的数据库管理软件是C/S结构,底层是TCP/IP协议的程序:
 S:服务器端
 C:客户端端服务器端,先启动,有一个端口号,监听/等待客户端的连接。
一、mysql的卸载
 1、先停止mysql的服务
 【计算机】->【管理】->【服务】–>mysql服务–>[停止]2、卸载
 (1)控制面板
 (2)电脑管家或360安全卫士等第三方软件3、清除残余文件
 到你之前安装的mysql目录下查找对应的残余文件。
 如果没有选择数据目录的话,默认在C:\ProgramData\mysql4、清理注册表
 1:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL服务 目录删除
 2:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL服务 目录删除
 3:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL服务 目录删除
 4:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\MySQL服务 目录删除
 5:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL服务目录删除
 6:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL服务删除
 注册表中的ControlSet001,ControlSet002,不一定是001和002,可能是ControlSet005、006之类二、安装
 1、选择64位还是32
 2、注意服务和数据目录的选择三、配置
 1、D:\ProgramFiles\mysql\MySQL Server 5.5_server\bin\MySQLInstanceConfig.exe
 2、跟着笔记中的截图配置连接mysql
mysql数据库管理软件:C/S
(1)服务器必须先启动
 (2)客户端连接服务器端一、连接的方式一:用命令行客户端连接服务器
 mysql -hlocalhost -P3306 -uroot -p回车
 Enter password:密码说明:
 (1)如果你连接的是localhost本地的mysql,那么可以省略-hlocalhost
 (2)如果你连接的mysql服务的端口号就是默认的3306,那么可以省略-P3306
 (3)-h,-P,-u这三个options后面可以有空格,例如:-h localhost
 但是-p与密码之间不要加空格,否则会认为这个空格是密码的其中一个字符成功后,看到如下界面:
 Welcome to the MySQL monitor. Commands end with ; or \g.
 Your MySQL connection id is 8
 Server version: 5.5.27 MySQL Community Server (GPL)Copyright © 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
二、mysql5.5版本等,安装后,有自带的一个命令行客户端
 只需要输入密码
 只能以root用户,并且只能连接本机的,mysql服务三、可视化工具
 例如:SQLyog,Navicate…四、Java程序
 JDBC的内容mysql数据类型
一、mysql的数据类型
 1、整数系列
 TINYINT:非常小的整数,类似于Java的byte类型
 SMALLINT:小整数,类似于Java的short类型
 MEDIUMINT:中整数,Java没有对应
 INT、INTEGER:整数,类似于Java的int类型
 BIGINT:大整数,类似于Java的long类型使用int数据类型:
 (1)int,等价于int(11)
 (2)int(M):M表示宽度,需要结合另外的两个参数使用
 unsigned:表示无符号,即没有负数
 zerofill:表示用0填充
 例如:int(5) unsigned zerofill,表示每一个整数有5位数字,如果不足5位的在左边用0凑够5位
 如果只是单独int(5),那是不会起作用。
 无论:int的宽度指定为多少,在内存中都是占4个字节,如果你的数字超过了int(5)也可以存储2、浮点小数
 float:4个字节
 double:8个字节使用float和double时:
 (1)float或double
 (2)float(M,D),double(M,D):M表示总位数,D表示精度,即小数点几位
 例如:double(5,2)表示的数据范围[-999.99,999.99],如果超过这个范围会报错。3、定点小数,类似于Java的BigDecimal,底层使用字符串存储
 DECIMAL
 DECIMAL(M,D)4、日期时间类型
 date:只能表示日期
 time:表示时间
 datetime:表示日期和时间
 year:表示年
 timestamp:时间戳,表示日期和时间datetime和timestamp:
 (1)timestamp实际存储的毫秒值,显示时,显示根据毫秒值算出来一个本地化的日期时间
 datetime就是存储日期时间
 (2)timestamp因为存储的毫秒值,所以在比较和计算时,效率比较高。
 (3)datetime和timestamp可以表示的时间范围是不同的5、字符串
 强调:mysql没有单字符类型,只有字符串类型char:定长字符串,长度[1,255]
 char,char(1),长度为1个字符
 char(10),长度为10个字符
 varchar:变长字符串
 varchar(M):必须指定M,这个M的意思是最长不超过M个字符
 例如:varchar(20),最长不超过20个字符text:长文本
 一般用于存储,文字比较多的,简介等,又不经常检索的信息char和varchar
 (1)内存占用空间不同
 char(M):M字符就占M个字符的空间
 例如:char(2) 实际存储的是’男’,但是也是占2个字符的位置,那一个空的字符存储的是\u0000
 varchar:实际几个字符 + 1/2个字节的空间
 例如:varchar(20) 实际存储的是’张三’,占的2个字符 + 1/2个字节(用来记录实际的字符个数的)
 (2)
 varchar节省空间,但是每次存和取,都要数字符个数
 char:看起来浪费空间,但是每次存和取,都按照固定的长度去处理的建议:像身份证号,学号,邮编等定长的字符串使用char,例如:地址等使用变长的
 现在mysql的版本对varchar优化的越来越快了。6、位类型(了解)
 二进制的位类型,BIT(M)类型允许存储M位值。M范围为1~64,默认为17、blob系列类型(了解)
 BINARY和VARBINARY类型类似于CHAR和VARCHAR类型,但是不同的是,它们存储的不是字符字符串,而是二进制串。所以它们没有字符集8、枚举(ENUM)
 多个中选择一个
 9、集合
 多个中可以选择多个导入和导出
一、导入
 1、登录mysql后
 2、导入执行sql脚本
 mysql> source sql文件的路径名
 例如:mysql> source d:/mysqldb.sql二、导出数据库备份
 不用登录,直接在命令行
 mysqldump -h主机名 -P端口 -u用户名 -p密码 --database 数据库名 > 文件名.sql
 例如:
 mysqldump -hlocalhost -P3306 -uroot -p123456 --database test > D:\mysqldb.sqlsql
#注释
 #1、查看当前mysql数据库管理软件中都有什么数据库
 show databases;#使用一个数据库
 use test;#如果test不存在,可以创建一个新的数据库
 create database test;#查看当前数据库中都有什么表格
 show tables;#查看某个表的数据
 select * from 表名称;
 select * from t_employee;#查询所有人的薪资
 select salary from t_employee;
 select salary+1000 from t_employee;#修改所有人的薪资,涨1000元
 update t_employee set salary = salary + 1000;#查询薪资加完1000元后,超过20000
 select * from t_employee where salary+1000 > 20000;/*一、运算符
 1、算术运算符
 +:加
 -:减
 *:乘
 /:除 可以保留小数部分
 div:除 如果整数与整数相除只保留整数部分
 %:求余数
 mod:求余数
 */
 select 1/2; #0.5
 select 1 div 2; #0/*
 2、比较运算符:大于
 <:小于
 =:等于 注意区别,Java中是==,mysql中是=
 =:大于等于
 <=:小于等于
 !=:不等于
 <>:不等于
 <=>:安全等于 用于判断null值的比较运算符
 null值的判断,习惯上我们用is null 和is not null
 */
 #查询薪资大于20000元的员工
 select * from t_employee where salary > 20000;#查询所有男员工
 select * from t_employee where gender = ‘男’;
 select * from t_employee where gender != ‘女’;
 select * from t_employee where gender <> ‘女’;#查询奖金比例commision_pct是null的员工
 select * from t_employee where commission_pct <=> null;
 select * from t_employee where commission_pct is null;/*
 3、逻辑运算符
 &&和and:逻辑与
 两个条件同时满足
 ||和or:逻辑或
 两个条件满足任意一个
 ^和xor:逻辑异或
 两个条件只能满足其中一个
 !和not:
 不满足xx条件
 */
 #查询薪资大于20000元的女员工 
 select * from t_employee where salary > 20000 && gender = ‘女’;
 select * from t_employee where salary > 20000 and gender = ‘女’;#查询男员工
 select * from t_employee where not gender = ‘女’;
 select * from t_employee where !(gender = ‘女’);#查询薪资大于10000 异或 性别是男的,即它俩只能满足一个
 #即查询薪资大于10000的女的或薪资低于10000的男的
 select * from t_employee where salary>10000 ^ gender =‘男’;
 select * from t_employee where salary>10000 xor gender =‘男’;
 /*
 4、范围
 (1)区间范围:
 在[a,b]之间,between a and b
 不在[a,b]之间,not between a and b
 (2)集合范围
 in(…)
 not in(…)
 */
 #查询薪资在[15000,20000]之间的员工
 select * from t_employee where salary between 15000 and 20000;
 select * from t_employee where salary >= 15000 and salary <=20000;#查询薪资在9000,10000,12000
 select * from t_employee where salary in(9000,10000,12000);
 select * from t_employee where salary =9000 || salary =10000 || salary =12000;
 /*
 5、模糊查询
 like ‘%x%’ x代表确定的字符 %表示不确定的0~n个字符
 ‘_x%’ x代表确定的字符 _表示确定的1个字符
 */
 #查询,名字ename中包含“冰”这个字的员工
 select * from t_employee where ename like ‘%冰%’;#查询,名字ename是张xx,三个字
 select * from t_employee where ename like ‘张__’;#查询,名字ename是第二个字是’冰’
 select * from t_employee where ename like ‘_冰%’;SQL语句的规范:
 1、mysql对于SQL语句不区分大小写,SQL语句关键字尽量大写
 show databases;
 SHOW DATABASES;
 至于表中的数据是否区分大小写,和字符编码,和数据类型,和校对规则有关。
 ci:不区分大小写
 cs:区分大小写
 bin:最严格,区分大小写,以二进制值存储2、在sql语句中的值,除了数值类型(整数、小数),其他的类型,都使用’'引起来。
 例如:select * from t_employee where gender =‘男’;3、如果在SQL中需要给字段取别名时,可以给别名加""。
 如果别名中间没有空格,"“可以省略,如果有空格,不能使用”"4、所有标点符号使用英文状态下的半角输入方式
5、必须保证所有(),单引号,双引号是成对结束的
6、可以使用(1)#单行注释 (2)–空格单行注释 (3)/* 多行注释 */
命名规范:
 1、必须只能包含 A–Z, a–z, 0–9, _共63个字符
 2、不能在对象名的字符间留空格
 例如:create database 0513 db; #错误的
 3、避免重名
 同一个DB数据库中,表不能重名,
 同一张表中,字段不能重名
 同一个DBMS数据库管理软件中,数据库不能重名
 4、命名时不要使用关键字
 create database database; #错误的SQL:
 1、DDL:Data Define Language
 数据定义语言,即定义数据的结构。
 例如:create,drop,alter
 2、DML:Data Manage Language
 数据管理语言,对数据值的增、删、改、查
 例如:insert,delete,update,select
 3、DCL:Data Control Language
 数据控制语言,对权限、事务等的控制
 例如:grant,revoke,commit,rollback等DDL
#一、DDL
 #(一)操作database的SQL
 #1、查看当前mysql数据库管理软件中的所有数据库
 show databases;#2、使用某个数据库
 use 数据库名;#例如:use test;
#3、创建一个数据库
 create database 数据库名;#例如:
 create database library;#4、删除一个数据库
 drop database 数据库名;#例如:
 drop database 0513db;#(二)操作表结构的SQL
 1、查看某个数据库下的所有表格
 show tables;mysql> show tables;
 ERROR 1046 (3D000): No database selected
 解决方案有两种:
 (1)先use,再操作表格
 use 数据库名;
 show tables;
 (2)show tables from 数据名;2、创建某个表格
 create table 【数据库名.】表名称(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型);
 create table 【数据库名.】表名称(
 字段名1 数据类型,
 字段名2 数据类型,
 字段名3 数据类型
 );
 说明:如果前面有use语句,那么【数据库名.】可以省略例如:
 create table test.t_stu(
 sid int,
 sname varchar(20),
 gender char,
 birthday date,
 score double
 );3、查看表结构
 desc 表名称;mysql> desc t_stu;
 ±---------±------------±-----±----±--------±------+
 | Field | Type | Null | Key | Default | Extra |
 ±---------±------------±-----±----±--------±------+
 | sid | int(11) | YES | | NULL | |
 | sname | varchar(20) | YES | | NULL | |
 | gender | char(1) | YES | | NULL | |
 | birthday | date | YES | | NULL | |
 | score | double | YES | | NULL | |
 ±---------±------------±-----±----±--------±------+
 类似于通过Class对象看类的信息。4、修改表名称
 rename table 旧表名 to 新表名;
 alter table 旧表名 rename 新表名;
 例如:
 rename table t_stu to student;
 alter table student rename t_stu;5、修改表结构
 (1)增加一列,增加一个字段
 alter table 表名称 add 【column】 字段名 数据类型; #默认添加到最后
 alter table 表名称 add 【column】 字段名 数据类型 first;
 alter table 表名称 add 【column】 字段名 数据类型 after 另一个字段;例如:增加一列,存储电话号码
 alter table t_stu add tel char(11);增加一列,存储地址,添加到第一列的位置
 alter table t_stu add address varchar(50) first;增加一列,年龄,添加到sname的后面
 alter table t_stu add age int after sname;(2)修改,字段的数据类型或位置
 alter table 表名称 modify 【column】 字段名 新的数据类型;
 alter table 表名称 modify 【column】 字段名 数据类型 first;
 alter table 表名称 modify 【column】 字段名 数据类型 after 另一个字段;例如:修改gender的数据类型为char(2)
 alter table t_stu modify gender char(2);
 例如:修改address的位置到最后一列
 alter table t_stu modify address varchar(50) after tel;(3)修改,列的名称
 alter table 表名称 change 【column】 旧字段名 新的字段名 数据类型;
 例如:修改列的名称tel为phone
 alter table t_stu change tel phone char(11);(4)删除一列
 alter table 表名称 drop 【column】 字段名;例如:删除地址列
 alter table t_stu drop address;6、删除整张表
 drop table 表名称;例如:drop table t_stu;
DML
#二、DML:增删改查 对应程序员来说,DML的重要性要比你掌握DDL还要重要。
 1、添加数据,往表中插入数据
 (1)insert into 【数据库名.】表名称 values(值列表);
 要求为所有列赋值,(值列表)的类型、数量与表结构中列的类型、数量一致
 (2)insert into 【数据库名.】表名称(字段列表) values(值列表);
 为(字段列表)指定的列赋值,(值列表)的数量与(字段列表)的类型、数量对应
 (3)insert into 【数据库名.】表名称 values(值列表1),(值列表2)。。。;
 (4)insert into 【数据库名.】表名称(字段列表) values(值列表1),(值列表2)。。。;mysql> desc t_stu;
 ±---------±------------±-----±----±--------±------+
 | Field | Type | Null | Key | Default | Extra |
 ±---------±------------±-----±----±--------±------+
 | sid | int(11) | YES | | NULL | |
 | sname | varchar(20) | YES | | NULL | |
 | gender | char(1) | YES | | NULL | |
 | birthday | date | YES | | NULL | |
 | score | double | YES | | NULL | |
 ±---------±------------±-----±----±--------±------+
 5 rows in set (0.01 sec)
 例如:
 insert into t_stu values(1,‘张三’,‘男’,‘1995-05-09’,89.5);mysql> insert into t_stu values(2,‘李四’,60);
 ERROR 1136 (21S01): Column count doesn’t match value count at row 1’insert into t_stu(sid,sname,score) values(2,‘李四’,60);
insert into t_stu values
 (3,‘王五’,‘男’,‘1993-05-09’,80.5),
 (4,‘赵六’,‘女’,‘1992-05-09’,82.5),
 (5,‘钱七’,‘男’,‘1991-05-09’,82.5);insert into t_stu(sid,sname,score) values
 (6,‘李六’,60),
 (7,‘李七’,70);2、修改
 update 【数据库名.】表名称
 set 字段名1 = 新值,
 字段名2 = 新值,
 字段名3 = 新值
 。。。
 【where 条件】;说明:如果没有where条件,说明修改所有行的这几个字段的值
例如:修改所有人的成绩为80分
 update t_stu set score = 80;例如:修改李四的成绩为40分
 update t_stu set score = 40 where sname = ‘李四’;例如:把没有填写性别的学生的性别都设置为’男’
 update t_stu set gender = ‘男’ where gender <=> null;
 update t_stu set gender = ‘男’ where gender is null;例如:修改所有人的成绩都加10分
 update t_stu set score = score + 10;3、删除数据
 delete from 表名称 【where 条件】;例如:删除所有数据,表结构还在
 delete from t_stu;例如:删除成绩是82.5的学生
 delete from t_stu where score = 82.5;4、查询数据
 (1)select * from 表名称;
 (2)select * from 表名称 【where 条件】;
 (3)select 字段列表 from 表名称 【where 条件】;例如:查询全部
 select * from t_stu;例如:查询哪些学生没有填写性别
 select * from t_stu where gender is null;例如:查询没有填写性别的学生的姓名
 select sname from t_stu where gender is null;例如:查询没有填写性别的学生的姓名和成绩
 select sname,score from t_stu where gender is null;5、查询时给字段取别名
 字段名 as “别名”
 其中:
 (1)如果"“中的别名没有空格,可以省略”"
 (2)这个as可以省略例如:查询没有填写性别的学生的姓名和成绩,查询结果sname显示姓名,score显示成绩
 select sname as “姓名”,score as “成绩” from t_stu where gender is null;select sname 姓名,score 成绩 from t_stu where gender is null;