这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
今天主要学习了数据库的使用。
通过services.msc 查看mysql服务有没有开启
net start mysql80 //启动数据库
net stop mysql80 //停止数据库
操作mysql
mysql -u root -p //启动mysql
//密码 S21070078
linux系统启动数据库
systemctl start mysqld
关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
SQL语法:
- 单行或者多行书写,分号结尾
- 使用空格缩进增强语句的可读性
- Mysql数据库不区分sql的大小写
- 单行注释-- 或者# 多行注释 /* */
数据定义语言,用于定义数据库对象(数据库、表、字段)
DDL数据库操作
#查询所有数据库
SHOW DATABASES;
#查询当前选中的数据库
select database();
#创建数据库
create [if not exists] database 数据库名;
#删除数据库
drop database [if exists] 数据库名;
#使用数据库
use 数据库名;
DDL表操作
#查询当前数据库所有表
show tables;
#查询表结构
desc 表名;
#查询指定表的建表语句
show create table 表名;
#创建表
create table tb_user(
id int [comment '编号'],
name varchar(50) [comment '姓名'],
age int [comment '年龄'],
gender varchar(1)[comment '性别'] 最后这里不加逗号
)[comment '用户表'];
修改表
#添加字段
alter table 表名 add 字段名 类型 [comment ''][约束];
alter table tb_user add nickname varchar(20) [comment '昵称'];
#修改字段 修改数据类型
alter table 表名 modify 字段名 新数据类型;
#修改字段 修改该字段名和数据类型
alter table 表名 change 旧字段名 新字段名 类型 [comment ''][约束];
alter table tb_user change id newid int [comment '新名字'];
#删除字段
alter table 表名 drop 字段名;
#修改表名
alter table 表名 rename to 新表名;
#删除表
drop table [if exists] 表名;
#删除指定表,并重新创建该表
truncate table 表名;
Data Control Language 数据控制语言,用来管理数据库用户、控制数据库的访问权限。 不要求掌握。 函数是指一段可以直接被另一段程序调用的程序或代码。 概念:约束是作用域表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性、和完整性。
建立外键之后,默认的是不能了。
那么我们想删除怎么办呢?
- cascade 在附表中删除更新对应记录时,先检查该记录是否有外键,有择业删除更新外键在子表中的记录
- set null 如果有,则设置子表中该外键为null
多表关系
- 一对多:常见的有员工-部门,多个员工数以一个部门。 实现:在多的一方建立外键,指向一的一方。
- 多对多:学生和课程,学生选多门课,课程可被多个学生选。 实现:建立第三章中间表,中间表至少包含两个外键,分别关联两方主键。
- 一对一:用户和用户详情。多用于单表拆分。实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
多表查询分类:
内连接:查询A、B交集部分数据
外连接:
- 左外连接:查询左表所有的数据,以及两张表交集部分数据
- 右外连接:查询右表所有的数据,以及两张表交集部分数据
自连接:当前表与自身的连接查询,自连接必须使用表别名
子查询
SQL语句中嵌套select语句,称为嵌套查询,又称子查询。
select * from t1 where column1=(select column1 from t2);
#子查询外部的语句可以是insert updata delete select的任何一个。
标量子查询:子查询返回的值是单个的值。操作符(= > < !=)
列子查询:子查询返回的值一列 操作符( in、not in、any、some、all)
- any:子查询返回列表中,有任意一个满足即可
- som:和any一样,使用some的地方都能有any
- all: 子查询返回列表所有值都必须满足
行子查询:子查询返回的是一行。 操作符 (= <> in not in)
表子查询:子查询返回的是表。操作符(in)
根据子查询出现的位置分为:where之后 from之后 select之后。