数据的存储方式
-
数据保存在内存
int[] arr = new int[]{1, 2, 3, 4}; ArrayList<Integer>list = new ArrayList<Integer>(); list.add(1); list.add(2);
new出来的对象存储在堆中.堆是内存中的一小块空间
优点:内存速度快
缺点:断电/程序退出,数据就清除了.内存价格贵 -
数据保存在普通文件
优点:永久保存
缺点:查找,增加,修改,删除数据比较麻烦,效率低 -
数据保存在数据库
优点:永久保存,通过SQL语句比较方便的操作数据库
数据库的优点
数据库是按照特定的格式将数据存储在文件中,通过SQL语句可以方便的对大量数据进行增、删、改、查操作,数据库是对大量的信息进行管理的高效的解决方案。
常见数据库
Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
SQLite: 嵌入式的小型数据库,应用在手机端。
常用数据库:MYSQL,Oracle
在web应用中,使用的最多的就是MySQL数据库,原因如下:
-
开源、免费
-
功能足够强大,足以应付web应用开发(最高支持千万级别的并发访问)
-
SQL语句分类
-
DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等 -
DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update等 -
DQL(Data Query Language) 数据查询语言
对数据库进行数据查询,关键字select。 -
DCL(Data Control Language)数据控制语言(了解)
是用来设置或更改数据库用户或角色权限的语句,这个比较少用到。#### SQL通用语法
-
SQL语句可以单行或多行书写,以分号结尾。
-
可使用空格和缩进来增强语句的可读性。
-
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
SELECT * FROM student;
-
3种注释
单行注释: – 注释内容
多行注释: /* 注释 */# 注释内容(mysql特有的单行注释)#### 创建数据库
-
直接创建数据库
CREATE DATABASE 数据库名;
-
判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
-
创建数据库并指定字符集(编码表)
CREATE DATABASE 数据库名 character set 字符集;
-
具体操作:
-
直接创建数据库db1
CREATE DATABASE db1;
-
判断是否存在并创建数据库db2
CREATE DATABASE IF NOT EXISTS db2;
-
创建数据库db3并指定字符集为gbk
CREATE DATABASE db2 CHARACTER SET gbk;
查看数据库
- 查看所有的数据库
SHOW DATABASES;
查看某个数据库的定义信息
SHOW CREATE DATABASE 数据库名;
DDL修改和删除数据库
修改数据库字符集
ALTER 表示修改
ALTER DATABASE 数据库 default character set 新的字符集;
具体操作:
-
将db3数据库的字符集改成utf8
ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;
### 删除数据库
drop --表示删除数据库或表
DROP DATABASE 数据库名;
具体操作:
-
删除db2数据库
DROP DATABASE db2;
DDL使用数据库
讲解
具体操作:
-
查看正在使用的数据库
SELECT DATABASE();
使用db1数据库
USE db1;
小结
DDL语句操作 | 关键字 |
---|---|
创建 | create database 数据库名; |
修改 | alter database character set 字符集; |
查看 | show databases; |
删除 | drop database 数据库名; |
DDL创建表
讲解
前提先使用某个数据库(db1)
创建表
CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2...);
建议写成如下格式:
CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2
);
关键字说明:
CREATE -- 表示创建
TABLE -- 表示表
MySQL数据类型
MySQL中的我们常使用的数据类型如下:
详细的数据类型如下(不建议详细阅读!)
具体操作:
创建student表包含id,name,birthday字段
CREATE TABLE student (
id INT,
name VARCHAR(20),
birthday DATE
);
小结
讲解
-
查看某个数据库中的所有表
SHOW TABLES;
-
查看表结构
DESC 表名;
-
查看创建表的SQL语句
SHOW CREATE TABLE 表名;
具体操作:
-
查看mysql数据库中的所有表
SHOW TABLES;
查看student的创建表SQL语句
SHOW CREATE TABLE student;
小结
- 查看某个数据库中的所有表:show tables;
- 查看表结构:desc 表名;
- 查看创建表的SQL语句:show create table 表名;
DDL删除表
讲解
快速创建一个表结构相同的表
CREATE TABLE 表名 LIKE 其他表;
具体操作:
-
创建s1表,s1表结构和student表结构相同
CREATE TABLE s1 LIKE student;
删除表
-
直接删除表
DROP TABLE 表名;
-
判断表是否存在并删除表
DROP TABLE IF EXISTS 表名;
具体操作:
-
直接删除表s1表
DROP TABLE s1;
判断表是否存在并删除s1表
DROP TABLE IF EXISTS s1;
小结
- 快速创建一个表结构相同的表:CREATE TABLE 表名 LIKE 其他表;
- 删除表语法:DROP TABLE 表名;
DDL修改表结构
讲解
修改表结构使用不是很频繁,只需要了解,等需要使用的时候再回来查即可
-
添加表列
ALTER TABLE 表名 ADD 字段名 类型;
具体操作:
-
为学生表添加一个新的字段remark,类型为varchar(20)
ALTER TABLE student ADD remark VARCHAR(20);
修改列类型 -
ALTER TABLE 表名 MODIFY 字段名 新的类型;
具体操作:
-
将student表中的remark字段的改成varchar(100)
ALTER TABLE student MODIFY remark VARCHAR(100);
修改列名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;
具体操作:
-
将student表中的remark字段名改成intro,类型varchar(30)
ALTER TABLE student CHANGE remark intro varchar(30);
删除列
ALTER TABLE 表名 DROP 字段名;
具体操作:
-
删除student表中的字段intro
ALTER TABLE student DROP intro;
修改表名
RENAME TABLE 表名 TO 新表名;
具体操作:
-
将学生表student改名成student2,再删除student2表
RENAME TABLE student TO student2; DROP TABLE student2;
修改字符集
ALTER TABLE 表名 character set 字符集;
具体操作:
-
将sutden2表的编码修改成gbk
ALTER TABLE student2 character set gbk;
小结
- 所有修改表前面的语法都是相同的?ALTER TABLE 表名
- 添加一列:add 字段名 类型
- 修改类型:modify 字段名 新的类型
- 修改字段名和类型:change 旧字段名 新字段名 类型
- 删除一列:drop 字段名
DML插入记录(重点)
目标
能够掌握往表中添加记录
讲解
创建student表包含id,name,birthday,sex,address字段。
CREATE TABLE student (
id INT,
name VARCHAR(20),
birthday DATE,
sex char(2),
address varchar(50)
);
插入全部字段
-
所有的字段名都写出来
INSERT -- 表示往表里插入记录 INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
-
不写字段名
INSERT INTO 表名 VALUES (字段值1, 字段值2...);
插入部分数据
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
没有添加数据的字段会使用NULL
-
关键字说明
INSERT INTO 表名 – 表示往哪张表中添加数据 (字段名1, 字段名2, …) -- 要给哪些字段设置值 VALUES (值1, 值2, …); -- 设置具体的值
-
具体操作:
- 插入部分数据,往学生表中添加 id, name, age, sex数据
INSERT INTO student (id, NAME, age, sex) VALUES (1, '张三', 20, '男');
-
向表中插入所有字段
- 所有的字段名都写出来
INSERT INTO student (NAME, id, age, sex, address) VALUES ('李四', 2, 23, '女', '广州');
- 不写字段名
INSERT INTO student VALUES (3, '王五', 18, '男', '北京');
注意
- 值与字段必须对应,个数相同,类型相同
- 值的数据大小必须在字段的长度范围内
- 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
- 如果要插入空值,可以不写字段,或者插入null
小结
- 向表中添加一条完整记录:
所有的字段都写出来: INSERT INTO 表名 (字段1, 字段2, …) VALUES (值1, 值2, …);
不写字段名: INSERT INTO 表名 VALUES (值1, 值2, …); - 向表中添加一条记录部分列:必须写字段名,否则不知道添哪个字段.
INSERT INTO 表名 (字段1, 字段2, …) VALUES (值1, 值2, …);
DML更新表记录
目标
能够掌握更新表记录
讲解
-
不带条件修改数据
UPDATE 表名 SET 字段名=新的值;
-
带条件修改数据
UPDATE 表名 SET 字段名=新的值 WHERE 条件
-
关键字说明
UPDATE: 表示修改记录 SET: 要改哪个字段 WHERE: 设置条件
-
具体操作:
-
不带条件修改数据,将所有的性别改成女
UPDATE student SET sex='女';
-
-
带条件修改数据,将id号为2的学生性别改成男
UPDATE student SET sex='男' WHERE id=2;
一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京
UPDATE student SET age=26, address='北京' WHERE id=3;
小结
- 不带条件的更新数据库记录:UPDATE TABLE SET 字段名=新的值;
- 带条件:UPDATE TABLE SET 字段名=新的值 WHERE 条件;
DML删除表记录
目标
能够掌握删除表记录
讲解
-
不带条件删除数据
DELETE -- 删除记录 DELETE FROM 表名;
-
带条件删除数据
DELETE FROM 表名 WHERE 条件;
-
truncate删除表记录
TRUNCATE TABLE 表名;
truncate和delete的区别:
- delete是将表中的数据一条一条删除
- truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样
具体操作:
-
带条件删除数据,删除id为3的记录
DELETE FROM student WHERE id=3;
不带条件删除数据,删除表中的所有数据
DELETE FROM student;
小结
- 指定条件删除:DELETE FROM 表名 WHERE 条件;
- 没有条件删除所有的记录:DELETE FROM 表名;
- 删除表结构再创建表:TRUNCATE TABLE 表名;
DQL没有条件的简单查询
目标
能够掌握简单查询
讲解
注意:查询不会对数据库中的数据进行修改,只是一种显示数据的方式。
查询表中所有列数据
- 写出查询每列的名称
SELECT -- 表示查询
SELECT 字段名1, 字段名2, ... FROM 表名;
具体操作:
SELECT id, NAME ,age, sex, address FROM student;
使用*表示所有列
SELECT * FROM 表名;
具体操作:
SELECT * FROM student;
查询表中指定列数据
查询指定列的数据,多个列之间以逗号分隔
SELECT 字段名1, 字段名2 FROM 表名;
具体操作:
查询student表中的name 和 age 列
SELECT NAME, age FROM student;
别名查询
-
查询时给列、表指定别名需要使用AS关键字
-
使用别名的好处是方便观看和处理查询到的数据
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
注意:查询给表取别名目前还看不到效果,需要到多表查询的时候才能体现出好处
AS关键字可以省略 -
具体操作:
- 查询sudent表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”
SELECT NAME AS 姓名, age AS 年龄 FROM student;
清除重复值
-
查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
-
具体操作:
- 查询address列并且结果不出现重复的address
SELECT DISTINCT address 城市 FROM student;
查询结果参与运算
-
某列数据和固定值运算
SELECT 列名1 FROM 表名; SELECT 列名1 + 固定值 FROM 表名;
-
某列数据和其他列数据参与运算
SELECT 列名1 + 列名2 FROM 表名;
注意: 参与运算的必须是数值类型
-
需求:
- 添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩
- 查询的时候将数学和英语的成绩相加
-
实现:
-
修改student表结构,添加数学和英语成绩列
ALTER TABLE student ADD math INT; ALTER TABLE student ADD english INT;
-
给每条记录添加对应的数学和英语成绩
查询math + english的和
SELECT math + english FROM student;
查询math + english的和使用别名”总成绩”
SELECT math + english 总成绩 FROM student;
-
查询姓名、年龄,将每个人的数学增加10分
SELECT name, math + 10 FROM student;
小结
- 简单查询格式:SELECT 字段名 FROM 表名;
- 定义别名:SELECT 字段名 AS 别名 FROM 表名;
- 去除重复行:SELECT DISTINCT 字段名 FROM 表名;
- 数值列,可以进行计算,不会影响表中数据
DML语句操作 | 关键字 |
---|---|
添加 | INSERT INTO 表名 (字段名…) VALUES (值…); |
修改 | UPDATE 表名 SET 字段名=新的值 WHERE 条件; |
删除 | DELETE FROM 表名 WHERE 条件; |
查询 | SELETE 字段名 FROM 表名; |
蠕虫复制
目标
了解蠕虫复制
讲解
什么是蠕虫复制:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中
语法格式:
INSERT INTO 表名1 SELECT * FROM 表名2;
作用:将表名2
中的数据复制到表名1
中
具体操作:
- 创建student2表,student2结构和student表结构一样
CREATE TABLE student2 LIKE student;
- 将student表中的数据添加到student2表中
INSERT INTO student2 SELECT * FROM student;
注意:如果只想复制student表中name,age字段数据到student2表中使用如下格式
INSERT INTO student2(NAME, age) SELECT NAME, age FROM student;