学习mysql

main
expressgy 6 months ago
parent f5bc73bfae
commit 2353e50ff6
  1. 173
      docs/MySQL/mysql是怎样使用的.md

@ -240,6 +240,179 @@ ALERT TABLE 表名 操作1, 操作2, ...;
# 第六章 列的属性 # 第六章 列的属性
## 6.1 简单的查询和插入语句
### 6.1.1 简单的查询语句
```sql
SELECT * FROM table;
```
### 6.1.2 简单的插入语句
```sql
-- 如果没有指明某个字段的值,即为默认值
INSERT INTO 表名(列1, 列2, 列3) VALUES(列1值, 列2值, 列3值);
```
### 6.1.3 批量插入
```sql
INSERT INTO 表名(列1, 列2, 列3) VALUES(列1值, 列2值, 列3值), (列1值, 列2值, 列3值), (列1值, 列2值, 列3值);
```
## 6.2 列属性
### 6.2.1 默认值
```sql
CREATE TABLE table_name (
first_column INT DEFAULT '0'
);
```
### 6.2.2 NOT NULL
`列名 列类型 NOT NULL`
### 6.2.3 主键
```sql
-- 单字段主键
CREATE TABLE table_name (
first_column INT PRIMARY KEY
);
CREATE TABLE table_name (
first_column INT PRIMARY KEY,
PRIMARY KEY (first_column)
);
-- 多字段主键 只能这样设置
CREATE TABLE table_name (
first_column INT,
last_column INT,
PRIMARY KEY (first_column, last_column)
);
```
### 6.2.4 UNIQUE约束
- 希望有其他列或列组合存储值唯一
```sql
-- 单个字段约束
CREATE TABLE table_name (
first_column INT PRIMARY KEY,
next_column INT UNIQUE ,
last_column INT
);
-- 多个字段约束
CREATE TABLE table_name (
first_column INT PRIMARY KEY,
next_column INT,
last_column INT,
UNIQUE KEY 约束名 (next_column, last_column)
);
CREATE TABLE hutao.new_table (
product_id INT PRIMARY KEY,
product1 VARCHAR(50),
product2 VARCHAR(20),
product3 VARCHAR(50),
product4 VARCHAR(50),
product5 VARCHAR(50),
product6 VARCHAR(50),
UNIQUE KEY key1 (product1, product2),
UNIQUE KEY key2 (product5, product6)
);
```
注意:
- 一张表只能有一个`主键`,但是可以有多个`UNIQUE`约束
- 主键不允许为`NULL`,但是`UNIQUE`可以存,并且允许存在多个,`NULL`代表没有填写
- 如果未定义主键,mysql会默认将第一个出现的`NOT NULL UNIQUE`设置为主键
### 6.2.3 外键
学生成绩表中携带了学生信息表中的学生id字段,如果学生成绩表中的学生id在学生信息表中不存在,那么此条学生成绩为无意义数据,为避免这种问题,设立外键。
以上学生信息表被称为主表,学生成绩表被称为子表,子表学生成绩表中的学生id为学生成绩表的外键,外键必须是主表的索引,主键和UNIQUE约束自动成索引
- 写法1(建议):`CONSTRAINT [外键名] FOREIGN KEY (字段1, 字段2, 字段3) REFERENCES 主表名(字段1, 字段2, 字段3)`
- 写法2(简写):`FOREIGN KEY [外键名] (字段1, 字段2, 字段3) REFERENCES 主表名(字段1, 字段2, 字段3)`
```sql
CREATE TABLE student_score (
score_id INT PRIMARY KEY COMMENT '学生成绩表主键',
student_id INT COMMENT '学生ID',
score_number INT COMMENT '学生成绩',
CONSTRAINT FOREIGN KEY (student_id) REFERENCES student_info(student_id)
)
```
### 6.2.4 自增 AUTO_INCREMENT
- 使用整型或浮点型
- 用法`列名 列类型 AUTO_INCREMENT`
- INSERT时将自增列设置为NULL时会自动插入自增值
- NO_AUTO_VALUE_ZERO是默认不开启的,将0插入自增列也是自增值
- 如果INSERT显式的插入新的自增值,下一个默认自增值是在显式自增值的基础上增长的
- 一个表最多只能有一个自增列
- 自增列必须为索引,主键和UNIQUE默认为索引
- 自增列不能设置默认值DEFAULT
- 自增列一般作为主键
### 6.2.8 列注释
`列名 数据类型 COMMENT '注释'`
### 6.2.9 ~~显示宽度和ZEROFILL~~ MYSQL8.0.17不推荐
- ZEROFILL作用是无符号数字补零
- 没有显式说明UNSIGNED MYSQL会在建表的时候补上
- 不同的整数类型默认显示宽度不同
- 这不会影响存储
-
`列名 数据类型(显示宽度) UNSIGNED ZEROFILL`
```sql
CREATE TABLE zerofille_table (
id INT AUTO_INCREMENT ,
number UNSIGNED INT(5) ZEROFILL
)
```
## 6.3 查看表结构时的列属性
| 表头 | 值 | 说明 |
|---------|---------|-----------|
| Null | No/Yes | 是否允许为Null |
| Key | PRE/UNI | 标记键的信息 |
| Default | | 默认值 |
| Extra | | 额外信息,如自增列 |
## 6.4 标识符的命名
- 各种名字不能以空格结尾
- 可以使用``将带空格的或纯数字包起来 ,但是不建议使用这两个
- 不能用保留字如DESCRIBE
- 按照C/C++标准来,建议用下划线区分
# 第七章 简单查询

Loading…
Cancel
Save