1-什么是数据库
数据库就是保留数据的仓库,体现在电脑当中,是一个软件或者是文件系统。然后把这些数据都保存在特殊的文件中,然后使用固定的语言(SQL语句)去操作文件中的数据。
2-数据库的优点
数据库是按照特定的格式将数据存储在文件当中,通过SQL语句可以方便的对大量的数据进行CRUD(增删查改)。
3-常见的数据库
Oracle:它是Oracle公司的大型关系型数据库。系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、安全可靠的。但是它是收费的。
MYSQL:早期由瑞典一个叫MySQL AB公司开发的,后期被sun公司收购,再后期被Oracle收购。体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。MySQL6.x版本也开始收费。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase:Sybase公司的。 已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
4-关系型数据库
关系型数据库是一种通过表格形式存储数据的数据库系统,数据以行和列的形式组织。每个表代表一个实体,列表示属性,行则表示具体记录。关系型数据库使用结构化查询语言(SQL)进行数据操作,支持数据的增删改查和复杂的查询。
5-SQL语句的分类和语法
1-什么是SQL
Structed Query Language结构化查询语言,对于所有的数据库都是通用的,但是任何数据库,也都会有其特有的语言。
2-SQL的特点
SQL语言是一门非过程性的语言,每一条语句执行完都会有一个结果出现,多条语句之间没有影响。
3-SQL语句的分类
-
DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:create drop alter truncate(清空数据记录) show等
-
DML(Data Manipulation Language)数据操作语言
在数据库表中更新,增加和删除记录。如 update(更新), insert(插入), delete(删除) 不包含查询
-
DQL(Data Query Language) 数据查询语言数据表记录的查询。关键字select。
-
DCL(Data Control Language)数据控制语言(了解)
是用来设置或更改数据库用户或角色权限的语句,如grant(设置权限),revoke(撤销权限),begin transaction等。这个比较少用到。
4-SQL通用语法
-
SQL语句可以单行或多行书写,以分号结尾。
-
可使用空格和缩进来增强语句的可读性。
-
MySQL数据库的SQL语句不区分大小写,关键字开发中一般大写。eg:a
SELECT * FROM student;
-
3种注释 单行注释: -- 注释内容 多行注释: /* 注释 */
# 注释内容(mysql特有的单行注释)
6-DDL创建数据库
1.直接创建数据库
CREATE DATABASE 数据库名
2-判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名
3-创建数据库并指定字符集
创建数据库并指定字符集是指在建立数据库时,选择一个特定的字符编码方案来存储文本数据。这确保数据库能够正确处理和显示不同语言和符号的字符。
主要点包括:
字符集:定义了可以使用哪些字符,例如UTF-8支持多种语言的字符。
数据完整性:指定字符集可以避免因字符编码不一致而导致的数据损坏。
兼容性:不同的应用程序或用户可能需要不同的字符集,选择合适的字符集可以提高系统的兼容性。
在创建数据库时,通过设置字符集,开发者确保数据的正确存储和检索。
CREATE DATABASE 数据库名 character set 字符集;
举例
CREATE DATABASE my_database CHARACTER SET utf8mb4;
4查看数据库
1-查看所有的数据库
SHOW DATABASES;
2-查看某个数据库的定义信息
SHOW CREATE DATABASE 数据库名;
7-DDL修改和删除数据库
1-修改数据库字符集
ALTER DATABASE 数据库 default character set 新的字符集;
注意:如果修改数据库指定的编码表是utf8,记住不能写utf-8.。utf-8 是错误的
(mysql不认识utf-8)。
java中的常用编码 : UTF-8; GBK;GB2312;ISO-8859-1;
对应mysql数据库中的编码: utf8; gbk;gb2312; latin1;
2-删除数据库
DROP DATABASE 数据库名;
8-DDL使用数据库
1-查看正在使用的数据库
SELECT DATABASE();
2-使用某个数据库
USE 某个数据库名
9-DDL创建表
1-创建表
CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2
);
最后一个字段不加逗号
2-MYSQL中的数据类型
3-举例
需求:设计一张学生表,请注重数据类型、长度的合理性
1.编号
2.姓名,姓名最长不超过10个汉字
3.性别,因为取值只有两种可能,因此最多一个汉字
4.生日,取值为年月日
5.入学成绩,小数点后保留两位
6.邮件地址,最大长度不超过 64
7.家庭联系电话,不一定是手机号码,可能会出现 - 等字符
8.学生状态(用数字表示,正常、休学、毕业...)
-- 需求1:创建学生表
create table stu(-- 编号id int,name varchar(10), -- 10表示姓名的值最多只能是10个字符sex char(1), -- 1表示性别是1个字符birthday date,score double(5,2), -- 5 表示长度最多是5 2 表示小数点保留2位,即位数 3.14email varchar(64),tel varchar(20),-- 学生状态,tinyint 表示微整型 -- status 0 表示正常 1 休学 2 毕业status tinyint
);
10-DDL查看表
1-查看某个数据库中的所有表格
SHOW TABLES;
2-查看表的结构
DESC 表名;
3-查看创建表的SQL语句
SHOW CREATE TABLE 表名;
11-DDL删除表
1-快速创建一个表结构相同的表格
CREATE TABLE 表名 LIKE 其他表;
2-删除表格
1-直接删除
DROP TABLE;
2-判断表是否存在并删除
DROP TABLE IF EXISTS 表名;
12-DDL修改表的结构
1-添加表列
ALTER TABLE 表名 ADD 字段名/列名 类型;
2-修改列的类型
ALTER TABLE 表名 MODIFY 字段名 新的类型;
3-修改列的名和类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;
4-删除列的字段
ALTER TABLE 表名 DROP 字段名;
5-修改表名
RENAME TABLE 旧表名 TO 新表名;
6-修改字符集
ALTER TABLE 表名 character set 字符集;
13-DML插入记录
1-插入全部字段
也可有写出字段名,但是需要把所有字段都写出来
INSERT INTO 表名 VALUES (字段值1, 字段值2...);
2-插入部分数据
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2...);
3-批量插入数据
INSERT INTO 表名 values(字段值1, 字段值2...),(字段值1, 字段值2...),(字段值1, 字段值2...);
4-具体说明
INSERT INTO 表名 – 表示往哪张表中添加数据
(字段名1, 字段名2, …) -- 要给哪些字段设置值
VALUES (值1, 值2, …); -- 设置具体的值
注意:使用 select * from 表名 --查看该表的所有信息。
5-注意事项
1-字段名就是列,有多少个列就要写多少个值,如果插入的值为空,可以使用null表示插入为空。
2-值的数据类型要和被定义的数据类型一直一致。
3-在mysql中使用单引号表示字符串。
4-date事件类型也是用单引号括起来。
14-DML更新表记录
1-不带条件修改数据
UPDATE 表名 SET 字段名=新的值,字段名=新的值,..;
2-带条件的修改数据
UPDATE 表名 SET 字段名=新的值,字段名=新的值,..WHERE 条件
15-DML删除表记录
1-不带条件的删除数据
DELETE FROM 表名;
表还在,可以操作,只是删除数据。
2-带条件的删除数据
DELETE FROM 表名 WHERE 条件;
3-truncate删除表的记录,属于DDL
TRUNCATE TABLE 表名;
4-truncate和delete的区别
delete是将表中的数据一条一条删除
truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样
16-DQL的简单查询
1-查询表中所有列的数据
#方法1
SELECT -- 表示查询
SELECT 字段名1, 字段名2, ... FROM 表名;
#方法2
SELECT * FROM 表名;
2-查询表中指定列的数据
SELECT 字段名1, 字段名2 FROM 表名;
3-别名查询
使用AS关键字
方便观看和处理查询到的数据
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;`
4-清楚重复值
SELECT DISTINCT 字段名,字段名,.. FROM 表名;
5-查询结果参与运算
1-某列数据和固定值运算
SELECT 列名1 + 固定值 FROM 表名;
2-某列数据和其他列数据运算
SELECT 列名1 + 列名2 FROM 表名;
注意,参与运算的必须是数值类型
17-蠕虫复制
在已有的数据基础之上,将原来的数据进行复制,插入到对应的表当中
具体操作如下
创建一个list2表,结构和list一致
CREATE TABLE list2 LIKE list;
将list表中的数据复制到list2当中
INSERT INTO list2 SELECT * FROM list;
18-DQL查询语句-条件查询(重要)
通用格式
SELECT 字段名... FROM 表名 WHERE 条件;
具体操作
首先引入数据
CREATE TABLE student3 (id int,name varchar(20),age int,sex varchar(5),address varchar(100),math int,english int
);INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES
(1,'lzw',20,'男','陕西',66,78),
(2,'fyq',18,'女','深圳',58,87),
(3,'hjx',55,'男','香港',56,55),
(4,'szl',20,'女','北京',76,65),
(5,'xcj',20,'男','北京',96,NULL),
(6,'mht',57,'男','香港',99,99),
(7,'dd',22,'女','香港',99,99),
(8,'kk',18,'男','南京',56,65);
比较运算符
>
大于<
小于<=
小于等于>=
大于等于=
等于<>
、!=
不等于
1-查询math分数大于80分的学生
SELECT * FROM student3 WHERE math>80;
2-查询english小于等于80分的学生
SELECT * FROM student3 WHERE english<=80;
3-查询age等于20岁的学生
SELECT * FROM student3 WHERE age=20;
4-查询成绩不等于20岁的学生
SELECT * FROM student3 WHERE age!=20;
SELECT * FROM student3 WHERE age<>20;
逻辑运算符
and(&&)
多个条件同时满足 一假即假
or(||)
多个条件其中一个满足 一真即真
not(!)
不满足 取反
5-in关键字
SELECT * FROM 表名 WHERE 字段 in (值1, 值2, 值3);
in
里面的每个数据都会作为一次条件,只要满足条件的就会显示
6-范围
BETWEEN
BETWEEN 值1 AND 值2 -- 表示从值1到值2范围,包头又包尾
eg:查询english成绩大于等于75,且小于等于90的学生
SELECT * FROM student3 WHERE english>=75 AND english<=90;
SELECT * FROM student3 WHERE english BETWEEN 75 AND 90;
19-DQL模糊查询like
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
MySQL通配符有两个:
%
: 表示零个一个多个字符(任意多个字符)
_
: 表示一个字符
eg:
例如: name like '李%' 所有姓张学员。
name like '%李%' 只要有张就可以。
name like '李_' 所有姓张名字为两个字学员。
name like '_李_' 只有中间是张,前面一个字,后面一个字。
20-DQL查询(排序)
SELECT 字段 FROM 表名 ORDER BY 排序的字段 [ASC|DESC];
ASC: 升序排序(默认) DESC: 降序排序
仅仅是对查询出来的结果进行排序,并不会对原有的数据库中的数据产生影响
组合排序
组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。
21-DQL查询语句(聚合函数)
5个聚合函数
count
:在根据指定的列统计的时候,如果这一列中有null的行,该行 不会被统计在其中。按照列去统计有多少行数据。
sum
: 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max
: 计算指定列的最大值
min
: 计算指定列的最小值
avg
: 计算指定列的平均
1-简单使用
SELECT 聚合函数(字段) FROM 表名;
如果值为null则不会统计。
注意!在mysql中null值和任何值相加为null,如果是同一列的值相加,null值会默认为0。
同一条记录,不同列的值相加就会变为null。
这个时候我们就需要使用使用ifnull函数ifnull(列名, 默认值)
22-DQL查询语句(分组)
select … from … group by 列名,列名,....
select ... from ... where 条件1 ... group by ... having 条件2 order by...
注意事项
1-sql语句中where后面不允许添加聚合函数
2-having必须和group by 一起使用,having和where的用法一模一样,where怎么使用having就怎么使用,where不能使用的,having也可以使用,比如说where后面不可以使用聚合函数,但是在having后面是可以使用聚合函数的。
3、where 是在分组之前进行过滤的。having 是在分组之后进行过滤的。
到这里,基本的一些操作就完成了,这是参考文献,然后进行总结出来的,期待下次见面!