Dawn's Blogs

分享技术 记录成长

0%

各级别的字符集

MySQL有4个级别的字符集:

  • 服务器级别
  • 数据库级别
  • 表级别
  • 列级别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查询字符集
show variables like '%character%';
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | D:\MySQL\MySQL Server 8.0\share\charsets\ |
+--------------------------+-------------------------------------------+
  • character_set_server:服务器级别的字符集
  • character_set_database:当前数据库的字符集
  • character_set_client:服务器解码请求时使用的字符集
  • character_set_connection:服务器处理请求时会把请求字符串从character_set_client转为character_set_connection
  • character_set_results:服务器向客户端返回数据时使用的字符集

视图概述

视图,一个或者多个数据表里的数据的逻辑显示,视图并不存储数据

  • 视图是一种虚拟表,本身是不含有数据的
    • 视图可以看作是存储起来的SELECT语句
  • 视图建立在已有表的基础上,视图依赖建立的这些表称为基表
阅读全文 »

约束( constraint ) 概述

约束是对表中字段的限制

数据完整性

为了保证数据完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面考虑:

  • 实体完整性:同一个表中,不存在两条完全相同无法区分的记录
  • 域完整性:字段的取值范围,如年龄1-150
  • 引用完整性:员工表中的员工所在部门,可以在部门表中找到该部门
  • 用户自定义完整性:用户名唯一、密码不为空等
阅读全文 »

求根节点到叶节点数字之和

求根节点到叶节点数字之和

解题思路

在二叉树的后序遍历算法中,访问一个节点时,栈中保存的是其所有的祖先。可以根据二叉树的后序遍历算法,当访问到叶子节点时,栈中保存的就是从根节点到叶子节点的所有数字,将栈中节点转换为数字,加入到sum中。后序遍历结束后,即可得到从根节点到叶节点生成的所有数字之和sum

解题代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func sumNumbers(root *TreeNode) int {
stack := make([]*TreeNode, 0) // 栈
cur := root // 当前遍历节点
var pre *TreeNode // 上一个遍历过的节点
var sum int // 数字之和

for len(stack) >0 || cur != nil {
for cur != nil {
// 入栈
stack = append(stack, cur)
// 进入左子树
cur = cur.Left
}
if len(stack) > 0 {
cur = stack[len(stack)-1]
if cur.Right == nil || pre == cur.Right {
// 若栈顶节点无右子树,或者右子树刚刚访问过,则访问栈顶节点
if cur.Left == nil && cur.Right == nil {
// 是叶子节点
// 计算数字之和
sum = sum + stackToInt(stack)
}
pre = cur // 记录上一次访问的节点
// 栈顶元素访问完成,弹出栈顶
stack = stack[:len(stack)-1]
cur = nil
} else {
// 否则进入右子树
cur = cur.Right
}
}
}

return sum
}

func stackToInt(stack []*TreeNode) int {
// 将栈中节点转换为数字
var res int
for i := 0; i < len(stack); i++ {
res = res*10 + stack[i].Val
}

return res
}
阅读全文 »

整数类型

类型介绍

整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT

整数类型 字节 有符号数取值范围 无符号数取值范围
TINYINT 1 -2^7 ~ 2^7-1 0~2^8-1
SMALLINT 2 -2^15 ~ 2^15-1 0~2^16-1
MEDIUMINT 3 -2^23 ~ 2^23-1 0~2^24-1
INT、INTEGER 4 -2^31 ~ 2^31-1 0~2^32-1
BIGINT 8 -2^63 ~ 2^63-1 0~2^64-1
阅读全文 »

最小栈

最小栈

解题思路

利用一个辅助栈,用来记录当前已压栈元素中的最小元素。在进行压栈操作时,不仅更新数据栈,还要更新辅助栈。其中,辅助栈的更新策略:

  • 如果当前压栈元素小于辅助栈的栈顶元素,则将当前压栈元素压入辅助栈
  • 否则,将辅助栈的栈顶元素再一次压入辅助栈中
阅读全文 »

插入数据

VALUES

  • 没有指明添加字段,一定按照声明字段的先后顺序添加
1
2
INSERT INTO emp1
VALUES (1, 'Tom', '2000.12.21', 3400);
  • 指明要添加的字段
1
2
INSERT INTO emp1 (id, hire_date, salary, `name`)
VALUES (2, '1999-09-09', 4000, 'Jerry');
  • 一次添加多个记录
1
2
3
4
INSERT INTO emp1 (id, hire_date, salary, `name`)
VALUES
(3, '1999-06-17', 8000, 'Dawn'),
(4, '1999-05-02', 7000, 'Rain');
阅读全文 »

COMMIT

COMMIT提交数据。一旦执行COMMIT,则数据被永久的保存在了数据库中,数据不可以回滚

ROLLBACK

ROLLBACK回滚数据。一旦执行ROLLBACK,则可以实现数据回滚。回滚到最近一次COMMIT之后


注意

  • DDL的操作一旦执行,不可以回滚。(在执行完DDL之后,一定执行一次COMMIT
  • DML的操作默认情况下,一旦执行,不可以回滚。但是再执行SET autocommit = FALSE,则执行DML后可以回滚

创建表

  • 创建新的表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE IF NOT EXISTS myemp1 (
id INT,
emp_name VARCHAR(15),
hire_date DATE
);

DESC myemp1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| emp_name | varchar(15) | YES | | NULL | |
| hire_date | date | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
  • 基于现有的表,利用SELECT语句查询,创建新的表,同时导入数据
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE myemp2
AS
SELECT employee_id, last_name, salary
FROM employees;

DESC myemp2;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| employee_id | int | NO | | 0 | |
| last_name | varchar(25) | NO | | NULL | |
| salary | double(8,2) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
阅读全文 »

创建数据库

  • 创建数据库
1
CREATE DATABASE mytest;
  • 创建数据库,指定字符集
1
CREATE DATABASE mytest1 CHARACTER SET 'gbk';
  • 判断数据库是否存在,若不存在则创建
1
CREATE DATABASE IF NOT EXISTS mytest2;

修改数据库

  • 修改数据库的字符集
1
ALTER  DATABASE mytest1 CHARACTER SET 'utf8';

删除数据库

  • 删除数据库
1
DROP DATABASE mytest;
  • 如果数据库存在就删除
1
DROP DATABASE IF EXISTS mytest1;