运行mysql数据库,并进行登陆操作
mysql -u root -p
数据库操作
创建数据库
CREATE DATABASE IF NOT EXISTS db_name;
查看
SHOW DATABASES;
使用
USE db_name;
查看当前正在使用的库
SELECT DATABASE();
删除
DROP DATABASE db_name;
注意事项:
- mysql对大小写不敏感
- 库名称/表名称/字段名称中包含关键字则需要使用’ '括起来
- 每条语句以分号;作为结尾
表的操作
创建
create table if not exists tb_name(fields_name field_type);
查看
desc tb_name;
show create table tb_name;
删除
drop table tb_name;
查看库中所有表
show tables;
基础增删查改
向表中添加数据
全列插入
insert into tb_name values(根据表的字段顺序进行插入数据)
指定列插入
insert into tb_name(sn, name) values(1011, “zhangs”);
多行插入
insert into tb_name values(第一条数据),(第二条数据),…;
从表中查询数据:
全列查询
select * from tb_name;
指定列查询
select fields_name1, fields_name2, … from tb_name;
查询字段为表达式
select fields_name1 + 10 from tb_name;
查询字段起别名
select fields_name [as] new_name from tb_name;
指定字段去重操作
select distinct fields_name from tb_name;
按照指定字段进行排序
select * from tb_student order by score, snumber desc
默认以升序进行排序/desc表示降序排序,可以对多字节进行排序,第一个字段相等的情况下以第二个字节进行排序,各自都可以设置排序方式
where条件查询:
比较运算符 | 说明 |
---|---|
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
= | 等于,NULL不安全 |
<=> | 等于,NULL安全 |
!=, <> | 不等于 |
BETWEEN m AND n | 范围匹配 ,[m, n] ,如果m <= value <= n,返回TRUE(1) |
IN(a,b,c) | 如果是a,b,c中任意一个,返回TRUE(1) |
LIKE | 模糊匹配 %表示任意多个(包括0个)任意字符;_表示任意一个字符 |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
逻辑运算符 | 说明 |
---|---|
AND | 多个条件必须都为TRUE(1),结果才是TRUE(1) |
OR | 任意一个条件为TRUE(1),结果为TRUE(1) |
NOT | 条件为TRUE(1),结果为FALSE(0) |
分页查询
SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT s, n; / limit n offset s
LIMIT s, n;
s表示从第s条开始,获取n条数据
前段将页号以及每页的数量发送过来: s = 页号*每页数量 n = 每页数量
limit n offset s 从偏移量s开始获取n条数据
表中数据的修改
update tb_name set fields_name = fields_value [where condition];
注意事项
默认没有子条件的情况下 update 语句修改的是表中的所有数据中的某个字段的值,所以修改数据时添加判断条件
表中数据的删除
delete from tb_name where condition;
注意事项
删除数据时,必须添加where条件,否则就是删除表中所有的数据
表的约束
非空/键值/默认值/扩展
非空约束:NOT NULL
约束一个字段数据不能为NULL
例如: id int not null
唯一约束:UNIQUE/UNIQUE KEY (COLUMN_NAME)
约束一个字段中的数据不能出现重复
id int unique
非空且唯一
id int not null unique
主键约束:PRIMARY KEY/PRIMARY KEY(COLUMN_NAME, …)
一张表中只能有一个主键,主键可以是组合主键
not null 和 unique的结合 id primary key;
主键可以是一个组合字段 primary key (id, sn)
默认约束:DEFAULT
给某个字段约束一个默认值,在不主动插入数据的情况下就会默认插入默认值
default_val
check约束
mysql忽略check(col=" or col=" ),在表的最后,进行字段验证
扩展信息
自增属性 :AUTO_INCREMENT
数值列自动增长
外键约束:FOREIGN KEY (COLUMN_NAME) REFERENCES tb_name(column_name)
通过一个字段关联另一张表,约束这个字段的数据必须是另一张关联表中指定列中已有的数据
举例:
CREATE TABLE IF NOT EXISTS tb_name (
id INT AUTO_INCREMENT,
snumber INT NOT NULL,
sname varchar(32) DEFAULT “zhangsan”,
class_id INT,
PRIMARY KEY(id),
UNIQUE KEY(snumber),
FOREIGN KEY(class_id) REFERENCES tb_class(id)
);
聚合查询
mysql中提供的聚合函数
count() / sum() / max() / min() / avg()
分组查询
以某一列作为分组依据,进行聚合信息查询
注意事项
分组查询时查询字段,只能有分组依据字段,以及聚合函数
分组查询时,若要进行条件过滤,则不能使用where,而是使用having
表的设计
三大范式
第一范式:表中的每个字段,都是不可分割的(原子性)
第二范式:表中所有字段都应该与表中的主键相关,而不能部分相关
第三范式:表中每一列,都应该与主键直接相关
ER图
班级表:id,班级名称,班级描述
学生信息表:id,学号,名称,邮箱,所属班级id
课程表:id,课程名称
学生课程成绩表:id,成绩,学生id,课程id
多表联查
多张表合在一起,进行笛卡尔积之后进行查询
多张表合在一起:内连接/外连接-左连接/右连接 如何将多张表合在一起
内连接
将两张表中的数据取交集
外连接-左连接
以左表为主表,左表中的数据都会全部显示,若没有对应右表的信息,则以NULL显示
外连接-右连接
以右表为主表,右表中的数据都会全部显示,若没有对应左表的信息,则以NULL显示
自连接
自己连接自己,常用于对同一个表中的同一列数据进行操作
在查询的时候,具体使用哪些连接方式,主要看查询什么样的信息
子查询
在sql语句中嵌套sql语句(子句查询常用于条件判断)
合并查询
使用union将两条语句的结果结合起来
索引与事务
索引
作用:快速定位,检索数据
类型:多种lnnoDB B树 ,短而粗的树
适用场景:海量数据查询,适用于查询的经常的依据列
事务
指逻辑上操作的原子性