一、数据库三层结构
1.所谓安装mysql数据库,就是在客户端安装一个数据库管理系统(DBMS),这个程序可以管理多个数据库。
2.一个数据库可以创建多个表,以存储信息。
3.mysql数据库,普通表的本质仍是文件。
4.数据在数据库中的存储方式:表的一行称为记录,在java程序中,条记录往往用一个对象表示。
5.sql语句分类:
1)DDL:数据定义语句(如create 表 库)
2)DML:数据操作语句(如insert(插入)、update(更新)、delete(删除))
3)DQL:查询语句(select)
4)DCL:数据控制语句(管理数据库,比如用户权限grant、revoke)
二、数据库操作
1.创建数据库
#演示数据库的操作
#创建一个名为myDb01的数据库
create database myDb01;
#删除数据库指令
drop database myDb01;
#创建一个使用utf-8字符集的数据库myDb02
#character set指定数据库采用的字符集,如果不指定,默认是utf8
create database myDb02 character set utf8;
#创建一个使用 utf8 字符集,并带校对规则的 hsp_db03 数据库
#collate 指定数据库字符集的校对规则,utf8_bin区分大小写,utf8_general_ci不区分大小写,默认是#utf8_general_ci
create database myDb02 character set utf8 collate utf8_bin;
#下面是一条查询的 sql , select 查询 * 表示所有字段 from从哪个表 where从哪个字段
select*from table01
where name='tom';
2.查看、删除数据库
#演示删除和查询数据库
#查看当前数据库服务器中的所有数据库
show database;
#查看前面创建的 myDb01 数据库的定义信息
show create database `myDb01`;
#在创建数据库,表的时候,为了规避关键字,可以使用反引号解决
#删除前面创建的 myDb01 数据库
drop database myDb01;
3.备份恢复数据库
sql
#备份 myDb01 和 myDb02 库中的数据,并恢复
#备份数据库(在Dos执行)命令行
mysqldump -u root -p -B myDb01 myDb02>d:\\fold.sql;
#恢复数据库(注意:进入 Mysql 命令行再执行)
source d:\\fold.sql;
#备份数据库中的表
mysqldump -u root -p -B myDb01 表1 表2 表n>d:\\文件名.sql;
4.创建表
create table 表名(
field1 datatype,
field1 datatype,
field1 datatype
)character set 字符集 collate 校对规则 engine 存储引擎;
分类 | 数据类型及其说明 |
---|---|
数值类型 | BIT(M):位类型,M指定位数,默认值为1,范围是1-64 TINYINT[UNSIGNED]:占一个字节,带符号的范围是-128-127,无符号0-225,默认是有符号 SMALLINT[UNSIGNED] :2个字节,带符号的范围是-2^15-2^15-1,无符号0-2^16-1 MEDIUMINT[UNSIGNED]: 3个字节,带符号的范围是-2^23-2^23-1,无符号0-2^24-1 INT[UNSIGNED]:4个字节,带符号的范围是-2^31-2^31-1,无符号0-2^32-1 BIGINT[UNSIGNED] :8个字节,带符号的范围是-2^63-2^63-1,无符号0-2^64-1 FLOAT[UNSIGNED]:占用空间四个字节 DOUBLE[UNSIGNED]:表示比FLOAT精度更大的小数,占用8个字节 DECIMAL(M,D)[UNSIGNED]:定点数M指定长度,D表示小数点的位数 |
文本、二进制类型 | char(size):固定长度字符串,最大长度为225 varchar(size):可变长度字符串,长度最大为2^16-1 BLOB LONGBLOB:BLOB二进制数据0-2^16-1,LONGBLOB二进制数据0-2^32-1 TEXT LONGTEXT:文本TEXT 0-2^16-1,LONGTEXT 0-2^32-1 |
时间、日期 | DATE/DATETIME/TimeStamp:日期类型(YYYY-MM-DD)(YYYY-MM-DD HH:MM:SS),TimeStamp表示时间戳,它可以自动记录insert、update操作的时间 |
[mysql常用数据类型] |
使用规范:在满足需求的情况下,尽量选用占用空间小的。
5.修改表
使用ALTER TABLE语句追加、修改或删除的语法
|-----|-------------------------------------------------------------------------------------------|
| 添加列 | alter table tablename add(column datatype [default expr] [,column datatype ]... ); |
| 修改列 | alter table tablename modify(column datatype [default expr] [,column datatype ]... ); |
| 删除列 | alter table tablename drop(column datatype [default expr] [,column datatype ]... ); |
[修改表-基本介绍]
修改表名:rename table 表名 to 新表名
修改表字符集:alter table 表名 character set 字符集;
sql
#创建一个表 Student
create table Student(
name varchar(10),
age int,
gender varchar(10),
id varchar(10)
)charset utf8 collate utf8_bin engine innodb;
-- 在表Student上添加一个grade列(在gender之后)
alter table Student
add grade int not null default ''
after gender;
-- 删除age列
alter table Student
modify age int not null default '';
-- 表名改为Stu
rename table Student to Stu;
-- 修改表的字符集为utf8
alter table Stu character set utf8;
-- 列名name修改为stu_name
alter table Stu
change `name` `stu_name` varchar(10) not null deafult''
-- 显示表结构,可以查看表的所有列
desc Stu
6.Insert语句
sql
#向Student中插入一条记录
-- 在values中列出的数据位置必须与被加入的列的排列位置相对应
-- 字符和日期数据必须包括在单引号中
-- 列可以插入空值,前提是该字段允许为空
-- 如果是给所有字段添加数据,可以不写前面字段名称
-- 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
-- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给 null
-- 如果我们希望指定某个列的默认值,可以在创建表时指定
insert into `Student`(stu_name,gender,grade,id)
values('小明','boy',100,'0423898');
7.update语句
#update语句的使用
-- 将所有学生的成绩修改为100
update Stu set grade=100;
-- 将名为小明的学生id修改为01
update Stu set id=0
where stu_name='小明';
-- update语法可以用新值更新原有表行中的各列
-- set子句提示要修改哪些列和给予哪些值
-- where子句指定要更新哪些行,若没有where子句,则更新所有的行
-- 如果需要修改多个字段,可以通过 set 字段1=值1,字段2=值2...
8.delete语句
-- 删除表中名称为'小明'的记录
delete from Stu
where name='小明';
-- 删除表中所有记录
delete from Stu;
-- delete不能删除某一列的值,可以用update设为null
-- 删除这个表
drop table Stu;
9.select语句
-- 查询表中所有学生信息
select*from Stu
-- 查询表中所有学生的姓名和对应的成绩。
select `name`,grade FROM student;
-- 过滤表中重复数据,要查询的数据每个字段都相同,才会去重
select distinct grade from Stu;
#向学生中添加成绩
alter table Stu
add grade1 int;
alter table Stu
add grade2 int;
#在select语句中可以使用as语句
selec column_name as 别名 from 表名
-- 统计每个学生的总分
select stu_name as name,(grade+grade1+grade2) as total_grade
from Stu;
在where子句中经常使用的运算符
比较运算符:
- > < <= >= = <> !=
- between...and... 显示在某一区间的值
- in(set) 显示在in中的值,例:in(100,200)
- like '张...' not like ' '模糊查询
- is null 判断是否为空
逻辑运算符:
-
and:多个条件同时成立
-
or:多个条件任一成立
-
not:不成立,例:where not(grade>90)
-- 查询grade为98,87,65的学生
selectfrom Stu
where grade in(98,87,65);
selectfrom Stu
where grade=98 or grade=87 or grade=65;
-- 查询所有姓陈的学生成绩
select*from Stu
wherename
like '陈%';