一、什么是数据库:(数据库软件)
1).什么是"数据库":
从字面上理解就是一个"存储数据的仓库",它本身是一个软件,它底层也是基于"文件系统",将我们的数据存储到硬盘上。使用数据库软件存储数据的优势:尤其在存储大量数据时,数据库软件内部采用"索引页"的形式,可以将我们的数据分成很多的"数据页"存储,并且在前面创建"索引页",目的后期可以让我们很快的检索到我们的数据。所以数据库软件在管理大量数据时,效率非常高。
2).什么是数据库管理系统:
"数据库管理系统--(DataBase Management System,DBMS)"宏观上讲,任何基于"数据库软件"的"管理系统"都可以称为数据库管理系统。也就是我们的系统的一个重要目的--管理数据。
二、常见的数据库软件
1).MySQL数据库:中型数据库软件,最初是免费、开源,目前被Oracle公司收购了,从6.X版本开始收费。
2).SQLServer数据库:微软公司的,收费的。中型数据库软件。包含了很丰富的管理工具。、
3).Oracle数据库:大型数据库软件,收费的。Oracle公司的产品。
4).DB2:IBM公司的数据库产品,收费的。常应用在银行系统中.
5).SQLite: 嵌入式的小型数据库,应用在手机端
三、数据库软件的内部结构
数据库软件:
|--逻辑数据库(通常是与"项目"对应的)
|--表(通常是与项目中的"类"对应)
|--列
|--列
....
|--表
...
|--逻辑数据库
.....
四、数据库软件和java的对应关系
Java 数据软件
----------------------------------------------
项目 逻辑数据库
类 表
类中属性 表中列(字段)
属性的数据类型 字段的数据类型
对象 一行记录
五、Mysql的安装与登陆
1.安装:改天再发
2.验证安装:
我的电脑-->右键-->管理-->左侧"服务和应用程序"-->展开-->选择"服务"-->在右侧列表中找到"MySQL",要确定是在"正在运行"的状态。
3使用mysql的命令行管理工具登陆:
1.启动命令行
2.登陆MySql:
1.登陆本机的Mysql:C:\>mysql -uroot -p登录密码(回车)
mysql>(看到这个字样就说明登录成功)
2.登录远程的MYSQL:C:\>mysql --host=MYSQL所在的服务器的IP地址 --user=root --password=登录数据库的密码
六:SQL语言
1.什么是SQL:
结构化查询语言(Structured Query Language)简称SQL,它是"数据库软件"的标准语言,由标准化组织来统一定义,所有的数据库软件都要遵守这个规则。使用SQL语言,可以对数据库软件进行任何的数据操作, 包括创建逻辑数据库,表,列,添加、修改、删除、查询记录等。
普通话:标准的SQL,任何数据库软件都必须支持的。
方言:每种数据库根据自己的特点又提供了一些新的语法,和操作规则,但只在本数据库软件中有效。
2.SQL语言宏观上的四大类
1.DDL(Data Definition Language):数据定义语言,create(创建)、alter(修改,只能对表,列操作),drop(删除)
2.DCL(Data Control Language):数据控制语言,用来定义操作用户以及为其分配权限。
3.DML(Data Manipulation Language):【重点掌握】:数据操作语言,用来操作"数据"的,可以添加(insert)、修改(update)、删除(delete)数据
4.DQL(Data Query Language):【重中之重】:数据查询语言,用来查询"数据"的,使用select ... from ... where .... group by ... order by ....;
七.数据库操作相关的语句:DDL
1).创建数据库:
1).create database 数据库名;
2).create database 数据库名 character set 字符集名称;
2).查看数据库MySQL服务器中的所有的数据库:
show databases;
3).查看某个数据库的定义的信息:
show create database 数据库名;
4).删除数据库
drop database 数据库名称;
5).切换数据库:
use 数据库名;
6).查看当前正在使用的数据库:
select database();
八.表操作相关的SQL语句:
1).创建表:
create table 表名(
列名1 数据类型(长度) [约束],
列名2 数据类型(长度) [约束],
..... ,
列名n 数据类型(长度) [约束] (注意:最后一列后面没有逗号)
)
例如:创建学员信息表:
create table student(
name varchar(100),
age int,
sex char(1)
);(回车)
2).查看数据库中的所有表:
show tables;
3).查看表结构:
desc 表名;
4).删除表
drop table 表名;
5).修改表结构:
1).alter table 表名 add 列名 类型(长度) [约束];
作用:修改表添加列.
例如:
#1,为分类表添加一个新的字段为 分类描述 varchar(20)
ALTER TABLE category ADD `desc` VARCHAR(20);
2).alter table 表名 modify 列名 类型(长度) 约束;
作用:修改表修改列的类型长度及约束.
例如:
#2, 为分类表的描述字段进行修改,类型varchar(50) 添加约束 not null
ALTER TABLE category MODIFY `desc` VARCHAR(50) NOT NULL;
3).alter table 表名 change 旧列名 新列名 类型(长度) 约束;
作用:修改表修改列名.
例如:
#3, 为分类表的分类名称字段进行更换 更换为 description varchar(30)
ALTER TABLE category CHANGE `desc` description VARCHAR(30);
4).alter table 表名 drop 列名;
作用:修改表删除列.
例如:
#4, 删除分类表中description这列
ALTER TABLE category DROP description;
5).rename table 表名 to 新表名;
作用:修改表名
例如:
#5, 为分类表category 改名成 category2
RENAME TABLE category TO category2;
6).alter table 表名 character set 字符集(了解);
作用:修改表的字符集
例如:
#6, 为分类表 category 的编码表进行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
6).关于MySQL中的数据类型
java的数据类型 MySQL的数据类型
-------------------------------------------------------------------------------------------------------------------------------
整数:
int int
小数:
float float(m,n)
double double(m,n)
decimal(m,n)
m:表示所有数字位(包括小数部分)的最宽的位数。
n:小数部分的位数
例如:double(10,2):表示数字整体最宽10位(包括小数),小数部分2位。
字符:
char char(1):在MySQL中char表示"字符串",char(1)才表示一个字符,不论中文还是英文。
字符串:
String char/varchar
大字符串:
String text(longtext)
二进制字符串:
byte[] binary
二进制数据(视频、音频、图片):
byte[] BLOB
日期类型:
String date(日期) YYYY-MM-DD 1000-01-01~9999-12-3
java.util.Date datetime(日期和时间) YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59
=======================================================================================================================
注意:
char和varchar在MySQL中都表示"字符串",在MySQL中没有"字符类型"。
1).char表示"定长字符串":例如:设置列的类型和长度:char(5),假如存储"abc"-->硬盘上-->"abc "
存储"a" -->硬盘上-->"a "
存储"abcdef"-->硬盘上-->"abcde"
2).varchar表示"不定长字符串":例如:设置列的类型和长度:varchar(5),存储"abc"-->硬盘上-->"abc"
存储"a" -->硬盘上-->"a"
存储"abcdef" -->硬盘上-->"abcde"
怎样选择?:char类型的查询速度要快于varchar,尽量使用char类型;
1).如果这列的所有数据的平均长度相同或者基本相同,这时建议使用char类型:
例如:年龄、性别、身份证号、手机号、银行卡号...
2).如果这列的所有数据的平均长度相差很大,建议使用:varchar
例如:地址、简介....
========================================================================================================================
注意:
关于长度:
1).整数int类型的长度:
create table student(
..
age int(4) zerofill,//表示最宽的可见的位数(不表示最长4位,也不表示是4个字节存储)通常与zerofill共同使用,如果数据不足这个宽度,前面填充0;如果超出这个宽度就存储实际的数字。
)
2).字符串char和varchar类型的长度:
char(4):表示最多存储"四个字符",可以中文,可以是英文.不足4个字符时,存储时后面自动填充"空格"。
varchar(4):表示最多存储"四个字符"...不足4个字符时,存储实际的字符。
3).浮点类型的长度:
double(10,2):表示:总长度10位,小数部分是2位。
=========================================================================================================================
八.记录操作相关的SQL语句【DML语句-重点掌握--增删改】:
1).添加数据:insert into 表名 values(值1,值2,值3,.....,值n)
A).有两种格式:
1).insert into 表名 values(值1,值2,值3,.....,值n);
例如:
insert into student values('zhangsan',20,'m');
注意:·
1).值列表:数量、顺序必须跟表中字段的数量、顺序一致;不填的字段要使用:null。
2).关于单引号的问‘题:对于"字符串、日期类型"类型的值,必须要使用一对"单引号"或者"双引号"括起来。 对于"数值"类型的值,可以不用单引号或者双引号括起来。
2).insert into 表名(字段1,字段2,....,字段n) values(值1,值2,....,值n);
例如:
insert into student(sex,name) values('m','lisi');
注意:
1).字段列表:可以不是表中的所有字段,而且可以不按照定义顺序;
2).值列表:数量、顺序必须跟"字段列表"的数量、顺序一致;
3).没有出现的字段,在本次添加中,自动填充:null。
B).怎样选择:
1).第一种:适合对表中的所有字段,或者绝大部分字段都添加值时使用,只有少部分字段不添加,设置为null。
2).第二种:适合对表中的少部分字段填充时使用。
总体规则:只要是对"部分"字段添加,建议使用第二种。
2).修改数据:
update 表名 set 列名 = 新值,列名 = 新值,....,列名 = 新值 where 条件;(注意:如果没有where条件,不会报错,会将这个字段的所有记录全部修改了)
例如:修改lisi的性别为:W
update student set sex = 'w' where name = 'lisi';
修改lisi的性别为:w,年龄为:25,姓名为:lisi2
update student set sex = 'w',age = 25,name = lisi2 where name = lisi;
3).删除数据:
delete 表名 where 条件;(注意:如果没有where条件,不会报错,会删除所有数据)会删除所有符合条件的记录
例如:删除lisi2的记录
delete student where name = 'lisi2';
删不掉!!!!!!!!!!!!!!zg还是NB啊
九.约束:
1).什么是"约束":它是"数据库软件"中的一个"实体",跟"表"一样,单独管理。"约束"是由我们建立的,是告诉数据库软件,某些列必须按照 某些规则去添加数据。数据库软件每次涉及到修改这些时,都会参考这个"约束"来检查这些数据,如果数据不符合要求,数据库软件 会自动拦截这些数据,阻止其进入数据库。
2).常用的约束【语句--了解即可。重点掌握--各种约束的意义】:
1).主键约束:
1).什么是"主键":我们非常需要使用一种比较简单的方式,来"区分出表中的每一条记录",可以作为查询、删除、修改的条件来使用。所以,我们可以单独定义一个字段,这个字段的值有个特点:不重复,这样的话,这个字段的每个值都可以唯一标识一条记录
2).什么是"主键约束":定义一个"约束",告诉数据库软件,这列的值不能重复。当我们以后再添加数据时,数据库软件就会为我们监控这列的值, 如果有非法的值,会立即抛出异常。
3).创建主键约束:
方式一:
create table student(
id int primary key,//主键约束
name varchar(100)
)
4).主键约束的说明:
1).一个表中只能设定一个"主键约束";
2)."一个主键约束"可以由1列组成,也可以由多列组成(复合主键、联合主键)。通常使用1列。
联合主键示例:
name(主键) age(主键) sex
zhangsan 20 男
zhangsan 21 男 //OK的
lisi 20 男 //OK的
zhangsan 20 女 //错误
3).如果一个字段被设定为"主键",意味着:这列的值:唯一、非空.
4).建议:主键字段,要使用:没有任何业务意义的数据。因为如果有业务意义,就可能发生更改,如果多表时,更改时会非常困难。
所以:主键字段建议:
1).使用单字段;
2).无业务意义;
5).删除主键约束:
alter table 表名 drop primary key;
注意:这个删除是只删除"约束"本身,不删除之前的主键列,也不更改数据,只意味着:将约束删除,没有约束了。
2).自动增长【方言--只有MYSQL才支持】:
1).之前使用了一个id列作为主键,并且设置了"主键约束",每次添加时需要添加一个不重复的id值,如果长期我们自己来处理这个值,会很不方便。
MySQL为我们提供了一种方式:自动增长列,设定后,由数据库软件根据一个基数,来对这列的值进行自动增长运算,不需要我们来处理了。
2).设置自动增长:
方式一:
create table student(
id intprimary key auto_increment,//设置主键约束,同时设定自动增长
name varchar(100)
)
添加时:
insert into student(null,'zhangsan');//第一个字段为null,会自动应用:自动增长
3).自动增长约束说明:
1).必须对数值类型设置自动增长;
2).一个表中只能有一个自动增长列;
3).一般都是用在"主键"上。
4).删除自动增长约束:
alter table 表名 modify 字段名 数据类型(长度) [这里只要不出现自动增长约束即可,如果原来有这个约束,就表示删除此约束]
示例:
alter table student modify id int primary key;//新约束会覆盖原来的所有约束。
3).非空约束:
1).非空约束:可以约束某列的值,不接收:null。
2).设置非空约束:
方式一:
create table student(
id int primary key auto_increment,
name varchar(100) not null,//定义非空约束
age int
)
添加时:
insert into student values(null,null,20);//第一个null可以(自动增长),第二个null不可以(此字段被设置为非空约束)
insert into student values(null,'null',20);//OK的
insert into student values(null,'',20);//OK的
insert into student values(null,' ',20);//OK的
3).非空约束说明:
1).一个表中可以有多个字段设定为"非空约束";
4).删除非空约束:
alter table 表名 modify 字段名 数据类型(长度) [这里只要不出现非空约束即可,如果原来有这个约束,就表示删除此约束]
示例:
alter table student modify name varchar(100);//新约束会覆盖原来的所有约束。
4).唯一约束:
1).唯一约束:可以约束某列值的必须唯一。但可以有NULL。
2).设置唯一约束:
方式一:
create table student(
id int primary key auto_increment,
name varchar(100) not null,
cardid char(18) unique //设置"唯一约束"
)
添加时:
insert into student values(null,'zhangsan','220105200001010207');//OK的
insert into student values(null,'zhangsan',null);//OK的
insert into student values(null,'lisi','220105200001010207');//错误
3).唯一约束说明:
1).一个表中可以有多个字段设置为"唯一约束";
2).被"唯一"约束的字段,可以添加:null(状态,不是值)
4).删除唯一约束:
ALTER TABLE 表名 DROPINDEX列名;
============================================================================================================================