数据表 (TABLE)
数据库实际上就是多个表组成的,表中存储着数据。
数据表也是数据库最重要的组成部分之一,我们绝大多数情况下都是在跟表打交道。
例如从表里查找一些数据,删除表中的某些数据,更新表中的某些数据等等。
数据表由行(row)和列(column)组成,是一个二维的网格结构,每个列都是一个字段。
字段由字段名称和字段的数据类型以及一些约束条件组成
表中至少要有一列,可以有多行或0行,表名要唯一
MySQL的数据类型
本章我们先对数据类型有个简单的认识,大概知道有哪几种数据类型即可,详细的数据类型在下一篇博客再来讲解。
跟编程语言一样,数据库也有不同的数据类型,用于存储不同类型的数据。
MySQL支持多种类型的SQL数据类型:数值,日期和时间类型,字符串(字符和字节)类型,空间类型和 JSON数据类型等
数据类型描述使用以下约定:
- M 表示整数类型的最大显示宽度。对于浮点和定点类型, M是可以存储的总位数(精度)。对于字符串类型, M是最大长度。允许的最大值M取决于数据类型。
- D 适用于浮点和定点类型,并指示小数点后面的位数。最大可能值为30,但不应大于 M-2。
- [ ] 表示类型定义的可选部分。
在MySQL中常用数据类型主要分为以下几类
- 数值类型
- 字符串类型
- 日期时间类型
数值类型
数值类型分为整数型、浮点型、定点型
整数型(精确值)
- TINYINT 非常小的整数
- SMALLINT 小整数
- MEDIUMINT 中等大小的整数
- INT 正常大小的整数
- BIGINT 大整数
浮点型(近似值)
- FLOAT 一个小的(单精度)浮点数
- DOUBLE 正常大小(双精度)浮点数
定点型(精确值)
- DECIMAL 定点数
字符串类型
- CHAR
- VARCHAR
- BINARY
- VARBINARY
- BLOB
- TEXT
- ENUM
- SET
日期时间类型
- TIME
- DATE
- DATETIME
- TIMESTAMP
- YEAR
约束条件
约束条件就是在给字段加一些约束,使该字段存储的值更加符合我们的预期。
常用约束条件有以下这些
- UNSIGNED :无符号,值从0开始,无负数
- ZEROFILL:零填充,当数据的显示长度不够的时候可以使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED
- NOT NULL:非空约束,表示该字段的值不能为空
- DEFAULT:表示如果插入数据时没有给该字段赋值,那么就使用默认值
- PRIMARY KEY:主键约束,表示唯一标识,不能为空,且一个表只能有一个主键。一般都是用来约束id
- AUTO_INCREMENT:自增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1
- UNIQUE KEY:唯一值,表示该字段下的值不能重复,null除外。比如身份证号是一人一号的,一般都会用这个进行约束
- FOREIGN KEY:外键约束,目的是为了保证数据的完成性和唯一性,以及实现一对一或一对多关系
数据表的相关操作 (DML)
DML(Data Manipulation Language):数据操作语言(用于插入(增Insert)、删除(删 Delete)、更新(改 Update)数据),操作对象是表里的数据
首先我们要先进入数据库,才能操作表
USE dbName;
创建表
建表语句,默认的存储引擎是InnoDB,8.x版本的MySQL的默认编码方式是utf8
CREATE TABLE [IF NOT EXISTS] tabName(
字段名称 字段类型 [约束条件],
字段名称 字段类型 [约束条件],
...
)ENGINE=存储引擎 CHARSET=编码方式;
下面我们以创建一个简单的用户表为例
一般用户表中都会有用户的账号(account)、密码(pwd)、姓名(name)、年龄(age)、性别(gender)等数据
账号肯定是唯一值且不能为空,密码肯定也不能为空,姓名可以重复,年龄肯定是大于0的数,性别有男,女,或保密
下面我们来创建表
#创建一个user表
CREATE TABLE IF NOT EXISTS user(
id INT,
account VARCHAR(50) NOT NULL,
name VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED,
gender ENUM('男','女','保密') DEFAULT '保密'
);
这样一个简单的user表就创建完毕了
查看当前数据库下的所有表
SHOW TABLES;
查看表结构
下面三种方法都可以
#查看数据库下的所有表
DESC user;
DESCRIBE user;
SHOW COLUMNS FROM user;
删除表
#删除表
DROP TABLE user;
表结构相关操作
添加字段
FIRST:放到表的首位
AFTER:放到某个字段后面
ALTER TABLE tabName
ADD 字段名称 字段属性 [完整性约束条件] [FIRST|AFTER 字段名称]
示例
#添加字段
ALTER TABLE user ADD addr VARCHAR(50);
删除字段
ALTER TABLE tabName
DROP 字段名称
示例:
#删除字段
ALTER TABLE user DROP addr;
给字段添加默认值
ALTER TABLE tabName
ALTER 字段名称 SET DEFAULT 默认值;
示例:
#给字段添加默认值
ALTER TABLE user ALTER name SET DEFAULT '喻志强';
删除默认值
ALTER TABLE tabName
ALTER 字段名称 DROP DEFAULT
示例
#删除默认值
ALTER TABLE user ALTER name DROP DEFAULT;
修改字段类型和字段属性(MODIFY)
ALTER TABLE tabName
MODIFY 字段名称 字段类型 [字段属性] [FIRST | AFTER 字段名称]
示例:
#修改字段的字段类型和字段属性
ALTER TABLE user MODIFY id INT AUTO_INCREMENT KEY;
修改字段名称、字段类型、字段属性(CHANGE)
跟MODIFY相比CHANGE可以修改字段的名称
ALTER TABLE tabName
CHANGE 原字段名称 新字段名称 字段类型 字段属性 [FIRST | AFTER 字段名称]
示例:
#修改字段名称,字段类型,字段属性
ALTER TABLE user CHANGE name username CHAR(20) NOT NULL FIRST;
添加主键
ALTER TABLE tabName
ADD PRIMARY KEY(字段名称)
示例:
#添加主键
ALTER TABLE user ADD PRIMARY KEY(id);
删除主键
ALTER TABLE tableName
DROP PRIMARY KEY;
示例:
#删除主键(需要注意的是改字段的约束不能使自增长 否则无法删除)
ALTER TABLE user DROP PRIMARY KEY;
添加唯一
默认INDEX(索引)的名称跟字段名一致。
ALTER TABLE tableName
ADD UNIQUE KEY|INDEX [indeName] (字段名称)
示例:
#添加唯一
ALTER TABLE user ADD UNIQUE KEY(account);#添加唯一,默认index的名称是字段名称
ALTER TABLE user ADD UNIQUE KEY uni_account(account);#添加唯一 指定account字段的索引名称为uni_account
ALTER TABLE user ADD UNIQUE INDEX uni_account(account);#添加唯一 指定account字段的索引名称为uni_account
删除唯一约束
ALTER TABLE tabName
DROP index_name;
示例
#删除唯一
ALTER TABLE user DROP INDEX account;
修改表名称
ALTER TABLE tabName
RENAME [TO|AS] newTabName
或者
RENAME TABLE tabName TO newTabName;
示例:
#修改表名称
RENAME TABLE user TO user1;
以上就是表的常用操作
下一篇:
如果你觉得本文对你有帮助,麻烦动动手指顶一下,可以帮助到更多的开发者,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!