数据库
- 存储数据的仓库,数据是有组织的进行存储。
- 英文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语句可以单行或多行书写,以分号结尾。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
- 注释:单行注释( -- 注释内容 或者 #注释内容(MySQL特有)),多行注释()
分类:
- DDL( Data Definition Language ) 数据定义语言,用来定义数据库对象:数据库,表,列等
- DML( Data Mainipulation Language ) 数据操作语言,用来对数据库中的表的数据进行增、删、改
- DQL( Data Query Language ) 数据查询语言,用来查询数据库中的表的数据
- DCL( Data Control Language ) 数据控制语言,用来定义数据库的访问权限和安全级别及创建用户
操作数据库
-- 查询 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;



