MySQL 数据库表的基本操作

一、数据库表概述

在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的一个域。

二、数据表的创建语句

通常在创建表时,应该使用语句USE 数据库名,指定在哪个数据库中操作,如果没有指定库时我们也可以在创建时,用 <数据库名.数据表>来进行创建。

创建数据表语句:

sql 复制代码
create table <表名>
(
 字段名1,数据类型 [列级别约束条件] [默认值],
 字段名2,数据类型 [列级别约束条件] [默认值],
 ............
 [表级别约束条件]
);

创建表的注意事项:

1、创建表的名称不区分大小写,不能使用SQL语句中的关键字。

2、数据表中的一个字段(列)的名称和数据类型要创建多列(个),要用逗号分割。

三、约束条件

1、主键约束

主键,也成为主码,时表中一列或多列的组合,主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键和记录之间的关系如同身份证和人之间的关系,他们之间是一一对应的。主键分为两种类型:单字段主键和多字段联合主键。

主键从功能上来看相当于非空且唯一。

① 直接在定义字段时在后面进行定义,也称为行级主键约束、单字段主键。

sql 复制代码
create table <表名>
(
 字段名1,数据类型 primary key [默认值],
 ............
);

② 在定义完表时,在后面进行定义,也称为表级主键约束,可以多个字段联合组成。

sql 复制代码
create table <表名>
(
 字段名1,数据类型 [列级别约束条件] [默认值],
 字段名2,数据类型 [列级别约束条件] [默认值],
 ............
 primary key 字段名1 [,字段名2,......字段名n]
);

2、外键约束

外键用来两个表的数据之间建立连接,它可以是一列或者都多列,一个表可以有一个或者多个外键,外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某一个值。

外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另一个表的主键。外键主要作用是保证数据引用的完整性,定义外键之后,不允许删除另一个表中具有关联关系的行。外键的作用是保持数据一致性、完整性。

主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。

从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

sql 复制代码
[constraint <外键名>] foreign key 字段名1 [,字段名2,......]
peferences <主表名> 主键列1 [,主键列2,......]

"外键名"为定义的外键约束的名字,一个表中不能有相同名称的外键,"字段名"表示子表需要添加外键约束的字段列;"主表名"即被子表外键所依赖的表的名称;"主键列" 表示主表定义的主键列,或列组合。

3、非空约束

非空约束就是指该字段的值不能为空。用户在添加数据的时候必须指定值,否则会报错。

sql 复制代码
create table <表名>
(
 字段名1,数据类型 not null [默认值],
 ............
);

4、唯一约束

唯一性约束要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。如果不给唯一约束起名,默认与列名相同。

语法如下:

sql 复制代码
create table <表名>
(
 字段名1,数据类型 unique [默认值],
 ............
);
或者
create table <表名>
(
 字段名1,数据类型 [行级约束] [默认值],
 ............
unique <字段名>
);

unique和primary key的区别:一个表中可以有多个字段声明为unique,但只能有一个primary key声明;声明为primary key的列不允许有空值,但是声明为unique的字段允许为空值(NULL)的存在。

5、默认值约束

默认值约束指定某一列的默认值,当一个值出现比较多就可以用次约束,方便输入数据提高速度。

语法如下:

php 复制代码
create table <表名>
(
 字段名1,数据类型 [行级约束条件] default 默认值,
 ............
);

6、自动增加

auto_increment关键字来实现,不指定步长时,默认自动加1,一个表中只能有一个字段使用自定增加约束,且该字段必须为主键的一部分,该约束的字段类型只能是整型类型。

sql 复制代码
create table <表名>
(
 字段名1,数据类型  primary key auto_increment [默认值],
 ............
);

四、查看数据表结构

1、查看基本结构

sql 复制代码
mysql> desc books;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| bk_id     | int(11)     | NO   | PRI | NULL    |       |
| bk_title  | varchar(50) | NO   |     | NULL    |       |
| copyright | year(4)     | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> describe books;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| bk_id     | int(11)     | NO   | PRI | NULL    |       |
| bk_title  | varchar(50) | NO   |     | NULL    |       |
| copyright | year(4)     | NO   |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

2、查看表的创建详细结构

sql 复制代码
mysql> show create table books;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                       |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| books | CREATE TABLE `books` (
  `bk_id` int(11) NOT NULL,
  `bk_title` varchar(50) NOT NULL,
  `copyright` year(4) NOT NULL,
  PRIMARY KEY (`bk_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

五、修改表的操作

1、修改表名

sql 复制代码
alter table <旧表名> [to] <新表名>;

2、修改字段的数据类型

sql 复制代码
alter  table  <表名>  modefiy  <字段名>  <数据类型>;

3、修改字段名

sql 复制代码
alter table <表名> change <旧字段名> <新字段名> <新数据类型>;

4、添加字段

在最后一列添加一个字段名

sql 复制代码
alter table <表名> add <新字段名> <数据类型>;

在第一列增加一个字段或者指定在已经存在的字段后增加一个字段

sql 复制代码
alter table <表名> add <新字段名> <数据类型> <first | after 已经存在的字段名>;

5、删除字段

sql 复制代码
alter table <表名> drop <字段名>;

6、修改字段的排列位置

sql 复制代码
alter table <表名> modifiy <字段名1> <数据类型> first | after <字段名2>;

"字段名1" 指定要修改位置的字段,"数据类型"指"字段名1"的数据类型,"first"为可选参数,将指定"字段1"修改为表的第一个字段,"after 字段2"指将"字段1 "插入到"字段2"后面。

7、修改表的存储引擎

sql 复制代码
alter table <表名> engine=存储引擎类型;

8、删除表的外键约束

sql 复制代码
alter table <表名> drop foreign key <外键约束名>;

9、删除数据表

一次可以删除一个或者多个数据库表

sql 复制代码
drop table [if exists] <表名>;

参考书籍:MySQL5.7从入门到精通-清华大学出版社

相关推荐
Karoku0668 分钟前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
小技与小术1 小时前
数据库表设计范式
数据库·mysql
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer1 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体1 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
刘大浪2 小时前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
一只爱撸猫的程序猿2 小时前
简单实现一个系统升级过程中的数据平滑迁移的场景实例
数据库·spring boot·程序员
无敌岩雀2 小时前
MySQL中的索引
数据库·mysql
a_安徒生2 小时前
linux安装TDengine
linux·数据库·tdengine