关于数据库的操作

一、数据库操作

# 1.登录数据库客户端
mysql -uroot -p
Enter password: ****

# 2.查看所有的库
show databases;

# 3.新建一个库
create database 库名 charset utf8;

# 4.进入数据库
use 库名;

# 5.查看所有的表
show tables;

# 6.创建一张表
create table 表名 (字段名 类型, 字段名, 类型, .....);

# 7.查看一下表结构
desc 表名;

# 8.查看当前在哪个数据库下:
select database();

# 9.删除表
drop table 表名;

# 10.删除库
drop database 库名;

二、SQL增删改查

1、添加语句

insert into 表 (要插入字段) values (数据)
  • 说明:主键列是自动增长,但是在全列插入时需要占位,通常使用空值(0或者null) ; 字段默认值 default 来占位,插入成功后以实际数据为准

  •  全列插入:值的顺序与表结构字段的顺序完全一一对应 
    ​
    案例:
    INSERT INTO student (NAME,age,phone) VALUE ("张三",19,"190778866")
    INSERT INTO student   (ID,NAME,age,phone) (5,"李四",19,"190778866");
    INSERT INTO student   VALUE (NULL,"王五",19,"190778866");

  • SQL语句实现批量

方法1:使用多条语句插入

方法2:使用SQL自带批量插入

INSERT INTO student (NAME,age,phone) VALUES ("张飞",33,"190778866"),("关羽",36,"190778866"),("刘备",38,"190778866")

2、修改语句

update 表 set 字段=值 where 条件

UPDATE student SET NAME="张翼德" WHERE NAME="张飞" 

3、删除语句

delete from 表 where 条件

DELETE FROM student WHERE NAME="张三"

逻辑删除与物理删除

例如我们生活中的 删帖、拉黑人 都是 逻辑删除,不是真的 在数据库中删除。

给一个已经存在的表 添加一个新字段

ALTER TABLE student ADD isdel BOOLEAN

逻辑拉黑 叫刘备的

UPDATE student  SET isdel=TRUE WHERE NAME='刘备'

4、查询语句

  • 简单查询

SELECT * FROM student
​
# 指定 查询结果有哪些字段
SELECT NAME,age FROM student
  • 起别名

我们可以给 字段 或者 表 起别名,使用as语句

当然 as是可以省略的

SELECT NAME 姓名,age 年龄 FROM student
​
SELECT NAME AS 姓名,age AS 年龄 FROM student
​
SELECT id,student.name 姓名,student.age 年龄 FROM student

  • 去重

对查询的结果去重,如果有完全一样的 就去掉重复的

SELECT DISTINCT NAME  FROM  student

  • 聚合函数

SELECT COUNT(*) 总计 FROM student

聚合函数 是对结果进行操作

sum 求和

count 统计记录数

max 求最大值

min 求最小值

avg 求平均值

三、条件查询

1、条件表达式

我们可以根据条件来查询表,找出符合条件的数据记录。

条件表达式:

比较表达式

模糊查询

范围查询

判空查询

逻辑表达式:对多条 表达式进行组合

  • 比较表达式

    等于= 大于> 小于 < 不等于!=、>= <=

SELECT * FROM student WHERE age>=30

  • 范围表达式

类似于枚举,列举出具体的值 in 表达式 表示 是否在这些选项中

SELECT * FROM student WHERE age IN (38,33,30)

连续范围、一段数据 可以使用 between ... and ...表示在一个连续的范围内

SELECT * FROM student WHERE age BETWEEN 30 AND 40

  • 模拟查询表达式

如果 数据表数据 不是太多,

%表示任意多个任意字符

_表示一个任意字符

案例:

# 可以查询到张开头的所有学生
SELECT * FROM student  WHERE NAME LIKE '张%'

# 只能查询到张三
SELECT * FROM student  WHERE NAME LIKE '张_'

  • 判断是否为空

注意:null与''是不同的
判空is null

案例:

# 判断手机号为空的学生
SELECT * FROM student WHERE phone=''
SELECT * FROM student WHERE phone IS NULL

2、排序

查找在30到40之间的所有学生,并进行降序排列

SELECT * FROM student WHERE age BETWEEN 30 AND 40  ORDER BY age DESC

desc 代表降序

asc 升序 这个是默认排序方式

3、分页

select  * from  表   limit  offset,num

查询一条语句,从 哪里offset开始查 查几条num

SELECT  * FROM  student LIMIT 2,3

表示偏移量是2   查询 3条记录    从第三条记录开始查 查询三条记录

我一页 3条记录     我要查询第n页数据
select * from student  limit (n-1)*3,3
					   limit 0,3      limit 3,3    limit 6,3

4、分组

我们使用分组可以做一些集合类的相关业务,

例如,有一个学生表, 有姓名、年龄 等 我们可以统计出 每个年龄的 学生数

SELECT COUNT(NAME),age  FROM student GROUP  BY  age;

如果想查看 每个年龄的具体姓名,我们需要借助于 group_concat(name) 来完成

SELECT GROUP_CONCAT(NAME),age  FROM student GROUP  BY  age;

  • 分组中使用 having

having 条件表达式:用来过滤分组结果。

having作用和where类似,但having只能用于group by 而where是用来过滤表数据

SELECT GROUP_CONCAT(NAME),age  FROM student GROUP  BY  age HAVING age>30;

从分组结果中 在筛选出 年龄 大于30的记录

5、子查询

在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句

外部那个select语句则称为主查询。

子查询 先执行,查询的结果 作为 主查询的条件

案例:

查询 年龄大于 平均值的所有学生

分析:

明显需要知道平均年龄,然后 在进行查询,平均年龄也是需要查询后才知道的

SELECT * FROM student WHERE age > (SELECT AVG(age) FROM student);

四、多表查询

1、外键

创建一个 学生表 、图书表,图书属于学生

CREATE TABLE Book(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(10),	
	stu_id INT ,
	FOREIGN KEY(stu_id) REFERENCES student(id)
)

我们查询 图书所属的 学生信息

select Book.name,student.name from Book left join student on Book.stu_id=student.id

2、多对多

CREATE TABLE Course(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(10)
)

CREATE TABLE SelectCourse(
	id INT PRIMARY KEY AUTO_INCREMENT,
	sid INT,
	cid INT,
	FOREIGN KEY(sid) REFERENCES student(id),
	FOREIGN KEY(cid) REFERENCES Course(id)	
)

学生表、课程表、选课表

使用内连接,inner join

没有选课的 学生 不展示,这个就需要使用内连接,屏蔽掉没有选课的学生和没有被人选的课程。

SELECT s.name,c.name FROM student s INNER JOIN SelectCourse ON sid=s.id INNER JOIN Course c ON c.id=cid 

补充点

防火墙 是根据端口号来拦截的,

查看 目前防火墙 放行了哪些端口

firewall-cmd --list-all

添加开发端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

# 注意重启防火墙
systemctl restart firewalld
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值