SQL数据库基础知识
数据库操作在日常工作非常常见,以下知识点你都掌握了吗?
内容大纲
- SQL的相关概述
- 环境搭建
- SQL语句分类
- DDL
- DML
- DCL
- DQL
- DDL语句之操作数据库
- DDL语句之操作数据表
- DML语句之操作表数据(增删改)
- DQL语句之操作表数据(查)
1.SQL概念
结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范,是数据库认识的语句。不同的数据库生产厂商都支持SQL语句,但都有自己特有内容.
1.1数据库概念
数据库就是存储数据的仓库,其本质是一个文件系统,按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询(CURD)操作。
C: Create, 增
U: Update, 改
R: Read, 查
D: Delete, 删
1.2关系型数据库与非关系型数据库
关系型数据
指采用了关系模型来组织数据的数据库。 关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
非关系型数据
又被称为NoSQL(Not Only SQL ),意为不仅仅是SQL,对NoSQL 最普遍的定义是“非关联型的”,强调 Key-Value 的方式存储数据。
1.3 SQL常用数据类型
-- SQL 根据每列值的不同, 数据类型也不同, 常用的如下.
整数: int
小数; decimal, float, double
字符串: varchar(长度), char(长度)
日期: date, datetime
2.MySql基础语法
建议先通过小皮安装MySql数据库,并将mysql.exe的路径添加到path
建议通过Pycharm 专业版或DataGrip运行MySql相关命令及可视化
2.1 SQL通用语法
- SQL语句可以写单行, 也可以写多行, 最后以 分号; 结尾.
- 为了阅读方便, 我们可以用 者 空格来隔开SQL语句.
- SQL语句不区分大小写, 为了阅读方便, 建议: 关键字大写, 其它小写.
- SQL的注释写法如下 -- 单行注释 '# 单行注释' / 多行 注释 /
-- 5. 我们目前在PyCharm或者DataGrip中写SQL语句, 是选中执行的, 即: 不要漏选, 防止出错.
2.2 SQL语句分类
DDL语句, DataBase Definition Language, 数据定义语言
作用对象: 数据库, 数据表, 列的, 进行: CURD.
关键字: create, drop, alter, show
DML语句, DataBase Manipulation Language, 数据操作语言.
作用对象: 表数据的, 进行: 增删改操作, 统称为: 更新语句
关键字: insert, delete, update
DQL语句, DataBase Query Language, 数据查询语言.
作用对象: 表数据的, 进行: 查询操作.
关键字: select, from, where...
DCL语句, DataBase Control Language, 数据控制语言.
作用对象: 设置权限, 访问级别(隔离级别), 创建用户等的...
3.DDL语句
3.1DDL操作数据库
- 查看所有的数据库.
1
show databases; # ctrl + 回车, 执行该行代.
- 查看所有的数据库.
- 创建数据库.
1
2
3
4
5create database day01 character set 'utf8'; # 创建day01数据库, 采用: utf8 码表. 库不存在就创建, 存在就: 报错.
create database if not exists day01 character set 'utf8'; # 创建day01数据库, 采用: utf8 码表. 库不存在就创建, 存在就: 啥也不做.
# 上述格式, 语法糖1: character set => 可以写成 charset
create database day02 charset 'utf8';
- 创建数据库.
- 查看对象数据库.
1
show create database day01; # utf8
- 查看对象数据库.
- 修改数据库码表.
1
alter database day03 charset ='gbk';
- 修改数据库码表.
- 删除数据库.
1
2drop database day01; # 删除数据库, 如果数据库存在就删除, 不存在就: 报错.
drop database if exists day01; # 删除数据库, 如果数据库存在就删除, 不存在就: 啥也不做.
- 删除数据库.
- 应用数据库. ### 3.2DDL操作数据表
1
use day01; #之后: 建表, 查表, 查数据等操作, 都是基于数据库完成的.
- 应用数据库.
- 查看当前库中, 所有的数据表.
1
show tables;
- 查看当前库中, 所有的数据表.
- 查看表结构.
1
2show create table student; # 查看建表的详细过程.
describe student; # 语法糖, desc student;
- 查看表结构.
- 创建数据表.
1
2
3
4
5
6create table if not exists student(
sid int primary key, # 学生id, primary key: 主键约束, 特点为: 唯一, 非空.
name varchar(20) not null, # 学生姓名, 非空约束(即: 不能为空)
gender varchar(2), # 学生性别
age int # 学生年龄, 整数.
);
- 创建数据表.
- 删除数据表.
1
drop table if exists student;
- 删除数据表.
- 修改表(名字) ### 3.3 DDL操作列
1
2# 格式: rename table 旧表名 to 新表名;
rename table student to stu;
- 修改表(名字)
- 查看表结构.
1
desc stu;
- 查看表结构.
- 给表新增一列, desc varchar(200), 非空约束.
1
alter table stu add `desc` varchar(200) not null; # 如果列名和关键字重名, 记得用 反引号包裹.
- 给表新增一列, desc varchar(200), 非空约束.
- 修改表的字段(列), 只修改: 数据类型, 约束. 将desc列改为: int类型..
1
alter table stu modify `desc` int; # 因为没有加非空约束, 所以本次会认为, 不要非空约束了, 即: 会删除它.
- 修改表的字段(列), 只修改: 数据类型, 约束. 将desc列改为: int类型..
- 修改表的字段(列), 修改: 列名, 数据类型, 约束.
1
2-- 格式: alter table 表名 change 旧列名 新列名 数据类型 约束;
alter table stu change `desc` address varchar(10) not null;
- 修改表的字段(列), 修改: 列名, 数据类型, 约束.
- 删除表的字段 ## 4 DML语句 ### 4.1添加数据
1
2# 格式: alter table 表名 drop 旧列名;
alter table stu drop address;
- 删除表的字段
- 查看表数据, 这个数据DQL语句, 先用一下, 稍后详解.
1
2
3select * from stu;
# 查看表结构.
desc stu;
- 查看表数据, 这个数据DQL语句, 先用一下, 稍后详解.
- 添加表数据.
1
2
3
4
5
6
7
8
9
10
11
12# 场景1: 添加单条数据, 格式为: insert into 表名(列名1, 列名2, 列名3...) values(值1, 值2, 值3...);
insert into stu(sid, name, gender, age) values (1, '乔峰', null, 38);
insert into stu(sid, name, gender, age) values (2, null, null, 38); # 报错, name列有非空约束, 不能为null
场景2:添加多条数据, 格式为: insert into 表名(列名1, 列名2, 列名3...) values(值1, 值2, 值3...), (...), (...);
insert into stu(sid, name, gender, age)
values
(2, '虚竹', null, 26),
(3, '段誉', '男', 21),
(4, '阿朱', '女', 35),
(5, '梦姑', '女', 23),
(6, '钟灵儿', '女', 19);
- 添加表数据.
- 上述格式的变形版. 不一定非得是全列名, 只要值的个数, 类型 和
列名的个数, 类型保持一致即可.
1
insert into stu(sid, name) values (7, '木婉清');
- 上述格式的变形版. 不一定非得是全列名, 只要值的个数, 类型 和
列名的个数, 类型保持一致即可.
- 上述格式的语法糖, 掌握, 实际开发一般是用这个.. ### 4.2DML修改数据
1
insert into stu values (8, '鸠摩智', '男', 49); # 如果不写列名, 则默认是: 全列名, 需要给每一个列都要传入值.
- 上述格式的语法糖, 掌握, 实际开发一般是用这个..
- 修改 sid为3的数据, 姓名为: 段氏小王子, 渣男
1
update stu set name='段氏小王子', gender='渣男' where sid = 3;
- 修改 sid为3的数据, 姓名为: 段氏小王子, 渣男
- 危险操作, 修改数据时, 没有写 where条件,
则会一次性修改表中所有的数据. ### 4.3DML删除数据
1
update stu set name='段氏小王子', gender='渣男';
- 危险操作, 修改数据时, 没有写 where条件,
则会一次性修改表中所有的数据.
- 正常删除数据, 删除id > 3的数据.(主键ID不变)
1
delete from stu where sid > 3;
- 正常删除数据, 删除id > 3的数据.(主键ID不变)
- 删除数据, 删除id > 3的数据.(主键ID改变) ## 5.备份表数据
1
truncate table stu where sid > 3;
- 删除数据, 删除id > 3的数据.(主键ID改变)
- 场景1: 备份表不存在.
1
create table stu_tmp select * from stu;
- 场景1: 备份表不存在.
- 场景1: 备份表存在.
1
insert into hero_tmp select * from hero;
- 场景1: 备份表存在.