主要概述

  1. 数据库管理语句分类

  2. 数据库服务字符设置

  3. 数据库数据 类型介绍

  4. 数据库属性约束设置

  5. 数据库语句获取帮助

  6. 数据库操作库的语句(DDL)

  7. 数据库操作表的语句(DDL)

1. 数据库管理语句分类

  1. SQL语句的概述

他是一种对关系数据库中的数据进行定义和操作的语言,是大多数关系数据库管理系统所支持的工业标准

  1. SQL语句的分类

  • DDL:数据定义语言

负责管理数据库的基础数据,比如数据增删库、增删表、增删索引、增删用户。

涉及语句:CREATE(创建)、ALTER(修改)、DROP(删除)等

  • DCL:数据控制语言

主要用于定义访问权限和安全级别

涉及语句:GRANT(用户授权)、REVOKE(权限回收)、COMMIT(提交)、ROLLBACK(回滚)

  • DML:数据操作语言

主要针对数据库里的表里的数据进行操作,用来定义数据库记录。

涉及语句:SELECT(查)、INSERT(增)、DELETE(删)、UPDATE(改)

  • DQL:数据查询语言

主要用来查询数据

涉及语句:SELECT(查)

2. 数据库服务字符设置

  1. 为什么要有字符编码设置(避免中文乱码)

开发人员------英文写好代码---字典/编码ASCLL------二进制

  1. 数据库中常用字符编码以及区别

utf8:不支持表情符号 emoji 最多存储3字节长度字符

utf8mb4:支持表情符号 emoji 最多存储4字节长度字符

  1. 数据库中如何设置字符编码

查看数据库的可以设置的字符编码:

show charset;

查看目前的字符编码设置:

show variables like '%char%';
  • 全局调整字符编码

vim /etc/my.cnf
[mysql]
socket=/tmp/mysql.sock
user=root
password=123
[mysqld]
default_authentication_plugin=mysql_native_password 
mysqlx=0
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
## 调整字符编码
character-set-server=gbk

## 重启数据库
systemctl restart mysqld
## 查看字符编码
show variables like '%char%';
  • 局部调整字符编码(库,表)

create database zhibang charset utf8;
create table t2(id int) charset gbk;

3. 数据库数据类型介绍

简单来说就是为了限制用户输入的信息,比如说我想要收集用户的名字比如张三、李四,年龄20、30,你非要输入acb,年龄-1,1000等这些无效数据,因此就有了数据类型来限制用户输入的信息。

常用的数据类型:

整型:

tinyint(m) 1个字节

int(m) 4个字节

bigint(m) 8个字节

浮点型:

float (m,d) 单精度浮点型 4字节 m总个数 ,d小数位

字符串类型:

char(n) 固定长度,最多255个字符

varchar(n) 固定长度,最多65535个字符

longtext 可变长度,最多2的32次方-1个字符 存储评论信息

特殊数据类型

enum 枚举类型

参考链接:

https://www.php.cn/faq/460317.html

4. 数据库属性约束设置

约束用户输入的信息,前面数据库的数据类型约束了用户输入的数据,可是又有一个问题,比如说两个用户输入相同的手机号或者ID,这在结果上应该不是我们希望看到的,因此我们引入了数据库属性约束的设置

约束:

PK(primary key) 表示主键约束,非空且唯一(表中只能有一个主键)

UK(unique key) 表示唯一约束

NN(not null) 表示非空约束

FK(foreign key) 表示外键约束,多表之间关联使用

属性:

辅助表信息录入

default 设置默认数据信息,可以实现自动填充

auto_increment 设置数值信息自增,可以实现数值编号自增填充(一般配合主键使用)

comment 设置数据的注释信息

unsigned 设置数值信息非负,可以实现数值信息列不能负数信息

补充:数据库外键约束说明----FK

外键也称之为外键约束,顾名思义,就是外面的键,一张表的一个字段(非主键)指向另外一个表的主键,那么该字段就可以称之为外键。外键所在的表称之为子表,外键所指向的主键所在的表称之为父表。

  1. 外键的设置说明

添加外键:

## 方式一:在创建表的时候添加外键
mysql>foreign key(外键字段) references 主表(主键)
## 实际操作
## 创建外键关联的父表
mysql> create table class(
    -> id int primary key auto_increment,
    -> name varchar(10) not null comment "班级名,不能为空",
    -> room varchar(10) comment "教室,允许为空"
    -> ) charset utf8;
 
## 创建外键关联的子表
mysql> create table student( id int primary key auto_increment, number char(10) not null unique comment "学号,不能
重复", name varchar(10) not null comment "姓名", c_id int, foreign key (c_id) references class(id) ) charset utf8;

## 查看外键 在Key的那一列是否为MUL,如果是则表示设置成功
mysql> desc student;

## 方式二:在创建表后添加外键
mysql>alter table 表名 add constraint 外键名 foreign key (外键字段) references 父表(主键字段)
## 实际操作
## 创建没有外键信息的表
mysql> create table t_foreign( 
    -> id int primary key auto_increment,
    -> c_id int
    -> ) charset utf8;
## 设置外键
mysql> alter table t_foreign add constraint class_foreign foreign key (c_id) references class(id);

## 查看外键 
mysql> desc t_foreign;

删除外键:

外键不能被修改,只能先删除后在新增;

## 删除外键的格式
mysql> alter table 表名  drop foreign key 外键名;

## 删除表(t_foreign中外键信息)
mysql> alter table t_foreign drop foreign key class_foreign;

查看外键:

mysql> show create table t_foreign; 
mysql> desc t_foreign;
  1. 外键的约束

  • 外键对子表的数据写操作约束(增加和更新)

如果子表中插入的数据所对应的外键在父表不存在,创建不成功。

## 实际操作,班级表都是空的,你创建学生自然也没有意义了
mysql> select * from class;
Empty set (0.01 sec)

mysql> select * from student;
Empty set (0.00 sec)

mysql> insert into student values (null,'20250514','xiaoXing',1);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`xingzhibang`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`c_id`) REFERENCES `class` (`id`))
  • 外键对父表也有数据约束

当父表操作一个记录,但是该记录被子表所引用的时候,那么父表的操作将会被限制

## 实际操作
## 创建班级
mysql> insert into class values (1,'linux','001'),(2,'mysql','002');
## 创建学生
mysql> insert into student values(null,'001','xiaoxing',1);
mysql> insert into student values(null,'002','xiaobang',2);
## 查看表
mysql> select * from class;
+----+-------+------+
| id | name  | room |
+----+-------+------+
|  1 | linux | 001  |
|  2 | mysql | 002  |
+----+-------+------+

mysql> select * from student;
+----+--------+----------+------+
| id | number | name     | c_id |
+----+--------+----------+------+
|  2 | 001    | xiaoxing |    1 |
|  3 | 002    | xiaobang |    2 |
+----+--------+----------+------+

## 此时当我想要删除班级表的时候发现会报错
mysql> delete from class where id=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`xingzhibang`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`c_id`) REFERENCES `class` (`id`))
## 因为班级001中已经有了一位学生了,因此我们需要先删除在001号教室里的学生信息然后才能删除001的教室
mysql> delete from student where id=2;
Query OK, 1 row affected (0.01 sec)

mysql> select * from student;
+----+--------+----------+------+
| id | number | name     | c_id |
+----+--------+----------+------+
|  3 | 002    | xiaobang |    2 |
+----+--------+----------+------+

mysql> delete from class where id=1;
Query OK, 1 row affected (0.00 sec)

5. 数据库语句获取帮助

在数据库服务中,SQL语句涉及到的语句非常多,在实际应用过程中也未必都能记住因此就需要掌握获取帮助的方法;

## 获取基本帮助信息
mysql> \h
# 或者
mysql> ?
## 获取语句分类帮助
mysql> ? contents;
mysql> help contents;

## 获取具体语句帮助
mysql> ? create
mysql> ? create database

6. 数据库操作库的语句(DDL)

创建库

mysql> create database test;
mysql> create schema test;
## 创建新的数据库,并修改调整默认的字符编码
mysql> create database test character set utf8mb4;
mysql> create database test character set utf8 collate utf8_general_mysql500_ci;

查看库

mysql> show databases;
mysql> show create database test;

删除库

mysql> drop database test;
mysql>drop schema test;
## 生产环境慎用!!!

修改库

mysql> alter database test charset utf8mb4;
mysql> alter database test charset collate utf8_general_mysql500_ci;

切换库

mysql> use test;
mysql> select database();

7. 数据库操作表的语句(DDL)

  1. 创建表

#格式:
mysql> create table 表名(
<字段名1> <类型1> 约束 属性,
...
<字段名n> <类型n>);

## 实际操作
mysql> create table class(
    -> id int primary key auto_increment,
    -> name varchar(10) not null comment "班级名,不能为空",
    -> room varchar(10) comment "教室,允许为空"
    -> ) charset utf8;
  1. 查看表

## 查看表结构
mysql> desc stu1;

## 查看表创建的命令
mysql> show create table stu1;
  1. 修改表

## 修改表名
mysql> rename table stu1 to stu2;

mysql> alter table stu2 rename stu1;

## 修改表结构
# 在学生表中添加新的表结构字段列--追加字段列
mysql>alter table stu1 add column telno char(11) not null unique key comment '手机号';
# 插入字段列
mysql> alter table stu1 add column wechat char(11) not null unique key comment '微信号' after age;
# 插入首行列
mysql> alter table stu1 add column wechat char(11) not null unique key comment '微信号' first;
  1. 删除表

## 删除表,会将定义的表结构和表中数据内容一并删除
mysql>drop table stu1;
## 只是清空表中数据内容,但是保留定义的表结构信息
mysql>truncate table stu1;
mysql>delete table stu1;