Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
bcb81584
C
Coding Tree
项目概览
檀越@新空间
/
Coding Tree
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Coding Tree
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
bcb81584
编写于
3月 23, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
edeb48dd
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
212 addition
and
2 deletion
+212
-2
blog/php-mysql/index.md
blog/php-mysql/index.md
+2
-0
blog/php-mysql/sql-field-prototype.md
blog/php-mysql/sql-field-prototype.md
+210
-0
blog/php-mysql/sql-string.md
blog/php-mysql/sql-string.md
+0
-2
未找到文件。
blog/php-mysql/index.md
浏览文件 @
bcb81584
...
...
@@ -25,3 +25,5 @@
[
数据类型-enum 枚举类型
](
blog/php-mysql/sql-enum.md
)
[
数据类型-Set集合
](
blog/php-mysql/sql-set.md
)
[
列属性(字段属性)
](
blog/php-mysql/sql-field-prototype.md
)
blog/php-mysql/sql-field-prototype.md
0 → 100644
浏览文件 @
bcb81584
## 列属性(字段属性)
6个属性:
null、默认值、列描述、主键、唯一键、自动增长
## 1、null
代表字段为空
注意:
1.
在设计表的时候,尽量不要让数据为空
2.
MySQL的记录长度为65535个字节,如果一个表中有字段允许为null, 那么系统就会设计保留一个字节来存储null,最终有效存储长度为65534个字节
## 2、默认值default
用户不设置数据的时候,默认赋值
```
sql
create
table
my_default
(
name
varchar
(
10
)
not
null
,
age
int
default
18
);
mysql
>
desc
my_default
;
+
-------+-------------+------+-----+---------+-------+
|
Field
|
Type
|
Null
|
Key
|
Default
|
Extra
|
+
-------+-------------+------+-----+---------+-------+
|
name
|
varchar
(
10
)
|
NO
|
|
NULL
|
|
|
age
|
int
(
11
)
|
YES
|
|
18
|
|
+
-------+-------------+------+-----+---------+-------+
-- 插入数据,未设置的值会使用默认值
insert
into
my_default
(
name
)
values
(
'Tom'
);
mysql
>
select
*
from
my_default
;
+
------+------+
|
name
|
age
|
+
------+------+
|
Tom
|
18
|
+
------+------+
-- 显示告知,使用默认值
insert
into
my_default
values
(
'Tom'
,
default
);
mysql
>
select
*
from
my_default
;
+
------+------+
|
name
|
age
|
+
------+------+
|
Tom
|
18
|
|
Tom
|
18
|
+
------+------+
```
## 3、列描述
comment 注释说明
```
sql
create
table
my_comment
(
name
varchar
(
10
)
not
null
comment
'姓名,不能为空'
,
age
int
default
18
comment
'年龄,默认18岁'
);
-- 查看注释
show
create
table
my_comment
;
CREATE
TABLE
`my_comment`
(
`name`
varchar
(
10
)
COLLATE
utf8mb4_general_ci
NOT
NULL
COMMENT
'姓名,不能为空'
,
`age`
int
(
11
)
DEFAULT
'18'
COMMENT
'年龄,默认18岁'
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_general_ci
```
## 4、主键
primary key 主要的键,在一张表中,有且只有一个值,具有唯一性
主键默认不允许为空
`not null`
### 4.1、创建主键
1、随表创建
-
方案1:直接在需要当做主键的字段之后,增加
`primary key`
-
方案2:在所有字段之后增加
`primary key(字段信息)`
```
sql
create
table
my_primary_key_1
(
username
varchar
(
10
)
primary
key
);
create
table
my_primary_key_2
(
username
varchar
(
10
),
primary
key
(
`username`
)
);
```
2、表后增加
基本语法
```
sql
alter
table
表名
add
primary
key
(
字段名
);
```
示例
```
sql
create
table
my_primary_key_3
(
username
varchar
(
10
)
);
alter
table
my_primary_key_3
add
primary
key
(
username
);
```
### 2、查看主键
```
sql
-- 方案一:查看表结构
desc
my_primary_key_1
;
+
----------+-------------+------+-----+---------+-------+
|
Field
|
Type
|
Null
|
Key
|
Default
|
Extra
|
+
----------+-------------+------+-----+---------+-------+
|
username
|
varchar
(
10
)
|
NO
|
PRI
|
NULL
|
|
+
----------+-------------+------+-----+---------+-------+
-- 方案二:查看创建语句
show
create
table
my_primary_key_2
;
CREATE
TABLE
`my_primary_key_2`
(
`username`
varchar
(
10
)
COLLATE
utf8mb4_general_ci
NOT
NULL
,
PRIMARY
KEY
(
`username`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_general_ci
```
### 3、删除主键
```
sql
alter
table
表名
drop
primary
key
;
```
示例
```
sql
alter
table
my_primary_key_1
drop
primary
key
;
mysql
>
desc
my_primary_key_1
;
+
----------+-------------+------+-----+---------+-------+
|
Field
|
Type
|
Null
|
Key
|
Default
|
Extra
|
+
----------+-------------+------+-----+---------+-------+
|
username
|
varchar
(
10
)
|
NO
|
|
NULL
|
|
+
----------+-------------+------+-----+---------+-------+
```
### 4、复合主键
案例:一张学生选修课表
-
一个学生可以选修多个选修课
-
一个选修课也可以由多个学生来选
-
一个学生在一个选修课中只有一个成绩
```
sql
-- 添加复合主键
create
table
my_score
(
student_no
char
(
10
),
course_no
char
(
10
),
score
tinyint
not
null
,
primary
key
(
student_no
,
course_no
)
);
desc
my_score
;
+
------------+------------+------+-----+---------+-------+
|
Field
|
Type
|
Null
|
Key
|
Default
|
Extra
|
+
------------+------------+------+-----+---------+-------+
|
student_no
|
char
(
10
)
|
NO
|
PRI
|
NULL
|
|
|
course_no
|
char
(
10
)
|
NO
|
PRI
|
NULL
|
|
|
score
|
tinyint
(
4
)
|
NO
|
|
NULL
|
|
+
------------+------------+------+-----+---------+-------+
```
### 5、主键约束
1.
当前字段对应的数据不能为空
2.
当前字段对应的数据不能有任何重复
```
sql
-- 第一次可以成功插入
mysql
>
insert
into
my_primary_key_2
(
username
)
values
(
'Tom'
);
Query
OK
,
1
row
affected
(
0
.
00
sec
)
-- 第二次插入失败
mysql
>
insert
into
my_primary_key_2
(
username
)
values
(
'Tom'
);
ERROR
1062
(
23000
):
Duplicate
entry
'Tom'
for
key
'PRIMARY'
mysql
>
select
*
from
my_primary_key_2
;
+
----------+
|
username
|
+
----------+
|
Tom
|
+
----------+
```
### 6、主键分类
-
业务主键: 学生ID,课程ID
-
逻辑主键: 自然增长的整型(应用广泛)
https://www.bilibili.com/video/BV1Vx411g7uJ?p=26&spm_id_from=pageDriver
\ No newline at end of file
blog/php-mysql/sql-string.md
浏览文件 @
bcb81584
...
...
@@ -74,5 +74,3 @@ create table my_gbk(
name
varchar
(
32766
)
)
charset
gbk
;
```
https://www.bilibili.com/video/BV1Vx411g7uJ?p=24&spm_id_from=pageDriver
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录