MySQL8从入门到精通\\数据库和数据表的基本操作

数据库

创建数据库

MySQL安装完成之后,将会在其data目录下自动创建几个必需的数据库。用SHOW DATABASES;查看当前存在的数据库。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

其中,MySQL是必需的,它描述用户访问权限。

基本语法

create database database_name;

“database_name”为要创建的数据库的名称,该名称不能与已经存在的数据库重名。
创建数据库以后,用SHOW CREATE DATABASE声明查看数据库的定义。

mysql> create database test_db;
Query OK, 1 row affected (0.02 sec)mysql> show create database test_db;
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                   |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| test_db  | CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

可以看到,如果数据库创建成功,就将显示数据库的创建信息。再次使用“SHOW DATABASES;”语句来查看当前所有存在的数据库,可以看到,数据库列表中包含了刚刚创建的数据库test_db和其他已经存在的数据库的名称。

删除数据库

基本语法

drop database database_name;

其中,“database_name”为要删除的数据库的名称。若指定的数据库不存在,则删除出错。

数据表

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

创建数据表

所谓创建数据表,指的是在已经创建好的数据库中建立新表。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)约束的过程。

基本语法

数据表属于数据库,在创建数据表之前,应该使用语句USE <数据库名>指定操作是在哪个数据库中进行,如果没有选择数据库,就会抛出No database selected的错误。

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

使用CREATE TABLE创建表时,必须指定以下信息:
(1)要创建的表的名称,不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。
(2)数据表中每一列(字段)的名称和数据类型,如果创建多列,就要用逗号隔开。

mysql> create database test_db;
Query OK, 1 row affected (0.01 sec)
mysql> use test_db;
Database changed
mysql> create table tb_emp1-> (-> id int(11),-> name varchar(25),-> deptid int(11),-> salary float-> );

主键约束

主键,又称主码,是表中一列或多列的组合。主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。

单字段主键

主键由一个字段组成,SQL语句格式分为以下两种情况。
(1)在定义列的同时定义主键。

字段名 数据类型 PRIMARY KEY[默认值]

(2)在定义完所有列之后定义主键。

[CONSTRAINT <约束名>] PRIMARY KEY [字段名]

多字段联合主键

PRIMARY KEY [字段1,字段2,...,字段n]

外键约束

外键用来在两个表的数据之间建立连接,可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。
主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。
从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

[CONSTRAINT <外键名>] FOREIGN KEY 字段名 REFERENCES <主表名> 主键列

外键约束(FOREIGN KEY)不能跨引擎使用。MySQL支持多种存储引擎,每一个表都可以指定一个不同的存储引擎,需要注意的是:外键约束是用来保证数据的参照完整性的,如果表之间需要关联外键,却指定了不同的存储引擎,那么这些表之间是不能创建外键约束的。所以说,存储引擎的选择也不完全是随意的。

非空约束

非空约束(Not Null Constraint)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。

字段名 数据类型 NOT NULL

唯一性约束

唯一性约束(Unique Constraint)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。
(1)在定义完列之后使用唯一性约束

字段名 数据类型 UNIQUE

(2)在定义完所有列之后使用唯一性约束

[CONSTRAINT <字段名>] UNIQUE(<字段名>)

默认约束

默认约束(Default Constraint)指定某列的默认值。

字段名 数据类型 DEFAULT 默认值

设置表的属性值自动增加

在数据库应用中,经常希望在每次插入新记录时,系统自动生成字段的主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现。默认的,在MySQL中AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLIN、INT、BIGINT等)。

字段名 数据类型 AUTO_INCREMENT

查看数据表结构

1.查看表基本结构

DESCRIBE/DESC语句可以查看表的字段信息,其中包括字段名、字段数据类型、是否为主键、是否有默认值等。

DESCRIBE 表名;

或简写为

DESC 表名;

其中,各个字段的含义分别解释如下:
(1)NULL:表示该列是否可以存储NULL值。
(2)Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次。
(3)Default:表示该列是否有默认值,有的话指定值是多少。
(4)Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。

2.查看表详细结构

SHOW CREATE TABLE语句可以用来显示创建表时的CREATE TABLE语句。使用SHOW CREATE TABLE语句,不仅可以查看表创建时候的详细语句,还可以查看存储引擎和字符编码。

SHOW CREATE TABLE <表名\G>;

如果不加‘\G’参数,显示的结果可能非常混乱,加上参数‘\G’之后,可使显示结果更加直观,易于查看。

修改数据表

修改表指的是修改数据库中已经存在的数据表的结构。MySQL使用ALTER TABLE语句修改表。常用的修改表的操作有修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等。

1.修改表名

ALTER TABLE <旧表名> RENAME [to] <新表名>

其中,TO为可选参数,使用与否均不影响结果。

2.修改字段数据类型

ALTER TABLE <表名> MODIFY <字段名> <数据类型>

其中,“表名”指要修改数据类型的字段所在表的名称,“字段名”指需要修改的字段,“数据类型”指修改后字段的新数据类型。

3.修改字段名

ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>

其中,“旧字段名”指修改前的字段名;“新字段名”指修改后的字段名;“新数据类型”指修改后的数据类型,如果不需要修改字段的数据类型,将新数据类型设置成与原来一样即可,但数据类型不能为空。
CHANGE也可以只修改数据类型,实现和MODIFY同样的效果,方法是将SQL语句中的“新字段名”和“旧字段名”设置为相同的名称,只改变“数据类型”。由于不同类型的数据在机器中存储的方式及长度并不相同,修改数据类型可能会影响到数据表中已有的数据记录,因此当数据库表中已经有数据时,不要轻易修改数据类型。

4.添加字段

一个完整字段包括字段名、数据类型、完整性约束。

ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] [FIRST|AFTER 已存在字段名]

FIRST为可选参数,其作用是将新添加的字段设置为表的第一个字段;AFTER为可选参数,其作用是将新添加的字段添加到指定的“已存在字段名”的后面。如果SQL语句中没有这两个参数,则默认将新添加的字段设置为数据表的最后列。

5.删除字段

ALTER TABLE <表名> DROP <字段名>;

6.修改字段的排列顺序

ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;

7.修改表的储存引擎

可以使用SHOW ENGINES;语句查看系统支持的存储引擎。

ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;

8.删除表的外键约束名

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

删除数据表

1.删除没有被关联的表

DROP TABLE [IF EXISTS]1,2,3...;

如果要删除的数据表不存在,则MySQL会提示一条错误信息。参数IF EXISTS用于在删除前判断删除的表是否存在,加上该参数后,再删除表的时候,如果表不存在,SQL语句可以顺利执行,但是会发出警告(warning)。

2.删除被其他表关联的主表

在数据表之间存在外键关联的情况下,如果直接删除父表,结果会显示失败,原因是直接删除将破坏表的参照完整性。如果必须要删除,可以先删除与它关联的子表,再删除父表,只是这样就同时删除了两个表中的数据。有的情况下可能要保留子表,这时若要单独删除父表,只需将关联的表的外键约束条件取消,然后就可以删除父表了。

以两个互相关联的表为例。

mysql> create table tb_dept2-> (-> id INT(11) PRIMARY KEY,-> name VARCHAR(22),-> location VARCHAR(50)-> );
Query OK, 0 rows affected, 1 warning (0.09 sec)
mysql> create table tb_emp-> (-> id INT(11) PRIMARY KEY,-> name VARCHAR(25),-> deptId INT(11),-> salary FLOAT,-> CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept2(id)-> );
Query OK, 0 rows affected, 2 warnings (0.05 sec)

首先,解除关联子表tb_emp的外键约束。

mysql> alter table tb_emp DROP FOREIGN KEY fk_emp_dept;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

取消表tb_emp和表tb_dept2之间的关联关系,此时,可以输入删除语句,将原来的父表tb_dept2删除。

mysql> drop table tb_dept2;
Query OK, 0 rows affected (0.03 sec)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部