美文网首页
数据类型

数据类型

作者: lbon | 来源:发表于2019-05-12 18:18 被阅读0次

### 1.数据类型

##### 1.1 文本

MySQL 5.0之前的版本char(10)或varchar(10)表述的是10个**字节**

1英文 = 1字节 可以存储10个英文

1汉字 = 2字节(GBK)/3字节(utf-8) 可以存储5个汉字(GBK)/3个汉字(utf-8)

MySQL 5.0之后的版本char(10)或varchar(10)表述的是10个**字符**

1英文 = 1字符 可以存储10个英文

1汉字 = 1字符 可以存储10个汉字

###### 1.1.1 char 固定文本

将“学生姓名”列设置为char(10) - 表示可以支持最多10个字符

此时将“Tom”存入“学生姓名”中,实际上存了10个字符 可以理解存储的是"Tom"加7个空格。如果名字长度超过10个,无法存入数据。

###### 1.1.2 varchar 可变文本(重要)

将“学生姓名”列设置为varchar(10) - 表示可以支持最多10个字符

此时将“Tom”存入“学生姓名”中,实际上存了3个字符 。如果名字长度超过10个,无法存入数据。

**推荐使用varchar类型作为文本数据的类型**,优点:

*  数据在存储中不会有多余的冗余部分(主要指的是填满长度的空格)

*  数据准确性,"Tom"和"Tom+7个空格"不是一样的数据

##### 1.2 数值

###### 1.2.1 int 整数类型(重要)

int类型支持数据为整数性质

###### 1.2.2 float 浮点数类型(小数)(重要)

float类型支持数据为浮点数性质

##### 1.3 时间

###### 1.3.1 date 日期类型(年月日)(重要)

可以存储“年-月-日”的时间

###### 1.3.2 time 时间类型(时分秒)

可以存储“时:分:秒”的时间

###### 1.3.3 datetime 日期时间类型(年月日时分秒)(重要)

可以存储“年-月-日 时:分:秒”的时间

###### 1.3.4 timestamp 时间戳类型(了解)

在Java体系中,时间原点是1970年1月1日 8时0分0秒 GMT+8。时间戳就是表述时间与时间原点之间的所经过毫秒数(1s = 1000ms)

##### 1.4 其他(了解)

###### 1.4.1 blob 字节流类型(二进制数据)

将二进制文件(图片,声音....)的内容存入blob

*一般二进制文件占用的空间比较大,存储这种文件可能会拖慢数据库的执行速度*

###### 1.4.2 boolean 逻辑类型("真"和"假")

通常情况下使用int类型替代boolean类型

int中认为 0-假 1-真

### 2.创建表

建表至少需要提供表名,列名和列的数据类型

这些名字的命名规则:

*  不能使用中文,只能英文和数字,不能以数字开头

*  名字中间不允许出现空格

*  不要使用SQL中的关键字

*  不能使用已有的名字

命名规范

*  使用英文单词进行命名

语法

```

CREATE TABLE 表名(

    列1名 列1的数据类型,

    列2名 列2的数据类型,

        ...

    列n名 列n的数据类型

);

```

### 3.约束

约束在表中对数据输入的限制,保证数据录入的准确性

##### 3.1 主键约束 Primary Key(重要)

作用: 非空并且唯一

被主键约束修饰的列,具有唯一性,可以代表一行数据

比如

![image](https://img.haomeiwen.com/i15606715/cf3d11e82a516289.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/373/format/webp)

编号具有体现某行数据的唯一性,可以代表这一行数据

主键约束的规则

*  一张表中最多只能有一个主键约束

*  做为主键的列,其中的数据不能是Null

*  一个主键约束可以作用在多个列上,叫做“联合主键”

    *多个列组成一个主键,这些列数据的组合作为主键出现*

    ![image](https://img.haomeiwen.com/i15606715/ca79919884db906f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/961/format/webp)

*面试题*

*一张表最多只能有一个主键约束* √

*一张表中最多只能有一个列是主键约束* x

主键约束的规范

*  不使用有实际意义的数据做为主键列,因为实际意义的列可能发生改动

创建主键的两种方式

*  建表时声明主键约束

    创建表时,直接在主键列后进行primary key进行声明

列级声明:

```

CREATE TABLE haha(

    hid INT(8) PRIMARY KEY,

    hname VARCHAR(32),

    birthday DATE

);

```

表级声明:

创建sno和cno为联合主键的表

```

CREATE TABLE stu_course(

    sno INT(8),

    cno INT(8),

    score INT(4),

    PRIMARY KEY(sno,cno)

);

```

```

CREATE TABLE haha(

    hid INT(8),

    hname VARCHAR(32),

    birthday DATE,

    CONSTRAINT PK_HAHA PRIMARY KEY(hid)

);

```

*  建表后追加主键约束

    为student表的sno列添加主键约束

```

ALTER TABLE student ADD PRIMARY KEY(sno);

```

##### 3.2 外键约束 Foreign Key

一张表的某个数据来源于另一张表,这就形成了外键关系

班级表

![image](https://img.haomeiwen.com/i15606715/278698916ebbf31a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/147/format/webp)

学生表

![image](https://img.haomeiwen.com/i15606715/00e12f290d9fcb3c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/207/format/webp)

学生表中cno的数据应该来源于班级表的cno主键,形成外键关系

学生表中cno列依赖于班级表的cno列

为学生表(student)追加外键约束

```

ALTER TABLE student ADD FOREIGN KEY(cno) REFERENCES classes(cno)

```

创建学生表(Student)直接设置外键,只有表级声明

```

CREATE TABLE student(

    sno INT(8) PRIMARY KEY,

    sname VARCHAR(32),

    cno INT(8),

    FOREIGN KEY(cno) REFERENCES classes(cno)

);

```

##### 3.3 唯一约束 Unique

被唯一约束修饰的列,其中数据不允许出现重复

唯一约束的特点(与主键约束的不同点)

*  一张表中可以有多个唯一约束

*  唯一约束的数据中可以有null

*主键约束与唯一约束的区别*

添加唯一约束的语句

列级声明

```

create table student(

    sno INT(8) primary key,

    sname VARCHAR(32) unique,

);

```

表级声明

```

create table student(

    sno INT(8),

    sname VARCHAR(32),

    primary key(sno),

    unique(sname)

);

```

##### 3.4 非空约束 Not Null

约束数据不能为null

列级声明

```

create table student(

    sno INT(8) primary key,

    sname VARCHAR(32) unique not null,

);

```

##### 3.5 检查约束 Check(MySQL不支持 Oracle支持)

自定义规则

比如约定某个整数类型的列输入的数字不能小于0

check(xxx > 0)

check(score >= 0 and score <= 100)

*笔试题:写出五种数据库的约束,各自进行解释?*

### 4.维护表

##### 4.1 删除表

**删除表时一定要事先确认**

不仅仅删除的是表中的数据,表结构(表自身)都被删除了

```

drop table 表名;

```

##### 4.2 截断表(清空表中的数据)

清空表中的数据,保留表结构(表自身)

```

truncate table 表名;

```

*面试题*

*- drop和truncate的区别?*

*答 drop时删除整张表,包含表结构;truncate是截断表,保留表结构,数据无法恢复*

##### 4.3 更改表名

将表student2更名为student3

```

ALTER TABLE student2 RENAME student3

```

##### 4.4 更改列名和列的数据类型

更改student3表中的sname列为snamex,同时列的数据类型varchar(64)

```

ALTER TABLE student3 CHANGE sname snamex VARCHAR(64);

```

##### 4.5 增加列

为student3表新增birthday列,列的数据类型是date类型

```

ALTER TABLE student3 ADD COLUMN birthday DATE

```

##### 4.6 删除列

删除student3表中birthday列

```

ALTER TABLE student3 DROP COLUMN birthday

```

**本章重点**

1.  表的概念

2.  各种约束的概念

3.  主键约束的一些细节(联合主键)

4.  主键和唯一的区别

5.  drop和truncate的区别

相关文章

  • JAVA 之路第一讲

    数据类型: 基础数据类型 包装器数据类型 引用数据类型 null 数据类型 基础数据类型: 整型 byte(字节型...

  • php 数据类型和数据类型转化

    一、数据类型 基础数据类型 复合数据类型 特殊数据类型 二、获取数据类型 三、打印数据类型和值 四、数据类型判断 ...

  • OC和C中的数据类型

    数据类型对比 C语言数据类型C语言数据类型 OC数据类型

  • JAVA 核心笔记 || [2] 数据类型

    JAVA数据类型分为两大数据类型: 1.内置数据类型2.引用数据类型 内置数据类型 引用数据类型 上篇 : 开篇 ...

  • 数据类型

    数据类型作用:数据类型不同,空间大小不同。 数据类型分类:基本数据类型、引用数据类型基本数据类型:整数型、浮点型、...

  • Java知识之数据类型

    Java数据类型图表## Java数据类型分为:### 基础数据类型 引用数据类型 null类型 基础数据类型分別...

  • JAVA基础第四天

    JAVA数据类型---布尔类型; 数据类型转换自动数据类型转换 强制数据类型转换

  • Java数据类型(慢慢积累,对于事物的理解也会不一样)

    Java的数据类型: 1. 内置数据类型(基本数据类型); 2. 引用数据类型; Java基本数据类型:(...

  • 【IOS 开发】 数据类型详解

    1. 数据类型简介及输出 (1) 数据类型简介 数据类型简介: Object - C 数据类型 分为 基本数据类型...

  • iOS 数据类型简介及输出

    一、数据类型简介及输出 1.数据类型简介 数据类型简介 : Object - C 数据类型 分为 基本数据类型, ...

网友评论

      本文标题:数据类型

      本文链接:https://www.haomeiwen.com/subject/cythaqtx.html