1 数据库入门
1.1引入
方式一:数据放到内存
优点:
1)擦写数据的效率很高!
缺点:
1)无法永久保存,当程序关闭了,数据丢失
方式二:数据放到普通文件
优点:
1)可以永久保存
缺点:
1)频繁地进行IO操作,效率比较低
2)查询数据不方便的!!!
方式三:数据放到数据库软件
优点:
1)数据永久保存下来
2)查询数据非常方便的!!
3)效率不能低
1.2 市面上常见的数据库软件
数据库软件,存储和管理数据的仓库。
Oracle:是甲骨文公司的产品。满足中大型应用。和java语言兼容性非常好的。
SQLServer: 是微软公司的产品。和net平台(c#语言)兼容最好。
DB2:是IBM的产品。
mysql:开源的数据库产品。和java语言兼容非常好。满足中小型应用。
mangoDB: noSQL数据库
mysql:满足中小型应用
oracle:满足中大小应用
1.3mysql数据库基本使用 (cmd命令)
C:\Users\APPle>mysql -u root -p Enter password: **** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 5.5.40 MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> |
2 管理数据库
2.1 查看所有数据库
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | 数据库的元数据 | mysql | 数据库用户信息或软件配置信息 | performance_schema | 数据库软件运行的性能数据 | test | 测试数据库 +--------------------+ 4 rows in set (0.00 sec) |
2.2 创建新的数据库
mysql> create database day14; Query OK, 1 row affected (0.00 sec) |
指定字符集
mysql> create database day15 default character set gbk; Query OK, 1 row affected (0.01 sec) |
2.3 修改数据库
修复数据库的字符集
mysql> alter database day15 default character set utf8; Query OK, 1 row affected (0.00 sec) |
2.4删除数据库
mysql> drop database day15; Query OK, 0 rows affected (0.01 sec) |
3 管理表
操作表之前,需要切换数据库: use 数据库名称 例如 use day14;
3.1 创建新的表(create table)
mysql> create table student(id int,name varchar(20),age int); Query OK, 0 rows affected (0.01 sec)
create table 表名(字段名称 字段类型,字段名称 字段类型.....); |
3.2 修改表(alter table)
添加字段:
mysql> alter table student add column gender varchar(1); Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 |
修改字段类型:
mysql> alter table student modify column gender varchar(2); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 |
修改字段名称:
mysql> alter table student change column gender sex varchar(2); Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 |
删除字段:
mysql> alter table student drop column age; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 |
修改表名称:
mysql> alter table student rename to teacher; Query OK, 0 rows affected (0.01 sec) |
3.3 查看表
mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | age | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ |
show tables: 查看当前数据库的所有表
3.4 删除表
mysql> drop table teacher; Query OK, 0 rows affected (0.01 sec) |
4 管理数据
-- 二、管理数据 -- 1.1插入数据(insert into) -- 需求: 往学生表插入数据 INSERT INTO student VALUES(1,'张三',20); -- 1)插入的字段值顺序一定是按照表的字段顺序 INSERT INTO student VALUES('张三',1,20); -- ERROR 1366 (HY000): Incorrect integer value: 'eric' for column 'id' at row 1 -- 2)字段的数据一定要和值的数量要一致 INSERT INTO student VALUES(2,20); -- ERROR 1136 (21S01): Column count doesn't match value count at row 1 -- 3)插入部分字段 INSERT INTO student(id,NAME) VALUES(2,'李四');
-- 1.2 修改数据(update) -- 需求: 修改学生表 -- 1)批量操作(不建议经常使用这种) UPDATE student SET NAME='张三'; -- 2)按条件修改,修改一个字段 -- 需求: 修改id为2的学生姓名 UPDATE student SET NAME='李四' WHERE id=2; -- 需求: 修改id为1的学生姓名和年龄 -- 3)修改多个字段 UPDATE student SET NAME='王五',age=40 WHERE id=1;
-- 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 查询数据(重点)
5.1查询所有字段
5.2查询指定的字段
5.3查询时指定别名
5.4查询时添加常量列
5.5查询时合并列
5.6查询去除重复记录
5.7条件查询
-- 3.1 查询所有字段 SELECT * FROM student;
-- 3.2 查询指定的字段 SELECT id,NAME FROM student;
-- 3.3 查询时指定别名 SELECT id AS '编号',NAME AS '姓名' FROM student; -- AS可以省略 SELECT id '编号',NAME '姓名' FROM student;
-- 3.4 查询时添加常量列 -- 临时使用的列可以通过查询时动态添加进去 -- 需求: 查询学生数据时添加一个"班级"列。值为“java就业班” SELECT id AS '编号',NAME AS '姓名','java就业班' AS '班级' FROM student;
-- 3.5 查询时合并列 -- 需求: 查询每个学生的总分。 SELECT NAME AS '姓名',(servlet+mysql) AS '总成绩' FROM student; -- 注意: 合并列的字段必须是数值类型的字段。非数值类型合并没有效果 SELECT NAME AS '姓名',(servlet+NAME) FROM student;
-- 3.6 查询去除重复记录(distinct) -- 需求: 查询有哪些的地区学生 SELECT DISTINCT address FROM student; -- 另一种语法 SELECT DISTINCT(address) FROM student;
-- 3.7 条件查询(where) -- 1)逻辑条件: and(与) or(或) -- 当出现两个或两个以上的条件,那么这两个条件直接一定会存在逻辑关系。要么是与关系,要么或关系
-- 需求:查询学生的id为1,且姓名为张三的学生 SELECT * FROM student WHERE id=1 AND NAME='张三'; -- (交集,结果数小于或等于任何一个条件的结果数)
-- 需求:查询学生的id为2,或姓名为张三的学生 SELECT * FROM student WHERE id=2 OR NAME='张三'; -- (并集,结果数一定会大于或等于任何一个条件的结果数)
-- 2)比较条件: > < >= <= = <> (between and) -- 需求: 查询servlet分数大于80分的学生 SELECT * FROM student WHERE servlet>80; -- 需求:查询mysql分数小于或等于85分的学生 SELECT * FROM student WHERE mysql<=85; SELECT * FROM student WHERE mysql<85 OR mysql=85; -- 需求: 查询servlet分数大于或等于80分,且小于或等于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 '李_'; |
5.8聚合查询
5.9分页查询
5.10查询后排序
5.11分组查询
5.12分组查询后筛选
总结:
1)mysql数据结构: 数据库 -> 表 -> 数据
2)管理数据库:
createdatabase
alterdatabase
dropdatabase
showdatabases;
3)管理表:
createtable
altertable
droptable
showtables; / desc 表
4)管理数据
insertinto
update表 set ...
deletefrom 表
12种查询(重点)