目录
1.3MySQL8.0的新特性——系统表全部为InnoDB表
2.2.2查看表详细结构语句SHOW CREATE TABLE
一、数据库的基本操作
1.1创建数据库
MySQL中创建数据库的基本SQL语法格式为:
CREATE DATABASE database_name;
"database_name"为要创建的数据库的名称,该名称不能与已经存在的数据库重名。
数据库创建好之后,可以使用SHOW CREATE DATABASE声明查看数据库的定义。例如,要查看创建好的数据库test_db的定义。可以输入如下语句:
SHOW CREATE DATABASE test_db\G
数据库创建成功就会显示数据库的创建信息。
使用SHOW DATABASES语句可以查看当前所有存在的数据库。
1.2删除数据库
删除数据库是将已经存在的数据库从磁盘空间上清除,清除之后,数据库中的所有数据也将一同被删除。删除数据库语句与创建数据库的命令相似,MySQL中删除数据库的基本语法格式为:
DROP DATABASE database_name;
其中,“databanse_name”为要删除的数据库的名称。若指定的数据库不存在,则删除出错。
1.3MySQL8.0的新特性——系统表全部为InnoDB表
从MySQL8.0开始,系统表全部换成事务型的InnoDB表,默认的MySQL实例不包含任何MyISAM表,除非手动创建MyISAM表。
在MySQL8.0版本中输入以下代码可以查看系统表类型:
SELECT DISTINCT(ENGINE) FROM information_schema.tables;
二、数据表的基本操作
2.1创建数据表
在创建完数据库之后,接下来的工作就是创建数据表。所谓创建数据表,指的是在已经创建好的数据库中建立新表,创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程。
2.1.1创建表的语法形式
数据表属于数据库,在创建数据表之前,应该使用语句“USE <数据库名>”指定操作的是在哪个数据库中进行,如果没有选择数据库,就会抛出“No database selected”的错误。
创建数据表的语句为CREATE TABLE,语法规则如下:
CREATE TABLE <表名>
(
字段名1,数据类型 [列级别约束条件] [默认值],
字段名2,数据类型 [列级别约束条件] [默认值],
......
[表级别约束条件]
);
使用CREATE TABLE创建表时,必须指定以下信息:
(1)要创建的表的名称,不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。
(2)数据表中的每一列(字段)的名称和数据类型,如果创建多列,就要用都好隔开。
2.1.2使用主键约束
主键,又称为主码,是表中一列或多列的组合。主键约束要求主键列的数据唯一,并且不允许为空。主键能够唯一地识别表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键与记录之间时一一对应的。
主键可以分为两种类型:单字段主键和多字段联合主键。
1.单字段主键
(1)在定义列的同时指定主键,语法规则如下:
字段名 数据类型 PRIMARY KEY [默认值]
(2)在定义完所有列之后指定主键。
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
2.多字段联合主键
主键由多个字段联合组成,语法规则如下:
PRIMARY KEY [字段1,字段2,...,字段n]
2.1.3使用外键约束
外键用来在两个表的数据之间建立连接,可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以是空值,若不为空值,则每一个外键值必须等于另一个表主键的某个值。
主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。
从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。
创建外键的语法规则如下:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [,字段名2,...] REFERENCES <主表名> 主键列1 [,主键列2,...]
“外键名”为定义的外键约束的名称,一个表中不能有相同名称的外键;“字段名”表示子表需要添加外键约束的字段列;“主表名”即被子表外键所以来的表的名称;“主键列”表示主表中定义的主键列,或者列组合。
子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配。
2.1.4使用非空约束
非空约束指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。
非空约束的语法规则如下:
字段名 数据类型 not null
2.1.5使用唯一性约束
唯一性要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或几列不出现重复值。
唯一性约束的语法规则如下:
(1)在定义完列之后直接指定唯一约束,语法规则如下:
字段名 数据类型 UNIQUE
(2)在定义完所有的列之后指定唯一约束,语法规则如下:
[CONSTRAINT <约束名>] UNIQUE(<字段名>)
UNIQUE和PRIMARY KEY的区别:一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARY KEY声明;声明为PRIMARY KEY的列不允许有空值,但是声明为UNIQUE的字段允许空值(NULL)的存在。
2.1.6使用默认约束
默认约束指定某列的默认值。如男性同学较多,性别就可以默认为“男”。如果插入一条新记录时没有为这个字段赋值,那么系统会自动为这个字段赋值为“男”。
默认约束的语法规则如下:
字段名 数据类型 DEFAULT 默认值
2.1.7设置表的属性值自动增加
在数据库应用中,经常希望在每次插入新纪录时,系统会自动生成字段的主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现。
设置表的属性值自动增加的语法规则如下:
字段名 数据类型 AUTO_INCREMENT
2.2查看表的数据结构
在MySQL中,查看表的数据结构可以使用DESCRIBE和SHOW CREAT TABLE语句。
2.2.1查看表基本结构语句DESCRIBE
DESCRIBE/DESC语句可以查看表的字段信息,其中包括字段名、字段数据类型、是否为主键、是否有默认值等。语法规则如下:
DESCRIBE 表名;
或者简写为:
DESC 表名;
其中,各个字段的含义解释如下:
1.NULL:表示该列是都可以存储NULL值。
2.Key:表示该列是否已编制索引。PRI表示该列时表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次。
3.Default:表示该列是否有默认值,有的话指定值是多少。
4.Extra:表示可以获取的给定列有关的附加信息,例如 AUTO_INCREMENT等。
2.2.2查看表详细结构语句SHOW CREATE TABLE
SHOW CREATE TABLE语句可以用来显示创建表时的CREATE TABLE语句,语法格式如下:
SHOW CREATE TABLE <表名\G>;
使用SHOW CREATE TABLE语句,不仅可以查看表创建时候的详细语句,还可以查看存储引擎和字符编码。
如果不加'\G'参数,显示的结果可能非常混乱,加上参数'\G'之后,可使显示结果更加直观,易于查看。
2.3修改表数据
MySQL使用ALTER TABLE语句修改表。
2.3.1修改表名
MySQL是通过ALTER TABLE语句来实现表名的修改的,具体的语法规则如下:
ALTER TABLE <旧表名> RENAME [TO] <新表名>;
其中,TO为可选参数,使用与否均不影响结果。
修改表名并不影响表的结构。
2.3.2修改字段的数据类型
修改字段的数据类型,就是把字段的数据类型转换成另一种数据类型。在MySQL中修改字段的数据类型的语法规则如下:
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
其中,“表名”指要修改的数据类型的字段所在表的名称,“字段名”指需要修改的字段,“数据类型”指修改后的新数据类型。
2.3.3修改字段名
MySQL中修改字段名的语法规则如下:
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
其中,“旧字段名”指修改前的字段名;“新字段名”指修改后的字段名;“新数据类型”指修改后的数据类型,如果不需要修改字段的数据类型,将新数据类型设置成与原来一样即可,但数据类型不能为空。
CHANGE也可以只修改数据类型,实现和MODIFY同样的效果,方法是将SQL语句中的“新字段名”和“旧字段名”设置成相同的名称,只改变“数据类型”。
2.3.4添加字段
添加字段的语法格式如下:
ALTER TABLE ADD <新字段名> <数据类型> [约束条件] [FIRST | AFTER 已存在字段名];
新字段名为需要添加的字段的名称;“FIRST”为可选参数,其作用是将新添加的字段设置为表的第一个字段;“AFTER”为可选参数,其作用是将新添加的字段添加到指定的“已存在字段名”后面。
如果SQL语句中没有FIRST和AFTER这两个参数,则默认将新添加的字段设置为数据表的最后一列。
2.3.5删除字段
删除字段是将数据表中的某个字段从表中移除,语法格式如下:
ALTER TABLE <表名> DROP <字段名>;
2.3.6修改字段的排列位置
对于一个数据表来说,在创建的时候,字段在表中的排序就已经确定了,但表的结构并不是完全不可以改变的,可以通过ALTER TABLE来改变表中字段的相对位置,语法格式如下:
ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;
其中,“字段1”指要修改位置的字段,“数据类型”指“字段1”的数据类型;“FIRST”为可选参数,指将“字段1"修改为表的第一个字段;“AFTER 字段2”指将“字段1”插入到“字段2”后面。
2.3.7更改表的存储引擎
MySQL中主要的存储引擎有MyISAM、InnoDB、MEMORY(HEAP)、BDB、FEDERATED等。可以使用"SHOW ENGINE;"语句查看系统支持的存储引擎。
更改表的存储引擎的语法格式如下:
ALTER TABEL <表名> ENGINE=<更改后的存储引擎>;
2.3.8删除表的外键约束
对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表与从表间的关联关系,MySQL中删除外键的语法格式如下:
ALTER TABEL <表名> DROP FOREIGN KEY <外键约束名>
”外键约束名"指在定义表时CONSTRAINT关键字后面的参数。
2.4删除关系表
2.4.1删除没有被关联的表
在MySQL中,使用DROP TABEL可以一次删除一个或多个没有被其他表关联的数据表。语法格式如下:
DROP TABLE [IF EXISTS]表1,表2,...,表n;
如果要删除的表不存在,会发出一条错误信息。
参数"IF EXISTS"用于在删除前判断删除的表是否存在,加上该参数后,再删除表,如果表不存在,SQL语句可以顺利执行,但是会发出警告。
2.4.2删除被其他表关联的主表
在数据表之间存在外键关联的情况下,如果直接删除父表,结果会显示失败,原因是直接删除将破坏表的参照完整性。如果必须要删除,可以先删除与它关联的子表,再删除父表,只是这样就同时删除了两个表中的数据。有的情况下可能要保留子表,这时若要单独删除父表,只需将关联的表的外键约束条件取消,然后就可以删除父表了。