数据库(表的基本操作)

发布时间:2024年01月22日

目录

1.1 表的基本操作

1.1.1 创建表

1.1.2 表物理存储结构

1.1.3 数据类型

文本类型:

数字类型:

时间/日期类型:

常用的数据类型:

1.1.4 查看表

SHOW 命令

查看表结构:

1.1.5 删除表

查看表结构:

删除表:

1.1.6 修改表

修改列类型:

添加列:

删除列:

改列名:

改表名:

1.1.7 复制表的结构(考虑到数据问题)

复制表的结构手段如下:

1.1.8 数据库字典

1.1.9 表的约束

加入约束的三种时机:

创建约束是时机:

定义约束的语法:

约束名的取名规则:

表的约束示例

? ? ? ? 1、非空约束(NOT NULL)

? ? ? ? 2、唯一约束

? ? ? ? 3、主键约束

? ? ? ? 4、外键约束

? ? ? ? 5、检查约束

? ? ? ? 6、自动增长

? ? ? ? 7、默认值


1.1 表的基本操作

1.1.1 创建表

语法如下:

? ? ? ? 标准的建表(table)语法(列定义之间以英文逗号 , 隔开):

? ? ? ? 数据表的每行称为一条记录(record),每一列称为一个字段(field):

? ? ? ? 主键(字段)列:唯一标识某一行的列:

CREATE TABLE 表名(
    列名(字段名) 类型,
    列名(字段名) 类型,
    列名(字段名) 类型,
    列名(字段名) 类型,
    列名(字段名) 类型,
) ENGINE = 存储结构;

? ? ? ? 表名采用大驼峰命名如 >>> Students????????Subject????????StudentResult

? ? ? ? 表名采用小驼峰命名如 >>> studentName? ? ? ? subjectName? ? ? ? resultDate

1.1.2 表物理存储结构

MyISAM    ||    InnoDB(默认)

? ? ? ? ?存储列相关信息,描述表结构文件,字段长度等

? ? ? ? 如果采用共存储模式的,数据信息和索引信息都存储在 ibdata1 中

? ? ? ? 如果采用分区存储,还会有一个 t.par 文件(用来存储分区信息)

1.1.3 数据类型

在MySQL中,常用的数据类型有三种

? ? ? ? 文本类型、数字类型、日期/时间类型

文本类型:

数据类型描述
CHAR(size)

保存固定长度的字符串(可以包含字母、数字以及特殊字符),在括号中指定字符串的长度。最多 255 个字符

VARCHAR(size)保存可变长度的字符串(可以包含字母、数字以及特殊字符),在括号中指定字符串的最大长度,最多 255 个字符。如果是? size > 255? 则类型会自动转换为 TEXT 类型
TEXT存放最大长度为 65,535个字符的字符串
TINYTEXT存放最大长度为 255 个字符的字符串
MEDIUMTEXT存放最大长度为 16,777,215 个字符的字符串
LONGTEXT存放最大长度为 4,294,967,295 个字符的字符串
BLOB用于 BLOBs(Binary Large Objects) 存放最多 65,535 字节的数据
MEDIUMBLOB用于 BLOBs(Binary Large Objects) 存放最多 16,777,215 字节的数据
LONGBLOB

用于 BLOBs(Binary Large Objects) 存放最多 4,294,967,294 字节的数据

ENUM枚举类型

数字类型:

数据类型描述
TINYINT(size)-128 到 127 常规, 0 到 255 无符号 *? 在括号中规定最大位数
SMALLINT(size)-32768 到 32767 常规, 0 到 65535 无符号 *? 在括号中规定最大位数
MEDIUMINT(size)-8388608 到 8388607 普通, 0 到 16777215 无符号 *? 在括号中规定最大位数
INT(size)-2147483648 到?2147483647 常规,0到?4294967295 无 符号*。在括号中规定最大位数
BIGINT(size)-9223372036854775808 到 9223372036854775807 常规
FLOAT(size,d)带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数
DOUBLE(size,d)带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数

DECIMAL(size,d)

作为字符串存储的 DOUBLE 类型,允许固定的小数点

时间/日期类型:

数据类型描述
DATE()日期。格式:YYYY-MM-DD 取值范围 '1000-01-01' <<<>>> '9999-12-31'
DATETIME()

日期和时间的组合。格式: YYYY-MM-DD HH:MM:SS

注释:支持的范围是'1000-01-01 00:00:00' <<<>>> '9999-12- 31 23:59:59'

TIMESTAMP()

时间戳。 TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式: YYYY-MM-DD HH:MM:SS

注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC

TIME()

时间。格式: HH:MM:SS

注释:支持的范围是从 '-838:59:59' 到 '838:59:59'

YEAR()

2 位或 4 位格式的年。

注释: 4 位格式所允许的值: 1901 到 2155。 2 位格式所允许 的值: 70 到69,表示从 1970 到 2069

常用的数据类型:

1.1.4 查看表

SHOW 命令

语法如下:
    SHOW TABLES [FROM 数据库名] [LIKE wild];

查看表结构:

SHOW COLUMNS FROM 表名

1.1.5 删除表

语法如下:
    DROP TABLE [IF EXISTS] 表名

示例如下:

#创建学生表
CREATE TABLE Students(
    studentNo INT(5),
    studentName VARCHAR(50),
    studentBirth DATE,
    studentAddress VARCHAR(100),
    studentTel VARCHAR(11),
    studentEmail VARCHAR(50),
) ENGINE = InnoDB;

查看表结构:

SHOW COLUMNS FROM Students;

删除表:

DROP TABLE [IF EXISTS] Student;

1.1.6 修改表

修改列类型:

ALTER TABLE 表名 MODIFY 列名 列类型;
示例:
    ALTER TABLE Students MODIFY studentEmail TEXT;   

添加列:

ALTER TABLE 表名 ADD 列名 列类型;
示例:
    ALTER TABLE Students ADD studentGender CHAR(2);

删除列:

ALTER TABLE 表名 DROP 列名;
示例:
    ALTER TABLE Students DROP studentGender;
注意:
    在删除时,应该注意数据的完整性

改列名:

ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;
示例:
    ALTER TABLE Students CHANGE studentEmail studentEma VARCHAR(50);

改表名:

ALTER TABLE 表名 RENAME 新表名;

ALTER TABEL 表名 TO 新表名;

1.1.7 复制表的结构(考虑到数据问题)

复制表的结构手段如下:

? ? ? ? 方式一:

在 CREATE TABLE 语句的末尾加入 LIKE 源表;
示例:
    CREATE TABLE Students1 LIKE Students;

? ? ? ? 方式二:

在 CREATE TABLE 语句末尾添加 SELECT 关键字;
示例:
    CREATE TABLE Students2 SELECT * FROM Students;

? ? ? ? 方式三:

如果已经有了一张表(结构一定要和源表一样)
语法:
    INSERT INTO 表名 SELECT * FROM 源表;

1.1.8 数据库字典

information_schema? 数据库负责维护

tables存放数据库里所有的数据表、以及每个表所在数据库
schemata存放数据库里所有的数据库信息
views

存放数据库里所有的视图信息

columns存放数据库里所有的列信息
triggers存放数据库里所有的触发器
routines存放数据库里所有存储过程和函数
key_column_usage存放数据库所有的主外键
table_constraints存放数据库全部约束
statistics存放了数据表的索引

1.1.9 表的约束

是在表上强制执行的数据校验规则,约束主要用于保护数据库的完整性。当表中的数据有相互依赖性时,可以保护相关的数据不被删除

大部分数据库支持以下完整性约束:

非空约束NOT NULL
唯一性约束

UNIQUE KEY

主键约束(非空 + 唯一)PRIMARY KEY
外键约束FOREIGN KEY
检查约束CHECK 检查语法
默认值约束DEFAULT
............

加入约束的三种时机:

? ? ? ? 1、建表时期加入,直接符在声明的列后

? ? ? ? 2、建表时期加入,所有列声明完成后,单独去重新声明列的约束性

? ? ? ? 3、建表后加入,语法参考修改列类型语法完成约束的添加

约束作为数据库对象,存放在系统表中,也有自己的名字

创建约束是时机:

? ? ? ? 1、在建表的同时创建

? ? ? ? 2、建表后创建(修改表)

可定义列级或表级约束

有单列约束和多列约束

定义约束的语法:

方式一

列级约束:在定义列的同时定义约束

语法:

? ? ? ? 列定义 约束类型

方式二

表级约束:在定义了所有列之后定义的约束

语法:

? ? ? ? 列定义

? ? ? ? [CONSTRAINT 约束名] 约束类型(列名)

约束名的取名规则:

推荐采用:表名_列名_约束类型简介

方式三

约束可以在创建表时就定义,也可以在创建完成后再添加

语法:

? ? ? ? ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型(要约束的列名)

表的约束示例

? ? ? ? 1、非空约束(NOT NULL)

? ? ? ? ? ? ? ? 列级约束,只能使用列级约束语法定义

? ? ? ? ? ? ? ? 确保字段值不允许为空

? ? ? ? ? ? ? ? 只能在字段级定义

CREATE TABLE Students(
    	studentNo INT PRIMARY KEY AUTO_INCREMENT,
    	studentName VARCHAR(50) NOT NULL
);
? ? ? ? 2、唯一约束

????????????????唯一性约束条件确保所在的字段或者字段组合不出现重复值
????????????????唯一性约束条件的字段允许出现多个NULL
????????????????同一张表内可建多个唯一约束
????????????????唯一约束可由多列组合而成
????????????????建唯一约束时MySQL会为之建立对应的索引。
????????????????如果不给唯一约束起名,该唯一约束默认与列名相同

CREATE TABLE Students(
    studentNo INT PRIMARY KEY AUTO_INCREMENT,
    studentName VARCHAR(18) UNIQUE NOT NULL
);
? ? ? ? 3、主键约束

????????????????主键从功能上看相当于非空且唯一
????????????????一个表中只允许一个主键
????????????????主键是表中唯一确定一行数据的字段
????????????????删除表的约束
????????????????自动增长和默认值
????????????????存储引擎
????????????????主键字段可以是单字段或者是多字段的组合
????????????????当建立主键约束时,MySQL为主键创建对应的索引
????????????????主键约束名总为PRIMARY

CREATE TABLE tb_student(
    studentNo INT PRIMARY KEY AUTO_INCREMENT,
    studentName VARCHAR(18)
);
? ? ? ? 4、外键约束

????????????????外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
????????????????外键确保了相关的两个字段的两个关系:
????????????????子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)。
????????????????当主表的记录被子表参照时,主表记录不允许被删除。
????????????????外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录

格式:
    FOREIGN KEY (外键列名)REFERENCES 主表(参照列)
? ? ? ? 5、检查约束

????????????????检查约束在8.0之前,MySQL默认但不会强制的遵循check约束(写不报错,但是不生效,需要通触发器完成)

????????????????8之后就开始正式支持这个约束了

create table t3(
    id int, 
    age int check(age > 18),
    gender char(1) check(gender in ('M','F'))
);
? ? ? ? 6、自动增长
auto_increment :自动增长

????????????????为新的行产生唯一的标识
?? ?????????????一个表只能有一个 auto_increment,且该属性必须为主键的一部分。auto_increment的属性可以是任何整数类型

? ? ? ? 7、默认值
default : 默认值
# 默认值
可以使用default关键字设置每一个字段的默认值。
-- 创建一张user表
CREATE TABLE User(  
  id INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  name VARCHAR(225) COMMENT '姓名',
  sex TINYINT(1) DEFAULT 1 COMMENT '性别 1男 0女',
  PRIMARY KEY (id)
) ENGINE=INNODB CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

文章来源:https://blog.csdn.net/qq_64227183/article/details/135726723
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。