java自学之路-----数据库基础应用

来源:互联网 发布:java内存溢出怎么解决 编辑:程序博客网 时间:2024/05/22 23:10

简述{

数据库的使用,需要安装数据库服务器,就是装一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会对每一个引用创建一个数据库。

在保存数据的时候,就需要在数据库里创建一个表,来保存程序中的实体数据,

数据库服务器,数据库和表的关系:

client(客户端)---》mysql(数据库服务器)---》DB(数据库)---》table(表)}


数据库{

创建库: create database db_name(库的名字) CHARACTER SET  utf8(字符集) COLLATE  utf8_general_ci(校对规则,查表可知);——创建带有校对规则的数据库,指定使用码表

显示库:show databases;——显示所有存在的数据库

show create database db_name(库名);——显示指定数据库的定义语句

   \s——显示当前库的信息

删除库:drop database db_name(库名);——删除指定数据库

修改库:alter database db_name(库名) character set gb2312——修改数据库的码表

备份:mysqldump -uroot(用户名) -proot(密码) db_name(库名) >C:\file_name.sql——这是window命令,不能在数据库程序运行,(新开一个cmd)

恢复:source C:\file_name.sql——(只能恢复数据库中的数据,不能恢复数据库)前提:先创建一个新的数据库,并进入该数据库,再执行该数据}

进入库:use db_name——进入指定库,创建表的前提

表{

创建表:create table table_name(

filed1 datatype,

filed2 datatype

)character set utf8 collate utf8_general_ci;——创建具有两个某类型的列,使用utf8编码,带有校对规则的表

约束:

主键:primary key——约束数据不允许重复,不允许——为空,删除主键:alter table table_name drop primary key;

自动增长:auto_increment——一一般用于修饰主键,来防止主键重复,插入数据的时候不需要显示定义主键MySQL,表中只能有一个 AUTO_INCREMENT 字段,而且这个字段必须被定义为键。

唯一:unique——约束数据不能重复

非空:not null——约束数据不能为空

外键:constraint ordersid_FK(外键名,不可以重复) foreign key(ordersid) references orders(id);——定义一个叫ordersid_FK的外键,根据orders的id来约束ordersid这一列的值

表列的属性:常用 int varchar blob date

分类

数据类型

说明

数值类型

BIT(M)

TINYINT [UNSIGNED] [ZEROFILL]

BOOL,BOOLEAN

SMALLINT [UNSIGNED] [ZEROFILL]

INT [UNSIGNED] [ZEROFILL]

BIGINT [UNSIGNED] [ZEROFILL]

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

位类型。M指定位数,默认值1,范围1-64

带符号的范围是-128到127。无符号0到255。

使用0或1表示真或假

2的16次方

2的32次方

2的64次方

M指定显示长度,d指定小数位数

表示比float精度更大的小数

文本、二进制类型

CHAR(size) char(20)

VARCHAR(size)  varchar(20)

BLOB   LONGBLOB

TEXT(clob)          LONGTEXT(longclob)

固定长度字符串

可变长度字符串

二进制数据

大文本

时间日期

DATE/DATETIME/TimeStamp

日期类型(YYYY-MM-DD)  (YYYY-MM-DD HH:MM:SS),TimeStamp表示时间戳,它可用于自动记录insert、update操作的时间

对表的列进行操作:

添加列:alter table table_name add name(列名) datatype (...);

修改列:alter table table_name modify  name(列名) datatype (...);

删除列:alter table table_name drop name(列名);

修改表名:rename table table_name(表名) to new_name(新名);

CRUD:

C:添加数据(insert):insert into table_name(列1,列2,列3) values(值1,值2,值3);——1.可以不指定列名 2.值属性必须一一对应 3.数据大小要在列规定范围内4.字符和日期用单引号 5.未赋值的列为null 6.在命令行插入语句的时候,由于mysql是一个客户端程序,数据与数据库交互的时候需要指定码表(show variables like 'chara%';存:set charact_set_client=gb2312;取:set charact_set_results=gb2312;)

U:修改数据(update):update table_name set 列1 = 值1,列2 = 值2 【where +条件】;——where用于指定修改哪一行的数据

D:删除数据(delete):delete from table_name 【where + 条件】;——1.没有where,删除所有的数据 2.不能删除某一列的值,可以用U来赋值 3.只删除数据,不删表 4.数据一条一条删

truncate table table_name;——先摧毁整个表,在重建表,

R:查询数据(select):{

select * from table_name;——查询表中的所有数据,全部显示

select 列1,列2 from table_name;——查询表中所有数据,显示指定的列

select distinct * from table_name;——查询表中所有数据,过滤重复的数据(以列为整体判断重复),显示所有数据

select 列1=列1+100 from table_name;——查询所有数据,并对列1进行运算。值为null的不能参与运算,+、-、*、/、=、!=、<>

select 列1 【as】 name from table_name;——查询所有数据,显示的时候给列1重命名

select * from table_name where name=‘a’(条件);——查询出符合条件的数据

where使用的运算符:

比较运算符

>   <   <=   >=   =    <>

大于、小于、大于(小于)等于、不等于

BETWEEN  ...AND...

显示在某一区间的值

IN(set)

显示在in列表中的值,例:in(100,200)

LIKE ‘张pattern’

模糊查询,% 代表零个或多个任意字符,_代表一个字符,[a-f]a到f任意字符,[a,f]a或f字符,[^a-f]不是a到f的任意字符。匹配条件用单引号号括起

IS NULL

判断是否为空

逻辑运算符

and

多个条件同时成立

or

多个条件任一成立

not

不成立,例:where not(salary>100);


select * from table_name order by 列1;——查询之后,用列1进行排序。升序:ase(默认)、降序:desc放在列名后面,

select *  from table_name order by 列1 desc,列2;——限用列1降序,相同的用列2 升序排

聚合函数:

单行函数:一行返回一个值,lower(...)

多行函数:       max/min(列名)返回查出数据的某列的最大最小值

count(列名)返回查出数据的某一列有多少行,不包含值为null的

sum(列名)返回查出数据的某列的行的和,该列必须为数值型

avg(列名)返回查出数据的某列的平均值

单行函数和多行函数不可共用:select max(列1),lower(列1) from table_name;

select .... from table_name group by 列1;——查出数据后根据列1进行分组,只能显示分组后的整体信息,不能出现组内的各行的详细信息,(聚合函数的多行函数)

select ... from table_name where ... group by 列1 having...;——1.先根据where过滤,再进行分组,最后根据having过滤 2.having可以使用聚合函数 3.having不能出现别名 4.where放在having前面 5.having通常与group by连用,用于组的过滤


多表查询:

select * from 表1,表2 ;——表1有14行,表2有5行,查出来的结果就是70行数据

select * from 表1 join 表2 on (表1.id = 表2.id);——先将表1和表2连接,在用on的条件进行过滤

select * from 表1 join 表2 on (条件) join 表3 on (条件) where....;——将3个表连接起来

select * from (select * from 表1 group by 列)——临时表

join 表2 ————通过创建一个临时表进行连接

on 条件;

}

mysql中文乱码:lmysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。

client:是客户端使用的字符集。
connection:是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。      
database:是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。   
results:是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。      
server:是服务器安装时指定的默认字符集设定。      
system:是数据库系统使用的字符集设定。



}

0 0
原创粉丝点击