数据库
- 存储数据的仓库,数据是有组织的进行存储。
- 英文DataBase,简称DB
数据库管理系统
- 管理数据库的大型软件(DataBase Management System,简称DBMS)
SQL
- Structured Query Language,结构化查询语言
- 操作关系型数据库的语言
- 定义操作所有关系型数据库的统一标准
关系型数据库
关系型数据库就是建立在关系模型基础上的数据库,简单说关系型数据库是由多张能相互相连接的二维表组成的数据库。
优点:
- 都是使用表结构,格式一致,易于维护。
- 都是通用的SQL语言操作,使用方便,可用于复杂查询。
- 数据存储在磁盘中,安全。
使用cmd 登录 mysql
//登录 mysql -u用户名 -p密码 (也可以输密码之前回车)
mysql -uroot -p1234
//退出
exit
数据类型
数据类型分为三类:数值、日期、字符串
常用数据类型:
名称 | 占用空间 | 说明 |
---|---|---|
TINYINT | 1 byte | 小整数值 |
INT 或 INTEGER | 4 byte | 大整数值 |
BIGINT | 8 byte | 极大整数值 |
FLOAT | 4 byte | 单精度浮点数值 |
DOUBLE | 8 byte | 双精度浮点数值 |
DATE | 3 byte | 日期值 |
TIME | 3 byte | 时间值或持续时间 |
DATETIME | 8 byte | 混合日期和时间值 |
CHAR | 0-255 byte | 定长字符串 |
VARCHAR | 0-65535 byte | 变长字符串 |
TEXT | 0-65535 byte | 长文本数据 |
double的使用:
double(总长度, 小数点后保留的位数)
举例:分数的范围0~100,小数点后保留两位,总长度就是 3 + 2 = 5
score double(5, 2)
char和varchar区别:
name char(10) : 无论几个字符都用10个字符空间,存储性能高,浪费空间。
name varchar(10) : 几个字符就用几个字符的空间,存储性能低,节省空间。
SQL语句
- SQL语句可以单行或多行书写,以分号结尾。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
- 注释:单行注释(
--
注释内容 或者#
注释内容(MySQL特有)),多行注释(/*
注释*/
)
分类:
- DDL( Data Definition Language ) 数据定义语言,用来定义数据库对象:数据库,表,列等
- DML( Data Mainipulation Language ) 数据操作语言,用来对数据库中的表的数据进行增、删、改
- DQL( Data Query Language ) 数据查询语言,用来查询数据库中的表的数据
- DCL( Data Control Language ) 数据控制语言,用来定义数据库的访问权限和安全级别及创建用户
DDL:操作数据库、表等
操作数据库
-- 查询
show databases;
-- 创建数据库
create database db1;
-- 创建数据库(判断不存在才创建)
create database if not exists db1;
-- 删除数据库
drop database db1;
-- 删除数据库(判断存在才删除)
drop database if exists db1;
-- 使用数据库
use db1;
-- 查看当前使用的数据库
select database();
创建表、删除表
-- 查询当前数据库下所有表名称
show tables;
-- 查询表结构,desc 是 description(描述) 的缩写
desc tb_user;
-- 创建表
create table tb_user(
id int,
username varchar(20),
password varchar(32)
);
-- 删除表
drop table tb_user;
-- 删除表时判断表是否存在
drop table if exists tb_user;
修改表、列
-- 修改表名: alter table 表名 rename to 新表名;
alter table tb_user rename to tb_user2;
-- 添加一列:alter table 表名 add 列名 数据类型;
alter table tb_user2 add phone varchar(18);
-- 修改数据类型: alter table 表名 modify 列名 新数据类型;
alter table tb_user2 modify phone char(15);
-- 修改列名和数据类型: alter table 表名 change 列名 新列名 新数据类型;
alter table tb_user2 change phone phoneNumber varchar(18);
-- 删除列: alter table 表名 drop 列名;
alter table tb_user2 drop phoneNumber;
DML:对表中的数据增、删、改
-- 查询所有数据
select * from student;
-- 给指定列添加数据 INSERT INTO 表名(列名1, 列名2,...) VALUES (值1,值2,...);
insert into student(id, name) values(1,'张三');
-- 给所有列添加数据(列名可以省略)
insert into student(id, name, gender, birthday, score, email, tel, status) values
(2, '霍华德', '男', '1987-12-05', 34.2, 'huohuade@163.com', '13894943838', 2)
;
-- 批量添加数据
insert into student(id, name, gender, birthday, score, email, tel, status) values
(3, '库里', '女', '1998-12-05', 4.2, 'huoh343@163.com', '13894943838', 2),
(4, '霍元甲', '男', '1987-12-05', 34.25, 'kkkkade@163.com', '13894946666', 6),
(5, '华德', '男', '1970-12-05', 99.29, 'huohuade@163.com', '13894943838', 1)
;
-- 修改数据: UPDATE 表名 SET 列名1=值1, 列名2=值2,... WHERE 条件
-- 注意:如果 update 语句没有加 where 条件,则会将表中所有的数据全部修改!
update student set birthday = '2002-02-20', score = 78.50 where id = 4;
-- 删除:DELETE FROM 表名 WHERE 条件;
delete from student where name = '库里';
DQL:对表中的数据进行查询
基础查询
-- 查询多个字段 SELECT 字段1,字段2,... FROM 表名;
-- 查询所有列可以用 * 省略(select * from stu),项目中不要使用这种查询
select name,age from stu;
select * from stu;
-- 去除重复记录 SELECT DISTINCT 字段列表 FROM 表名;
select distinct address from stu;
-- 起别名 AS (AS也可以省略)
select name, math, english from stu;
select name, math as 数学成绩, english as 英语成绩 from stu;
条件查询 WHERE
-- 查询年龄大于20岁的学生
select * from stu where age > 20;
-- 查询年龄大于等于20岁并且小于30岁的学生
select * from stu where age >= 20 and age <= 30;
select * from stu where age between 20 and 30;
-- 查询年龄等于18或者等于22的学生
select * from stu where age = 18 or age = 22;
select * from stu where age in (18, 22);
-- 查询英语成绩为 null 的学生
-- 注意:null值的比较不能使用 = 或者 !=,需要使用 is 或者 is not
select * from stu where english is null;
模糊查询 LIKE
通配符:
_
:代表单个任意字符
%
:代表任意个数字符
-- 查询姓'马'的学生
select * from stu where name like '马%';
-- 查询姓名第二个字是'花'的学生
select * from stu where name like '_花%';
-- 查询姓名中有'德'的学生
select * from stu where name like '%德%';
排序查询 ORDER BY
排序方式:
- ASC:升序排列(默认值)
- DESC:降序排列
如果有多个排序条件,当前面的条件一样时,才会根据第二个条件进行排序。
-- SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式], 排序字段名2 [排序方式]...;
-- 按照年龄升序排列
select * from stu order by age;
-- 按照数学成绩降序排列
select * from stu order by math desc;
-- 按照数学成绩降序排列,如果数学成绩一样,再安装英语成绩升序排列
select * from stu order by math desc, english asc;
分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
select * from stu limit 0, 3;