数据库(一)
1.数据库入门
1.1 引入
方式一: 数据放到内存
优点:擦写数据的效率很高
缺点:无法永久保存,当程序关闭则数据丢失
方式二: 数据放到普通文件
优点:可以永久保存
缺点:1)频繁地进行IO操作,效率比较低
2)查询数据不方便
方式三: 数据放到数据库软件
优点:1)数据永久保存
2)查询数据方便
3)效率高
1.2 市面上常见的数据库软件
数据库软件,存储和管理数据的仓库。
Oracle: 是甲骨文公司的产品;满足中大型应用;和java语言兼容性非常好的。
SQL Server: 是微软公司的产品;和net平台(c#语言)兼容最好;
DB2: 是IBM的产品。
mysql:开源的数据库产品;满足中小型应用;和java语言兼容非常好
mangoDB: noSQL数据库
现在数据库一般都基于sql语言
sql:structure query language(结构化查询语言),一门和数据库交互的语言
1.3 mysql数据库基本使用
登陆连接:mysql -u root -p;
2 管理数据库(sql语言如何来操作数据库,操作表,操作数据)
1查看所有数据库:show databases;
2.创建新的数据库:create database day14;
指定字符集:create database day15 default character set gbk;
3.修改数据库
修复数据库的字符集:alter database day15 default character set utf8;
4.删除数据库:drop database day15;
3 管理表
操作表之前,需要切换数据库:use 数据库名称;例如:use day14;
1.创建新的表(create table):create table student(id int,name varchar(20),age int);
create table 表名(字段名称 字段类型,字段名称 字段类型.....);
2.修改表(alter table)
添加字段:alter table student add column gender varchar(1);
修改字段类型:alter table student modify column gender varchar(2);
修改字段名称:alter table student change column gender sex varchar(2);
删除字段:alter table student drop column age;
修改表名称:alter table student rename to teacher;
3.查看表:desc student;
show tables: 查看当前数据库的所有表
3.4 删除表:drop table teacher;
4 管理数据
1.插入数据(insert into):INSERT INTO student VALUES(1,'张三',20);
-- 1)插入的字段值顺序一定是按照表的字段顺序
-- 2)字段的数据一定要和值的数量要一致
-- 3)插入部分字段:INSERT INTO student(id,NAME) VALUES(2,'李四');
2.修改数据(update)
-- 1)批量操作(不建议经常使用这种):UPDATE student SET NAME='张三';
-- 2)按条件修改,修改一个字段:UPDATE student SET NAME='李四' WHERE id=2;
-- 3)修改多个字段:UPDATE student SET NAME='王五',age=40 WHERE id=1;
3.删除数据(delete from)
-- 1)全表数据删除:DELETE FROM student;
-- 2)按条件删除数据:DELETE FROM student WHERE id=2;
-- 3)truncate table也可以删除全表数据:TRUNCATE TABLE student;
注意:delete from 和 truncate table 的区别?
-- 1)delete from删除全部,也可以按条件删除,但是truncate table只能全表删除,不能按条件删除
-- 2)delete from删除的数据可以回滚,truncate table删除的数据不能回滚。
-- 3)delete from不可以把自增长约束(auto_increment)重置,truncate table可以把自增长约束(auto_increment)重置
-- truncate table student where id=1; 错误的语法
-- 1.4 查看所有数据(重点中的重点)
SELECT * FROM student;
5 查询数据(重点)
1.查询所有字段:SELECT * FROM student;
2.查询指定的字段:SELECT id,NAME FROM student;
3.查询时指定别名:SELECT id AS '编号',NAME AS '姓名' FROM student;
(AS可以省略)SELECT id '编号',NAME '姓名' FROM student;
4.查询时添加常量列:
-- 临时使用的列可以通过查询时动态添加进去
-- 需求:查询学生数据时添加一个"班级"列。值为“java就业班”
SELECT id AS '编号',NAME AS '姓名','java就业班' AS '班级' FROM student;
5.查询时合并列:
-- 需求:查询每个学生的总分。
SELECT NAME AS '姓名',(servlet+mysql) AS '总成绩' FROM student;
注意: 合并列的字段必须是数值类型的字段,非数值类型合并没有效果
6.查询去除重复记录:
-- 需求:查询有哪些的地区学生
SELECT DISTINCT address FROM student;
-- 另一种语法
SELECT DISTINCT(address) FROM student;
7.条件查询
-- 1)逻辑条件: and(与) ,or(或)
SELECT * FROM student WHERE id=1 AND NAME='张三'; -- (交集,结果数小于或等于任何一个条件的结果数)
SELECT * FROM student WHERE id=2 OR NAME='张三'; -- (并集,结果数一定会大于或等于任何一个条件的结果数)
-- 2)比较条件: > < >= <= = <> (between and)
SELECT * FROM student WHERE servlet>80;
SELECT * FROM student WHERE mysql<=85;
SELECT * FROM student WHERE mysql<85 OR mysql=85;
SELECT * FROM student WHERE servlet>=80 AND servlet<=85;
-- 上面sql代替的语法
SELECT * FROM student WHERE servlet BETWEEN 80 AND 85; -- 在..。之间(包前包后)
-- 需求:查询年龄不等于30岁的学生
SELECT * FROM student WHERE age<>30;
-- 3)判空条件: is null , is not null, ='' , <>''
-- null: 表示没有数据 is null is not null
-- 空字符:有数据 =''
-- 需求:查询没有性别数据的学生(数据‘男’或‘女’)
SELECT * FROM student WHERE gender IS NULL OR gender='';
-- 需求: 查询有性别数据的学生
SELECT * FROM student WHERE gender IS NOT NULL AND gender<>'';
-- 4)模糊条件:like
-- 模糊替代符号:
-- %:替代任意个字符
-- _:替代一个字符
-- 需求: 查询姓‘李’的学生
SELECT * FROM student WHERE NAME LIKE '李%';
-- 需求: 查询姓名中包含‘四’字的学生
SELECT * FROM student WHERE NAME LIKE '%四%';
-- 需求:查询姓‘李’,全名只有两个字的学生
SELECT * FROM student WHERE NAME LIKE '李_';
8.聚合查询
9.分页查询
10.查询后排序
11.分组查询
12.分组查询后筛选