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从入门到精通-清华大学出版社

相关推荐
Azoner5 分钟前
postgresql安装部署(linux)
数据库·postgresql
PyAIGCMaster30 分钟前
文本模式下成功。ubuntu P104成功。
服务器·数据库·ubuntu
drebander42 分钟前
MySQL 查询优化案例分享
数据库·mysql
初晴~1 小时前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
盖世英雄酱581361 小时前
InnoDB 的页分裂和页合并
数据库·后端
YashanDB3 小时前
【YashanDB知识库】XMLAGG方法的兼容
数据库·yashandb·崖山数据库
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍11基于XML的SQL注入(XML-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw·xml注入
小林coding3 小时前
阿里云 Java 后端一面,什么难度?
java·后端·mysql·spring·阿里云
风间琉璃""4 小时前
bugkctf 渗透测试1超详细版
数据库·web安全·网络安全·渗透测试·内网·安全工具
drebander4 小时前
SQL 实战-巧用 CASE WHEN 实现条件分组与统计
大数据·数据库·sql