数据库、表操作

1. SQL语法

1.1. 结尾

; 表示一行代码解释。

1.2. 注释

-- 单行注释

/**
* 多行注释
*/

1.3. 特殊名称

如果表名或者字段的名称和sql关键字冲突,或者带有特殊字符,这时候就需要用到 ``

create database `database`;

1.4. 命名

[!note|style:flat] SQL的关键字,字段名均不区分大小写。

2. 数据库需要操作的内容

[!note]

  1. 操作数据库
  2. 操作表
  3. 操作表中的数据

3. 操作数据库

3.1. 添加数据库

if not exists: 判断为真,才执行命令。

create database [if not exists] 数据库名;

3.2. 删除数据库

if exists: 判断为真,才执行。

drop database [if exists] 数据库;

3.3. 使用数据库

use `数据库名`

3.4. 字符集

create database `名称` character set utf8 collate utf8_general_ci;
  • character set utf8:设定字符集
  • collate utf8_general_ci:校验字符集

4. 操作表

4.1. 数据库数据类型

4.1.1. 数值

类型 描述 字节
tinyint 最小的数 1
smallint 较小的数 2
mediumint 中等 3
int 标准 4
bigint 较大的 8
float 4
double 8
decimal 字符串的浮点数,防止浮点数丢失精度;金融行业

4.1.2. 字符串

类型 描述 字节
char 固定长度字符串,设定的长度全部用完 0 ~ 255
varchar 存储变长的字符串,设定的长度只是最大值 0 ~ 65535
tinytext 微型文本串,不能指定默认长度 0 ~ 255
text 文本串,存储可变长度的非Unicode数据,不能指定默认长度。 0 ~ 65535

4.1.3. 日期

类型 格式 描述
date YYYY-MM-DD 年月日
time hh:mm:ss 时分秒
datetime YYYY-MM-DD hh:mm:ss 年月日时分秒
timestamp 1970.1.1到现在的毫秒 时间戳
year

4.1.4. null

[!note|style:flat]

  • 不要使用null进行算数运算
  • 字符串的空为'',并非null

4.2. 字段的属性

字段 作用 注意
unsigned 无符号整型 不能为负数
zerofill 未使用的字节,根据length进行0填充
Auto Inc 自增,在上一条记录上加一 1. 用来设计唯一的主键
2. 必须为整数
3. 可以设定初始值、步长
3. 超过类型最大值时,设置为最大值,并报错
not null 1. 勾选,不给对应元素复制,就会报错
2. 不选,不填值默认为null
default 设置默认值
length 1.数值,显示的长度0001
2.char,varchar,字符的长度

4.3. 约束

create table [if not exists] `表明`(
    `列名` 类型(length) 字段约束,
    表级约束
)[表类型] [字符集] [注释];

4.3.1. 字段约束

约束 描述
not null 约束该字段的值不能为空
default 约束默认值
primary key 约束该字段的值具有唯一性,并且非空
unique [key/index] 约束该字段的值具有唯一性,可以为空
check 字段值是否有效
auto_increment 自增约束,数据删除后,值不会进行调整

4.3.2. 表级约束

约束 描述
primary key 约束该字段的值具有唯一性,并且非空
unique [key/index] 约束该字段的值具有唯一性,可以为空
check 字段值是否有效
FOREIGN KEY 用来确保数据的一致性,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值

[!note] 对于索引约束,除了primary key,其余都可以定义个索引名。

4.4. 表的列名(正式项目用)

列名 作用
id 主键
version 乐观锁
is_delete 伪删除,只是标记数据被删除,但是数组仍然储存在数据库中
gmt_create 创建时间
gmt_update 修改时间

4.5. 表的类型

项目 描述 MYISAM INNODB
事务 一段捆绑执行的业务逻辑 不支持 支持
行锁定 多用户,可对行操作进行锁定 不支持 支持
外键约束 建立主从表关系,确定数据一致性 不支持 支持
全文索引 支持 不支持
储存空间 较小 约为MYISAM的两倍

物理空间储存:

  • 表都存储在指定数据库的文件夹下
  • INNODB 两个文件
    • .frm: 存储表的结构信息,在数据库文件夹下
    • ibdata1: 存储数据,与数据库文件夹同级
  • MYISAM 三个文件
    • .frm: 存储表的结构信息
    • .MYD:存储数据
    • .MYI:存储索引

4.6. 创建表

create table [if not exists] `表明`(
    `列名` 类型(length) [属性] [索引] [注释],
        ....
    `列名` 类型(length) [属性] [索引] [注释],
    primary key (`列名`)
)[表类型] [字符集] [注释];
案例代码
CREATE table if not exists `student`(
    `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '学号',
    `name` VARCHAR(10) NOT NULL DEFAULT '李华' COMMENT '名字',
    `sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
    `number` VARCHAR(11) NOT NULL DEFAULT '10086' COMMENT '电话',
    PRIMARY KEY(`id`) 
)engine=InnoDB charset=utf8 COMMENT='学生';

[!note|style:flat] 给定了not null属性后,就不能再设置default null

4.7. 查看表

4.7.1. 查看表的列结构

describe `表名`;

4.7.2. 查看表的创建代码

show create table `表名`;

4.8. 修改表结构

4.8.1. 修改表名

alter table `表名` rename as `新表名`;

4.8.2. 增加字段(列)

alter table `表名` add `列名` 类型名(length) [属性] [索引] [注释];

4.8.3. 修改字段(列)

修改类型,约束(列属性):

alter table `表名` modify `列名` [类型,约束];

可以重命名,修改类型,约束:

alter table `表名` change `列名` `新列名` [类型,约束];

[!note|style:flat] 重新修改字段,[类型,约束]也会跟着以前修改掉,不指定就没有。

4.8.4. 修改表级别约束

增加:

alter table `表名` add 约束 [`索引名`] (`字段`);

删除:

alter table `表名` drop 约束 [`索引名` (`字段`)];

4.8.5. 删除字段

alter table `表名` drop `列名`;

4.9. 删除表

drop table [if exists] `表名`;

results matching ""

    No results matching ""