MySQL[数据类型与SQL]

2023-10-23 09:56:55 浏览数 (1)

一、数据类型

1、数值型

名称

取值范围

tinyint(长度)

有符号-128-128无符号 0-255

smallint(长度)

-2的15次方 - 2的15次方

mediumint(长度)

-2的23次方-2的23次方

int(长度)

-2的31次方-2的31次方

float(长度,小数位数)

float(5,2) 第一个是数值整体的长度加上小数点,第二个值是小数的位数 13.25

double(长度,小数位数)

double(5,2) 13.25

decimal(长度,小数位数)

decimal(5,2) 13.25 要求精确度很高的数据就使用decimal

2、字符串

名称

取值范围

char(长度)

char(5),char固定长度字符串,长度值char(0-255),如果存放的值超过了5系统报错 'abcdef'6个长度系统报错,这个类型如果字符串不满五个长度时,按五个长度算

varchar(长度)

可变长度,长度取值0-65535,varchar(5)如果存放的值超过了5个长度也会报错,不满五个长度时系统会根据值的长度而变化计算空间

tinytext

微字符串 0-255个长度的字符

text

大文本型 0-65535 编辑器-->编辑的内容会有text或longtext进行存储

longtext

超大文本

3、日期型

名称

取值范围

datetime

内部以日期格式存放数据 , 是以系统的时间为准

timestamp

时间戳 , 是以mysql的时间为准

4、二进制

名称

取值范围

Blob

二进制类型

二、 SQL(DDL)

1、新建表

7.1.1 语法

代码语言:javascript复制
create table [if not exists ] 表名(
    
    字段名 数据类型(长度) [字段属性],
    字段名 数据类型(长度) [字段属性],
    字段名 数据类型(长度) [字段属性]
)engine=[innodb] charset=utf8;

属性说明

名称

说明

primary key

代表主键,唯一不重复

auto_increment

代表当前键自增,保证当前的字段的类型为数值型,一般情况下主键设置自增

not null

代表当前列的数据在添加时不能省略

default

默认值

foreign key(字段名)

设置外键

COMMENT '学号'

说明

engine=innodb

设置存储引擎

charset=utf8

设置表的编码

建表案例:

代码语言:javascript复制
create table if not exists student(
    studentno int   not null auto_increment primary key,
    loginpwd varchar(50) not null,
    studentname varchar(50) not null,
    gender char(1) default '男',
    gradeid int,
    phone char(11),
    address varchar(100),
    email varchar(20),
    identitycard char(18)
)engine=innodb charset=utf8;

7.1.2、删除表

drop table if exists 表名; 如果表存在就删除

7.1.3、查看表结构

desc 表名;

2、修改表结构

7.2.1 修改表名

语法: alter table 原表名 rename 新表名;

案例: alter table newstudent rename student;

7.2.2 添加字段

语法: alter table 表名 add 添加的字段名 字段的类型(长度) 字段的属性;

案例: alter table grade add resultDate timestamp;

7.2.3 删除字段

语法:alter table 表名 drop 字段名;

案例: alter table student drop photo;

7.2.4 修改字段

语法: alter table 表名 change 原字段名 新字段名 字段类型(长度) 字段属性;

案例: alter table student change photo images varchar(500) not null;

3、主键与外键

7.3.1 相关理论

用于连接两张表之间的关系,解决的是数据的冗余,剧有关系的表中所有的关键字段联系在一起才能够组合成一条完整的可读性记录。

有外键的表是子表,没有外键的表是主表,一般情况下主表的数据信息会相对于少于子表(这不是绝对的)。主要还是看有没有关联字段(外键)。

设置主外键关系是在子表上进行设置.

主外键关系的名称,一般都是全大写,以FK为前缀,多个单词之间用下划线(_)分隔。

设置完主外键关系之后,子表中添加数据时的外键字段中的数据在主表中必须存在,如果不存在将会引发异常。

7.3.2 SQL操作

主键(唯一,非空,标识该条记录是一条唯一记录) :

创建主键有两种方式:

1) 第一种在建表时创建

代码语言:javascript复制
create table grade(
    gradeId int primary key auto_increment not null,
)

2) 建表时没有指定主键,后期来进行添加

//PK_主键名 为主键索引取一个名称

语法:alter table 表名 add constraint PK_主键名 primary key 表名(主键字段名);

案例:alter table student add constraint PK_GRADE_ID primary key student(studentno)

外键(两表之间逻辑关联,降低数据冗余):

外键的创建两种方式:

1) 第一种建表时没有指定,后期进行添加

语法: alter table 子表名 add constraint FK_ 外键名称 foreign key(子表中的关联字段) references 主表名(主表中的主键字段);

案例: alter table student add constraint FK_GRADE_ID1 foreign key (gradeid) references grade(gradeid)

2) 第二种在建表的时候指定主外键关系

代码语言:javascript复制
mysql> create table result(
    -> studentNo int,
    -> subjectNo int,
    -> examDate timestamp,
    -> studentResult int,
    -> foreign key(studentNo) references student(studentNo),
    -> foreign key(subjectNo) references subject(subjectNo)
    -> )engine=innodb charset=utf8;

4、数据表设计规范

什么是三大范式?

设计表的依据:按照三大范式设计的表不会出现数据冗余。

1)第一范式

任何表都有一个主键,并且每一个字段的原子性不可再分。

不满足第一范式

满足第一范式:

2) 第二范式

第二范式在第一范式的基础上,所有的非主键字段,完全依赖主键,不能产生部分依赖。容易产生冗余数据

(3) 第三范式

在第二大范式的基础上,所有非主键字段直接依赖主键,不能产生传递依赖。

总结: 设计范式 设计表的依据,按照三范式的表,不会出现数据冗余。

0 人点赞