目录

一、创建表的语法

二、表的物理存储类型

三、数据类型

3.1 文本类型类型:

3.2 数字类型:

3.3 时间\日期类型:

常用数据类型:

四、查看表

五、删除表

六、修改表的结构

八、数据库字典

九、表的约束

9.1 五类完整性约束:

9.2 表的约束实例

9.2.1 非空约束

9.2.2 唯一约束

9.2.3 主键约束

9.2.4 外键约束

9.2.5 检查约束

9.2.6 自动增长

9.2.7 默认值约束


一、创建表的语法

标准的建表(table)语法(列定义之间以英文逗号,隔开):数据表的每行称为一条记录(record),每一列称为一个字段(field):主键(字段)列:唯一标识某一行的列:CREATE TABLE 表名(列名(字段名) 类型,列名(字段名) 类型,列名(字段名) 类型,列名(字段名) 类型,列名(字段名) 类型) ENGINE = 存储结构;

二、表的物理存储类型

MyISAM || InnoDB(默认)存储列相关信息,描述表结构文件,字段长度等如果采用共存储模式的,数据信息和索引信息都存储在ibdata1中,如果采用分区存储,还会有一个t.par文件(用来存储分区信息)。

三、数据类型

MySQL中常用数据类型有三种:1、文本类型 2、数字类型 3、日期/时间类型

3.1 文本类型类型:

数据类型描述
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,295 字节的数据。
ENUM枚举类型

3.2 数字类型

数据类型描述
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 类型,允许固定的小数点。

3.3 时间\日期类型

数据类型描述
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

常用数据类型:

四、查看表

SHOW命令语法:SHOW TABLES [FROM 数据库名] [LIKE wild];查看表结构:SHOW COLUMNS FROM 表名

五、删除表

DROP TABLE [IF EXISTS] 表名

让我们举一个例子理解一下:

#创建学生表CREATE TABLE Students(studentNo INT(5),studentName VARCHAR(50),studentBirthDATE,studentAddress VARCHAR(100),studentTel VARCHAR(11),studentEmail VARCHAR(50)) ENGINE = InnoDB;#查看表结构SHOW COLUMNS FROM Student#删除表DROP TABLE [IF EXISTS] Student

六、修改表的结构

修改列类型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 新表名;RENAME TABLE 表名 TO 新表名;

七、复制表的结构

复制表的结构有两种手段方式1:在 CREATE TABLE 语句的末尾加入 LIKE 源表;>>>CREATE TABLE Students1 LIKE Students;//只有结构没有数据方式2:在 CREATE TABLE 语句末尾添加 SELECT 关键字;>>> CREATE TABLE Students2 SELECT * FROM Students;//有结构又有数据方法3:如果已经有一张表了(结构一定要和源表一样)>>> INSERT INTO 表名 SELECT * FROM 源表;//结构已经一致单纯复制数据

八、数据库字典

tables-存放数据库里所有的数据表、以及每个表所在数据库
schemata-存放数据库里所有的数据库信息
views-存放数据库里所有的视图信息
columns-存放数据库里所有的列信息
triggers-存放数据库里所有的触发器
routines-存放数据库里所有存储过程和函数
key_column_usage-存放数据库所有的主外键
table_constraints-存放数据库全部约束
statistics-存放了数据表的索引

(备注:由 information_schema 数据库负责维护)

九、表的约束

表的约束是在表上强制执行的数据校验规则

约束主要用于保证数据库的完整性,当表中数据有相互依赖性时,可以保护相关的数据不被删除

9.1 五类完整性约束:

1,非空约束 NOT NULL
2,唯一性约束 UNIQUE KEY >>>主键约束(非空+唯一) PRIMARY KEY
3,外键约束 FOREIGN KEY
4,检查约束 CHECK 检查语法
5,默认值约束 DEFAULT

加入约束的三种时机1,建表时期加入,直接符在声明的列后。2,建表时期加入,所有列声明完成后,单独去重新声明列的约束性。3,建表后加入,语法参考修改列类型语法完成约束的添加。约束作为数据库对象,存放在系统表中,也有自己的名字创建约束的时机在建表的同时创建建表后创建(修改表)可定义列级或表级约束有单列约束和多列约束定义约束的语法方式1:列级约束:在定义列的同时定义约束语法:列定义 约束类型,方式2:表级约束:在定义了所有列之后定义的约束语法:列定义[CONSTRAINT 约束名] 约束类型(列名)约束名的取名规则推荐采用:表名_列名_约束类型简介方式3:约束可以在创建表时就定义,也可以在创建完后再添加语法:ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型(要约束的列名)

9.2 表的约束实例

9.2.1 非空约束

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

可以确保字段值不允许为空,只能在字段级定义

CREATE TABLE Students(studentNo INT PRIMARY KEY AUTO_INCREMENT,studentName VARCHAR(50) NOT NULL);

9.2.2 唯一约束

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

CREATE TABLE Students(studentNo INT PRIMARY KEY AUTO_INCREMENT,studentName VARCHAR(18) UNIQUE NOT NULL);

9.2.3 主键约束

主键从功能上看相当于非空且唯一
一个表中只允许一个主键
主键是表中唯一确定一行数据的字段
主键字段可以是单字段或者是多字段的组合
当建立主键约束时,MySQL为主键创建对应的索引

CREATE TABLE tb_student(studentNo INT PRIMARY KEY AUTO_INCREMENT,studentName VARCHAR(18));

9.2.4 外键约束

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

格式FOREIGN KEY (外键列名)REFERENCES 主表(参照列)#部门CREATE TABLE tb_dept(dept_id INT PRIMARY KEY,NAME VARCHAR(18),description VARCHAR(255));#员工CREATE TABLE tb_employee(employee_id INT PRIMARY KEY,NAME VARCHAR(18),gender VARCHAR(10),dept_id INT REFERENCES tb_dept(dept_id),address VARCHAR(255));

9.2.5 检查约束

create table t3(id int, age int check(age > 18),gender char(1) check(gender in ('M','F')));

需要注意的是检查约束在8.0版本之前,MySQL默认但不会强制的遵循check约束(写不报错,但是不生效,需要通触发器完成),8.0版本之后就开始正式支持这个约束了

9.2.6 自动增长

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

9.2.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;