MySQL8系列---数据库与表的创建、删除与修改

                                                   --基于《MYSQL8从入门到精通》

系列文章目录

第一章 MySQL 8.0的安装与配置


一.数据库的基本操作

内容提要

在这里插入图片描述

1.创建数据库

创建数据库是在系统磁盘上划分一块区域用于数据库的储存和管理。要创建一个数据库,我们应该先查看系统上都有哪些数据库,使用SHOW databases 语句来查看。在这里插入图片描述
图上的数据库都是安装MySQL时系统自带的库,如果我们要创建一个属于自己的数据库,需要使用
CREATE DATABASE database_name;语句,其中database_name是值我们要创建数据库的名称,注意不能与已经存在的数据库重名。
在这里插入图片描述
在这里插入图片描述

2.删除数据库

删除数据库使用DROP DATABASE database_name;语句,执行该命令时要非常注意,因为MySQL不会给出任何提醒确认信息,且数据库中的数据表及数据不可恢复。在这里插入图片描述

3.选择数据库

选择数据库使用 USE关键字,如USE world;如图:在这里插入图片描述

4.显示创建数据库语句

使用SHOW CREATE DATABASE database_name;来查看定义数据库的信息
如图:在这里插入图片描述

二、数据表的基本操作

在数据库中,数据表是最基本的操作对象,数据表是列的集合,每一列代表记录中的一个域,每一行代表唯一的记录

1.创建数据表

内容提要

在这里插入图片描述

数据表的创建时指再已经创建好的数据库中建立新表。创建数据表的过程是规定数据列属性的过程,同时也是实施数据完整性约束的过程,以下介绍创建数据表的语法形式及添加主键约束、外键约束、非空约束等

1.1创建表的语法形式

创建数据表的语法如下:

CREATE TABLE table_name
(1,数据类型 [列级别约束条件] [默认值] ,
列2,数据类型 [列级别约束条件] [默认值] ,
……
[表级别约束条件]
);

值得注意的是:

(1)在创建数据表前,要使用USE database_name语句来确认是在哪一个数据库中建立新表
(2)在创建数据表时必须指定以下信息:
【1】在创建表的名称时是不区分大小写的(或者说在无显示指示的情况下,MySQL是不区分大小写的),但是不能使用SQL语言中的关键字,如:DROP、ALTER等
【2】数据表中的每一列的名称和数据类型,如果创建多列要使用逗号隔开。
接下来我们在xuexi数据库中创建如下的数据表id_salary:

列名称数据类型备注
idINT(11)员工编号
nameVARCHAR(25)员工名称
deptIDINT(11)所在部门编号
salaryFLOAT工资

创建上表的语句如下:
在这里插入图片描述

1.2 使用主键约束

主键表中一列或多列的结合。主键约束要求主键列的数据唯一并且不能为空。主键能够唯一的标识表中的一行,可以结合外键来定义不同表之间的关系,并且可以加快数据库查询的速度。主键分为单列主键和多列联合主键

1.单列主键:

方法1:定义列的同时定义主键
在定义列的时候后面加上PRIMARY KEY关键字
如下:

CREATE TABLE id_salary1
(
id  INT(11) PRIMARY KEY ,
name VARCHAR(25),
deptID INT(11),
salsry  FLOAT
);

方法2:定义完所有列后指定主键
在最后列后面加上PRIMARY KEY(列名)
如下:

CREATE TABLE id_sqlsry2
(
id  INT(11) ,
name VARCHAR(25),
pedtID  INT(11),
salary  FLOAT,
PRIMARY KEY(id)
);

2.多列联合主键
多字段联合主键的要求是所有列的记录
语法如下:

CREATE TABLE id_salary3
(
id INT(11),
name VARCHAR(25),
pedtID  INT(11),
salary  FLOAT,
PRIMARY KEY(name,deptID)
)

值得注意的是定义多列主键只允许这么一种定义方法,如果在定义列的同时定义多个列为主键,即这样

CREATE TABLE id_sqlsry6
(
id  INT(11) PRIMARY KEY,
name VARCHAR(25) PRIMARY KEY,
pedtID  INT(11),
salary  FLOAT
);

会产生Multiple primary key defined错误!

1.3使用外键约束

外键是用来建立两个表的连接,可以是一列或者多列。一个表可以有一个外键或者多个外键。一个表的外键可以是空值,若不为空值,则每一个外键必须对应另一个表中主键的某个值。定义外键后不允许删除另一个表中具有关联关系的行。
主表:对于两个有关联键的表,相关联字段中主键在哪个表就是主表
从表:对于两个有关联键的表,相关联字段中外键在哪个表就是从表
语法为:
CONSTRAINT 外键名 FOREIGN KEY (列1,列2……) REFERENCES 主表名(主键列1,主键列2)
如图,我要创建如下的数据表department,其中id列与id_salary表中的deptID列相关联

列名称数据类型备注
idINT(11)部门编号
nameVARCHAR(25)部门名称
locationVARCHAR(50)部门位置

使用如下语句:

CREATE TABLE department
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
location VARCHAR(50)
)
CREATE TABLE id_salary
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptID INT(11),
salary FLOAT,
CONSTRAINT dep_id FOREIGN KEY(deptID) REFERENCES department(id)
);

从表的外键数据类型类型必须与关联的主表的主键数据类型相匹配

1.4使用非空约束

再创建列的时候后面加上 not null ,指定该列不能有缺失值,语法如下:

CREATE TABLE id_salary
(
id INT(11) PRIMARY KEY,
name VARCHAR(25) NOT NULL,
deptID INT(11),
salary FLOAT,
CONSTRAINT dep_id FOREIGN KEY(deptID) REFERENCES department(id)
);

1.5使用唯一性约束

唯一性约束要求该列唯一,允许为空,但空值只能出现一次,语法1:

CREATE TABLE id_salary
(
id INT(11) PRIMARY KEY,
name VARCHAR(25) UNIQUE,
deptID INT(11),
salary FLOAT,
CONSTRAINT dep_id FOREIGN KEY(deptID) REFERENCES department(id)
); 

语法2:

CREATE TABLE id_salary
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptID INT(11),
salary FLOAT,
CONSTRAINT STH UNIQUE(name)
);

1.6使用默认值约束

CREATE TABLE department
(
id INT(11) PRIMARY KEY,
name VARCHAR(25) DEFAULT 销售,
location VARCHAR(50)
)

这就为department表的name列设置了一个默认值,在插入数据时如果没有指定部门的名字,那么就会使用销售这个名字。

1.7设置表的自动增量

自动增量的设置是指在每次插入新字段时,系统自动生成字段的主键值,通过设置AUTO_INCREMENT关键字来实现,默认的在MySQL中AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动增加1。一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须是主键的一部分,AUTO_INCREMENT约束的字段可以是任何整数类型。

CREATE TABLE id_salary(
id  INT  PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(25),
pedtID INT,
salary FLOAT);
INSERT INTO id_salary(name,pedtID,salary) VALUES
('小明',1001,3000.14),('小红',1003,5000.15),('小李',1001,-1500);

在这里插入图片描述
如图可以看出,在未插入主键值的情况下由于设置了自动增量,所以id列自动填充好了对应的值。上述的实验过程中有两点值得记录
1.虽然自动增量的设置只能是整数型数据类型的列,那么如何改变默认情况,如初始值不再是1,每次自动增加的量不再是加1而是加3或者其他的呢?参看这篇博客:
2.要记住虽然整数型的数据类型不设置括号里的显示宽度很方便,但是字符型的数据类型要设置的,要不然MySQL会报错。参见这篇博客:

2.查看数据表

内容提要

在这里插入图片描述

1.查看数据表结构

使用DESCRIBE/DESC关键字来查看表的结构。如:

DESCRIBE tablename;

在这里插入图片描述
【注:有时间再这里插入MUL和UNI的实例】

type对应每一列的数据类型
NULL对应每一列是否允许NULL值
key表示该列是否已经编制索引(这里先就认为是他的键类型就可以),PRI表示这列是表主键的一部分,MUL表示在列中某个给定值允许出现多次,UNI表示该列是UNIQUE索引的一部分(即唯一值)
default表示这列是否有默认值,有的话指定的值是多少
extra表示可以获取的与给定列有关的附加信息,比如自动增量等。

2.查看制表语句

SHOW CREATE TABLE tablename;
SHOW CREATE TABLE tablename\G;

使用如上的MySQL语句可以查看详细的制表语句,还可以查看该表的制表引擎和字符编码。

在这里插入图片描述
emmm,虽然没看出书中讲的使用\G后更加详细这点,但可能是我的表太简单的原因,反正记住加上\G准没错就好了。

3.修改数据表

内容提要

在这里插入图片描述

1.修改表名

ATTER TABLE oldtablename rename newtablename;

在这里插入图片描述

2.修改列的数据结构

ALTER TABLE tablename MODIFY 列名 要修改成的数据类型

在这里插入图片描述

3.修改列名

ALTER TABLE 表名 CHANGE 旧列名 新列名 新数据类型

在这里插入图片描述
我们可以看到 CHANGE 关键字不仅可以起到更改表名的作用,同时还能起到更改数据类型的作用,我们要是只想更改这两种中的一种只需要保持不更改的那项与原来保持一致即可。
无论是MODIFY 还是CHANGE 在修改数据类型时都要小心,因为不同的数据类型在机器中存储的方式和长度不同,很可能会影响到以储存的数据

4.添加列

ALTER TABLE tablename ADD 新列名 新列的数据类型 新列的约束条件
【可选参数:FIRST / AFTER 已经存在的列名】

FIRST 为可选参数,使用其会使添加的列作为表的第一列,AFTER 也是可选参数,作用是指明添加的列在哪个列后面,如果没有指定这两个可选参数,新添加的列会作为最后一列出现。
现在向工资表中插入一列新列:年龄。并且指定它插入在名字列的后面。

ALTER TABLE id_salary1 add age int after mingzi;

在这里插入图片描述
我们在插入一列,指定这列的约束条件为不能有重复值,并且让新列在第一列出现:

ALTER TABLE id_salary1 ADD column1 int UNIQUE FIRST;

在这里插入图片描述

5.删除列

ALTER TABLE tablename DROP 列名

在这里插入图片描述

6.修改列的排列位置

ALTER TABLE tablename MODIFY1 数据类型 FIRST /AFTER2

其中列1是要修改顺序的列,可以选择把列1的顺序改为在列2后面

现在我们把id_salary1的age列修改到id列的后面,并改变其数据类型。
在这里插入图片描述

7.修改表的储存引擎

储存引擎是指在MySQL在储存数据时所使用的的相关技术。主流的MySQL引擎有MyISAM、InnoDB、BDB等。可使用语句:

SHOW ENGINES;

在这里插入图片描述
从图中我们可以看到InnoDB是默认的引擎。
我们现在修改id_salary1表的数据引擎为MyISAM,先查看原来的引擎是什么类型。

SHOW CREATE TABLE id_salary1\G;

在这里插入图片描述
id_salary1表的引擎是默认引擎InnoDB,我们现在使用如下语句更改引擎为MyISAM:

ALTER TABLE id_salary1 ENGINE = 引擎名;

在这里插入图片描述
成功将引擎更改为MyISAM。

8.删除表的外键约束

删除外键约束会解除主表和从表之间的关联关系。语法格式如下:

ALTER TABLE tablename DROP FOREIGN KEY 外键约束名;

为了方便说明,先创建如下俩表:

create table department(
id int primary key not null,
name varchar(25),
location varchar(25)
);
create table id_salary(
id int primary key not null,
name varchar(25) not null,
deptID int not null,
salary float,
constraint sal_dep foreign key(deptID) references department(id)
);

这样id_salary表就是相对于department表的从表。
下面删除id_salary表的外键约束

ALTER TABLE id_salary DROP FOREIGN KEY sal_dep;

在这里插入图片描述

4.4删除数据表

内容提要

在这里插入图片描述

1.删除没有被关联的表

DROP TABLE1,表2……

使用该语句可以一次性删除任意个没有被关联的表

2.删除有被关联的表

在数据表存在关联的情况下,如果直接删除主表,那么MySQL会报错。这时有两个处理办法,一是先删除从表再删除主表,二就是先删除从表的外键约束,从而使两个表不再关联,再删除要删除的表。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值