1.什么是数据库:
1).什么是“数据库”:从字面上理解就是一个“存储数据的仓库”,他本身是一个软件,它底层也是基于“文件系统”,将我们的数据存储到硬盘;使用数据库的优势在于,存储大量数据时,能够让我们很快的检索到我们想要的数据,效率非常高;
2).什么是数据库管理系统:数据库管理系统(DataBase Management System,DBMS) 宏观上讲,任何基于“数据库软件”的“管理系统”都称为数据库管理系统。也就是我们的系统的一个重要的目的–管理数据。
2.数据库软件的内部结构:
数据库软件:
|--逻辑数据库--通常是与“项目”对应的
|--表--通常是与项目中的“类”对应
|--列
|--列
3.数据库软件和Java的对应关系:
Java 数据库软件
项目 逻辑数据库
类 表
类的属性 表中列(字段)
属性的数据类型 字段的数据类型
对象 一行记录
登录MySQL:
1).登录本机的MySQL:
C:\>mysql -uroot -p登录密码(回车)
....
....
mysql>(看到这个字样就说明登录成功)
2).登录远程的MySQL:
C:\>mysql --host=MYSQL所在的服务器的IP地址 --user=root --password=登录数据库的密码
4.SQL语言
1.什么是SQL语言:结构化查询语言,它是“数据库软件”的标准语言,由标准化组织统一定义,所有的数据库软件都要遵守这个规则。
2.SQL语言宏观上分为四大类:
1).DDL【次重点】:数据定义语言,用来定义逻辑数据库、表、列的一些语句。使用关键词:create(创建)、alter(修改)、drop(删除)。
2).DCL【不涉及】:数据控制语言,用来定义操作用户以及为其分配权限。
3).DML【重点掌握】:数据操作语言,用来操作“数据”的,可以添加 insert、修改 update、删除 delete 数据。
4).DQL【重中之重】:数据查询语言,用来查询“数据”的,使用 select...form...where...group by...order by...
5.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();
6.表操作相关的SQL语句
1.创建表:
create table 表名(
列名1 数据类型(长度) [约束],
列名2 数据类型(长度) [约束],
....
列名n 数据类型(长度) [约束] (注意:最后一列后面没有逗号);
例如:创建学生信息表:
create table student(
name varchar(100),
age int,
sex char(1)
);(回车)
2.查看数据库中的所有表:
show tables;
3.查看表结构:
desc 表名;
4.查看表内容:
select*from 表名;
5.删除表:
drop table 表名;
6.修改表结构:
1).修改表结构格式:
alter table 表名 add 列名 类型(长度) [约束];
作用:修改表添加列;
2).alter table 表名 modify 列名 类型(长度)约束;
作用:修改列的类型长度及约束。
3).alter table 表名 change 旧列名 新列名 类型(长度) 约束;
作用:修改列名。
4).alter table 表名 drop 列名;
作用:删除列。
5).rename table 表名 to 新表名;
作用:修改表名;
6).alter table 表名 character set 字符集(了解);
作用:修改表的字符集;
为分类表 category 的编码表进行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
关于MySQL中的数据类型
Java的数据类型 MySQL的数据类型
整数:
int int
小数:
float float(m,n)
double double(m,n)
m:表示所有数字位(包括小数部分)的最宽的位数。
n:小数部分的位数;
字符:
char char(1):在MySQL中char表示“字符串”,char(1)才表示一个字符,不论中文还是英文。
字符串:
String char/varchar
大字符串:
String text(longtext)
二进制字符串:
byte[] binary
二进制数据(视频,音频,图片)
byte[] BLOB
日期类型:
String date(日期)
java.util.Date datetime(日期和时间)
注意:
1.char 和varchar在MySQL中都表示“字符串”,在MySQL中没有“字符类型”。
2.char 表示“定长字符串”,定义其长度,如果输入字符串长度不够用“空格”填充,如果长度多了,取定义的长度;
varchar表示“不定长字符串”,如果输入字符串长度不够,输入多少显示多少,没有“空格”填充,如果长度多了,取定义的长度;
3.怎么样选择: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位。
7.记录操作相关的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条件,不会报错,回见这个字段的所有记录全部修改了)
3.删除数据:
delete from 表名 where 条件;(注意:如果没有where条件,不会报错,会删除所有数据)会删除所有符合条件的记录;
8.约束
1.什么是“约束”:它是“数据库软件”中的一个“实体”,跟“表”一样,单独管理。“约束”是有我们建立的,是告诉数据库软件,某些列必须按照某些规则去添加数据。数据库软件每次设计到修改这些数据时,都会参考这个“约束”来检查这些数据,如果数据不符合要求,数据库软件会自动拦截这些数据,组织其进入数据库。
2.常用的约束:
1.主键约束(primary key):
1).什么是"主键":我们非常需要使用一种比较简单的方式,来"区分出表中的每一条记录",可以作为查询、删除、修改的条件来使用。
所以,我们可以单独定义一个字段,这个字段的值有个特点:不重复,这样的话,这个字段的每个值都可以唯一标识一条记录;
2).什么是"主键约束":定义一个"约束",告诉数据库软件,这列的值不能重复。当我们以后再添加数据时,数据库软件就会为我们监控这列的值,如果有非法的值,会立即抛出异常。
3).创建主键约束:
方式一:
create table student(
id int primary key,//主键约束
name varchar(100)
)
其它方式大家参考讲义,自己练习。
4).主键约束的说明:
a).一个表中只能设定一个"主键约束";
b)."一个主键约束"可以由1列组成,也可以由多列组成(复合主键、联合主键)。通常使用1列。
c).如果一个字段被设定为"主键",意味着:这列的值:唯一、非空.
d).建议:主键字段,要使用:没有任何业务意义的数据。因为如果有业务意义,就可能发生更改,如果多表时,更改时会非常困难。
所以:主键字段建议:
1).使用单字段;
2).无业务意义;
e).删除主键约束:
alter table 表名 drop primary key;
2.自动增长(auto_increment)【方言--只有MySQL才支持】:
1).设置自动增长:
方式一:
create table student(
id int primary key auto_increment,//设置主键约束,同时设定自动增长
name varchar(100)
)
2).自动增长约束说明:
1).必须对数值类型设置自动增长;
2).一个表中只能有一个自动增长列;
3).一般都是用在"主键"上。
3).删除自动增长约束:
alter table 表名 modify 字段名 数据类型(长度) [这里只要不出现自动增长约束即可,如果原来有这个约束,就表示删除此约束]
示例:
alter table student modify id int primary key;//新约束会覆盖原来的所有约束。
3.非空约束(not null):
1).非空约束:可以约束魔劣的值,不接收: null。
2).非空约束说明:
一个表中可以有多个字段设定为“非空约束”;
3).删除非空约束:
alter table 表名 modify 字段名 数据类型(长度) [这里只要不出现非空约束即可,如果原来有这个约束,就表示删除此约束]
示例:
alter table student modify name varchar(100);//新约束会覆盖原来的所有约束。
4.唯一约束(unique):
a).唯一约束:可以约束某列值的必须唯一。但可以有null。
b).设置唯一约束:
方式一:
create table student(
id int primary key, auto_increment,
name varchar(100) not null,
cardid char(18) unique //设置"唯一约束"
)
c).唯一约束说明:
1).一个表中可以有多个字段设置为"唯一约束";
2).被"唯一"约束的字段,可以添加:null(状态,不是值)
d).删除唯一约束:
ALTER TABLE 表名 DROP INDEX 列名;
学习目标总结:
1.能够理解数据库的概念
a, 说出数据库的概念
存储数据的仓库。它是一个软件,底层基于"文件系统"。
b, 说出数据库的作用
可以非常高效的管理大量数据。
c, 说出数据库与表的关系
一个逻辑数据库中可以定义多个表。多个表不能重名;
多个逻辑数据库中的表可以重名;
d, 说出常见的数据库
MySQL
Oracle
SQLServer
SQLLite
DB2:
2,能够安装MySQL数据库
参考安装文档,细致的一步一步操作。
3,能够启动,关闭及登录MySQL
1.启动、关闭:
我的电脑-->右键-->管理-->左侧"服务和应用程序"-->选择"服务"-->右侧找到"mysql",可以"启动"和"关闭"
2).登录MySQL
1).登录本机:C:\>mysql -uroot -p登录密码(回车)
2).登录网络:C:\>mysql --host = MySQL的服务器iP地址 --user = root --password = MySQL的登录密码
4,能够使用SQL语句操作数据库
a, 写出创建数据库的SQL语句
create database 数据库名;
b, 写出删除数据库的SQL语句
drop database 数据库名;
c, 写出查看所有数据库的SQL语句
show databases;
d, 写出切换数据库的SQL语句
use 数据库名;
5,能够使用SQL语句操作表结构
a, 写出创建表的SQL语句
create table 表名(
列名1 数据类型(长度) [约束],
列名2 数据类型(长度) [约束],
.... ,
列名n 数据类型(长度) [约束]
);
b, 写出删除表的SQL语句
drop table 表名;
c, 写出添加一列的SQL语句
alter table 表名 add 新列名 数据类型(长度) [约束];
d, 写出删除一列的SQL语句
alter table 表名 drop 列名;
e, 写出查看当前数据库下所有表的SQL语句
show tables;
f, 写出查看表结构的SQL语句
desc 表名;
6,能够使用SQL语句进行数据的添加修改和删除的操作
a, 写出添加数据的SQL语句
1).insert into 表名 values(值1 ,值2 ,...,值n);
2).insert into 表名(字段1,字段2,...,字段n) values(值1,值2,....,值n);
b, 写出修改数据的SQL语句
update 表名 set 字段 = 值,字段 = 值,....,字段 = 值 where 条件;//符合条件的所有记录将全部被修改;
c, 写出删除数据的SQL语句
delete from 表名 where 条件;//符合条件的所有记录将全部被删除
7,能够使用SQL语句添加约束
a, 能够给表加上主键约束
create table student(
id int primary key
)
b, 能够给字段加上唯一约束
create table student(
id int primary key,
cardId char(18) unique
)
c, 能够给字段加上非空约束
create table student(
id int primary key,
cardId char(18) unique,
name varchar(100) not null
)
d, 能够给某一个键添加自动增长
create table student(
id int primary key auto_increment,
cardId char(18) unique
)