?
目录
创建数据库
查看数据库
?查看数据库的创建信息(两种)
数据库编码
删除数据库:
关于MSQL的链接
具体讲解:
创建数据表
创建空数据表
多列联合主键
创建数据表时指定外键
1.创建数据表时指定字段非空
2.创建数据表时指定默认值
3.创建数据表时指定主键默认递增
4.创建数据表时指定存储引擎
关于常见引擎:
InnoDB存储引擎(推荐)MyISAM存储引擎? ?MEMORY存储引擎
查看数据表结构
使用DESCRIBE/DESC语句查看表结构
使用SHOW CREATE TABLE语句查看表结构
修改数据表
添加字段
添加字段时指定位置
修改字段名称
修改字段的数据类型
修改字段的位置
删除字段
修改已有表的存储引擎
取消数据表的外键约束
删除数据表
删除没有关联关系的数据表
删除有外键约束的主表
1.创建数据库
????????( ?****_name 代表对应的是什么名字,下面语法格式用到不再解释)
(1).在MySQL命令行中查看当前MySQL中存在的数据库
SHOW DATABASES;
(2).在MySQL命令行中使用CREATE DATABASE database_name语句创建名称为goods的商品数据库。
CREATE DATABASE goods;
(3).再次查看数据库,可以看到,此时MySQL中多了名称为goods的数据库。
(4).也可以是用 CREATE DATABASE IF NOT EXISTS database_name语句创建数据库。
可以尝试再次用(2)语句创建 goods(会报错) ,同时在用(4)语句创建来对比(存在则忽略,不存在就创建,不报错),
在实际工作中,建议使用CREATE DATABASE IF NOT EXISTS database_name语句创建数据库。
对应4张图我也放出来



查看数据库
?1,查看MySQL中存在的数据库:( 显示所有库)
????????SHOW DATABASES; ? 2,查看MySQL命令行所在的数据库? (?显示当前库)
????????SELECT DATABASE(); 3,更改到其他库(到MySQL为例) ?
????????USE mysql; ? ? ??
?查看数据库的创建信息(两种)
示例如下图:
一,SHOW CREATE DATABASE database_name; 二,SHOW CREATE DATABASE database_name \G?? ? ?*在实际工作中,第二种语法格式比较常用,

使用CREATE DATABASE IF NOT EXISTS database_name语句创建数据库时将不再报错。CREATE DATABASE IF NOT EXISTS database_name的语句的含义为:如果MySQL中不存在相关的数据库,则创建数据库;如果MySQL中已经存在相关的数据库,则忽略创建语句,不再创建数据库。
数据库编码
在创建数据库时如果没有为数据库指定字符编码,MySQL会为数据库指定一个默认的字符编码 默认的字符编码在MySQL的配置文件my.cnf中进行配置
1.创建数据库时指定字符编码 语法格式:
CREATE DATABASE [IF NOT EXISTS] database_name DEFAULT CHARACTER SET character_name COLLATE collate_name
[DEFAULT ENCRYPTION='N'];
示例在MySQL命令行创建名称为test_character的数据库,并指定数据库的字符编码为UTF-8 ,校验规则为utf8_unicode_ci,不使用MySQL的加密技术。
mysql> CREATE DATABASE IF NOT EXISTS test_character DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
DEFAULT ENCRYPTION='N';
Query OK, 1 row affected, 2 warnings (0.09 sec)
2.修改数据库的字符编码 语法格式
ALTER DATABASE database_name CHARACTER SET character_name collate collate_name;
示例将名称为test_character的数据库的字符编码修改为utf8mb4, ?? ?检验规则修改为utf8mb4_0900_ai_ci。
mysql> ALTER DATABASE test_character CHARACTER SET utf8mb4 collate utf8mb4_0900_ai_ci; ? ?
??删除数据库:
DROP DATABASE database_name;
DROP DATABASE IF EXISTS database_name;
?在实际工作中推荐用第二种,与上面建表描述一样不在赘述
关于MSQL的链接
本机链接:mysql -hlocalhost -P3306 -uroot -proot?
?我是没有设置密码,登录如下图

具体讲解:
(1.)最前面的mysql你可以理解成一个关键字或者理解成一个固定的命令,是固定写法,类似于java、jdk中的javac命令或java命令
(2.)-h表示host,即主机的ip地址
(3.)-P表示port,端口,mysql数据库的默认端口是3306,如果自己改了一定写为改后的(注意:这是大写的字母P)
(4.)-u表示user用户名
(5.)-p表示password密码(注意:这是小写的字母p)
下面说说mysql这个命令的注意事项:
大写的P表示端口号,小写的p表示密码,大家记住了
大家要记住,小写的p表示密码,-p和密码之间一定不能有空格,其他的像-u,-h,-P之类的,是可以有空格的,也可以没有空格
注意:如果是本机的话,主机ip和端口号可以不写(即主机ip和端口号可以省略),直接写成mysql -u root -proot
如果是本机,但是端口号你改成了其他的端口号,不是默认的3306了,比如你把端口号改成了6688,那你就加上端口号,即mysql -P 6688 -u root -proot
以下这3种语法都是正确的,我依次举例和截图演示
我这里用的用户名是root,密码也是root
关于登录:本机登录时,IP地址可省略不写,如果端口号是3306可以不写 ? ? ? ? ? ? ? ? ?最终可写为:mysql -uroot -proot 当写 ?mysql -uroot -p ? 回车后输入密码,显示成 ?****
可以保护密码安全

远程连接:一定加上ip地址,如果端口是默认的可不加, ? ? ? ? ? ? ? ?mysql -h 192.168.117.66 -u root -proot
创建数据表
创建空数据表
示例: 商品类别表结构
mysql> CREATE TABLE t_goods_category1(
-> id INT PRIMARY KEY,
-> t_category VARCHAR(30),
-> t_remark VARCHAR(100)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE IF NOT EXISTS t_goods_category1 (
-> id INT PRIMARY KEY,
-> t_category VARCHAR(30),
-> t_remark VARCHAR(100)
-> );
Query OK, 0 rows affected (0.00 sec)
当表存在时,用第一中方式建表会抛出:
ERROR 1050 (42S01): Table 't_goods_category1' already exists
加上IF NOT EXISTS关键字后,即使数据库中已经存在要创建的数据表,MySQL也不会抛出任何错误了。
在创建数据表时,如果加上了IF NOT EXISTS关键字,则表示的含义为:如果当前数据库中不存在要创建的数据表,则创建数据表;如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。
在MySQL 8.x版本中,不再推荐为INT类型指定显示长度,并在未来的版本中可能去掉这样的语法。因此这里去掉INT类型的显示长度? ?如果为INT类型指定显示长度会有一个警告信息,
?
多列联合主键
语法格式:
PRIMARY KEY [字段1, 字段2, 字段3…., 字段n]
示例: 商家店铺商品类别数据表结构
mysql> CREATE TABLE t_goods_category4 (
-> t_category_id INT,
-> t_shop_id INT,
-> t_category VARCHAR(30),
-> t_remark VARCHAR(100),
-> PRIMARY KEY (t_category_id, t_shop_id)
-> );
Query OK, 0 rows affected (0.02 sec)
当我看到多个主键时,反问不是“主键唯一索引” 于是乎又有了新的解释:
当表中只有一个主键时,它是唯一的索引;当表中有多个主键时,称为联合主键,联合主键联合保证唯一索引”。
1、数据库的每张表只能有一个主键,不可能有多个主键。? 2、所谓的一张表多个主键,我们称之为联合主键。? 注:联合主键:就是用多个字段一起作为一张表的主键。? 3、主键的主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。
创建数据表时指定外键
语法格式:
[CONSTRAINT 外键名] FOREIGN KEY 字段1 [, 字段2, 字段3, …] REFERENCES 主表名 主键列1 [, 主键列2, 主键列3, …]
·外键名:定义外键时为数据表指定的外键名称。在同一张数据表中,外键的名称必须唯一。也就是说,在同一张数据表中,不能有相同名称的外键名称。
·FOREIGN KEY:指定外键包含哪些字段,可以是一个字段,也可以是多个字段的组合。
·REFERENCES:指定关联的主表名称。
·主表名:主键所在的表名称。
·主键列:主表中定义的主键字段,可以是一个字段,也可以是多个字段的组合。
由外键引申出两个概念,分别是主表(父表)和从表(子表)。
·主表(父表):两个表具有关联关系时,关联字段中主键所在的表为主表(父表)。
·从表(子表):两个表具有关联关系时,关联字段中外键所在的表为从表(子表)。
1.创建数据表时指定字段非空
字段名称 数据类型 NOT NULL
2.创建数据表时指定默认值
字段名称 数据类型 DEFAULT 默认值
3.创建数据表时指定主键默认递增
字段名称 数据类型 AUTO_INCREMENT
4.创建数据表时指定存储引擎
ENGINE=存储引擎名称
关于常见引擎:
InnoDB存储引擎(推荐)MyISAM存储引擎? ?MEMORY存储引擎
存储引擎的选择
在实际工作中,选择一个合适的存储引擎是一个比较复杂的问题。每种存储引擎都有自己的优缺点,不能笼统地说谁比谁好。但建议选择使用InnoDB

InnoDB: 支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM: 插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。
MEMORY: 所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。
注意:同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。
查看数据表结构
使用DESCRIBE/DESC语句查看表结构
使用DESCRIBE语句查看表结构的语法格式如下:
????????DESCRIBE 表名称
使用DESC语句查看表结构的语法格式如下:
????????DESC 表名称
查出表以后关于其中,每个字段的含义如下:
·Field:数据表中的每个字段。
·Type:数据表中字段的数据类型。
·Null:数据表中的当前字段值是否可以为NULL。
·Key:数据表中的当前字段是否存在索引。PRI表示当前列是主键列,或者是主键的一部分;UNI表示当前列是UNIQUE标识的唯一索引列,或者是唯一索引列的一部分;MUL表示在当前列中的某个值可以出现多次。
·Default:表示当前列是否有默认值,同时会显示当前列的默认值是多少。
·Extra:表示与当前列相关的附件信息。
使用SHOW CREATE TABLE语句查看表结构
SHOW CREATE TABLE 表名 \G
SHOW CREATE TABLE 表名 \G
不仅能够查看数据表的详细建表语句,还能查看数据表的存储引擎和字符编码等信息。
修改数据表
ALTER TABLE 原表名 RENAME [TO] 新表名
其中 [TO] 可省略
添加字段
ALTER TABLE 表名 ADD COLUMN 新字段名 数据类型 [NOT NULL DEFAULT 默认值]
添加字段时指定位置
添加字段时指定要添加字段的位置包括:在表的第一列添加字段和在指定字段的后面添加字段。
1.在表的第一列添加字段:
ALTER TABLE 表名 ADD COLUMN 新字段名 数据类型 [NOT NULL DEFAULT 默认值] FIRST
2.在指定字段的后面添加字段:
ALTER TABLE 表名 ADD COLUMN 新字段名 数据类型 [NOT NULL DEFAULT 默认值] AFTER 原有字段名
修改字段名称
这就使我们能够根据实际需要将数据库的字段名称修改为更有意义的名称
ALTER TABLE 表名 CHANGE 原有字段名 新字段名 新数据类型
在修改数据表字段名称时可以不修改数据类型,
此时可以将新字段的数据类型设置成与原有字段的数据类型一样即可,
但是新字段名称的数据类型不能为空。
修改字段的数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 [DEFAULT 默认值]
使用MODIFY关键字指定字段的新数据类型即可
修改字段的位置
1.将字段的位置修改为数据库的第一个字段
ALTER TABLE 表名 MIDIFY 字段名 数据类型 FIRST
使用FIRST关键字标识将当前字段修改为数据表的第一个字段。
2.将当前字段的位置修改到某个字段的后面
ALTER TABLE 表名 MODIFY 字段1名称 字段1的数据类型 AFTER 字段2名称
将字段1移动到字段2的后面。
删除字段
ALTER TABLE 表名 DROP 字段名
修改已有表的存储引擎
ALTER TABLE 表名 ENGINE=存储引擎名称
“ENGINE”关键字指定数据表的存储引擎。
取消数据表的外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名
使用DROP FOREIGN KEY关键字删除表中的外键。
删除数据表
删除数据表时有两种情况:删除与其他表没有关联关系的数据表,以及删除有外键约束的主表
删除没有关联关系的数据表
DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n]
IF EXISTS的含义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作,前面介绍过
删除有外键约束的主表
有两种方式删除有外键约束的主表,一种方式是先删除有外键约束的从表,再删除主表;另一种方式为先解除外键约束,再删除主表
先简单介绍如何解除外键约束,然后再删除主表(去看:?取消数据表的外键约束)
先取消外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名
在删除主表
mysql> DROP TABLE 主表;
|