CREATE DATABASE 数据库名CREATE DATABASE 数据库名 CHARACTER SET 字符集CREATE DATABASE IF NOT EXISTS 数据库名 CHARACTER SET 字符集例:
sqlCREATE DATABASE IF NOT EXISTS test1 CHARACTER SET 'utf8'在使用数据库前,一定要先说明使用的哪个表——USE 数据库名
SHOW DATABASES
SELEXT DATABASE()
SHOW TABLES FROM 数据库名
直接写SHOW TABLES,查看的是当前使用数据库下的表
SHOW CREATE DATABASE 数据库名
一般最好不要修改数据库
ALTER DATABASE 数据库名 CHARACTER SET 字符集
DROP DATABASE IF EXISTS 数据库名
创建表的时候要有创建表的权限
自己创建一个新表 语法格式:
sqlCREATE TABLE IF NOT EXISTS 表名(
字段1 数据类型 约束条件 默认值,
字段2 数据类型 约束条件 默认值,
……
表约束条件
);对于上面的语法,其中
例:
sqlCREATE TABLE IF NOT EXISTS mytable(
id INT,
sname VARCHAR(10),
birthday DATE
);
#显示表的结构
DESC mytable;
如果创建表时没有指定使用的字符集,则默认使用表所在的数据库的字符集
利用已经存在的表进行创建表,同时会导入数据 语法形式:
sqlCREATE TABLE 表名
AS
查询结果例:
sqlCREATE TABLE IF NOT EXISTS mytable
AS
SELECT sno "学号",sname "姓名"
FROM student
WHERE sex='男';
#查看表中的内容
SELECT * FROM mytable;
我们发现查询语句中字段的别名,可以作为新创建表的字段的名。
当我们创建的表的数据来自其他数据库中,那么我们在root权限下,指明是哪个数据库的表就可以。

DESCRIBE/DESC 表名可以查看表的结构SHOW CREATE TABLE 表名可以查看表更详细的信息用关键字ALTER进行实现
语法形式:
ALTER TABLE 表名 ADD [COLUMN] 字段名 字段类型 [FIRST/AFTER 字段名]
COLUMN可加可不加
例:
sqlALTER TABLE mytable
ADD number VARCHAR(11);
#显示表结构
DESC mytable;
默认是加到最后的。
FIRST 字段名sqlALTER TABLE mytable
ADD sex VARCHAR(5) FIRST;
#显示表结构
DESC mytable;
AFTER 字段名sqlALTER TABLE mytable
ADD age INT AFTER 姓名;
#显示表结构
DESC mytable;
可以修改字段的数据类型,长度,默认值和位置 对于数据类型不要修改,把一种类型改变为另一个类型会出现各种不好的情况
语法形式:
ALTER TABLE 表名 MODIFY [COLUMN] 字段名1 字段类型 [DEFAULT 默认值] [FIRST|AFTRE 字段名2]
sqlALTER TABLE mytable
MODIFY sex VARCHAR(10)
AFTER age;
#显示表结构
DESC mytable;上面的操作不仅更改了字段类型的长度,而且也调整了它的位置。
语法格式:
ALTER TABLE 表名 CHANGE [COLUMN] 列名 新的列名 新数据类型
例:
sqlALTER TABLE mytable
CHANGE 学号 sno VARCHAR(20);
#显示表结构
DESC mytable;
语法形式:
ALTER TABLE 表名 DROP [COLUMN] 字段名
COLUMN可加可不加
例:
sqlALTER TABLE mytable
DROP number;推荐下面的方式1
RENAME语法形式:
sqlRENAME TABLE 旧表名
TO 新表名;语法形式:
sqlALTER TABLE 旧表名
RENAME [TO] 新表名
#TO可以省略删除表会把表中的数据和内容全部删掉。
语法形式:
DROP TABLE [IF EXISTS] 表1,表2……
清空表只是把表中的数据删除掉了,表的结构还在。 语法形式:
TRUNCATE TABLE 表名DELETE FROM 表名 sql#清空前
SELECT * FROM mytable;
#清空
TRUNCATE TABLE mytable;
#清空后
SELECT * FROM mytable;
DESC mytable;
sql#查看表中数据
SELECT * FROM mytest
#清空表
DELETE FROM mytest
#清空之后在查看
SELECT * FROM mytest

TRUNCATE TABLE:一旦执行此操作,表中数据是不能被回滚恢复的DELETE FROM:执行此操作,表中的数据虽然也已经被删除,但是在删除之前执行SET autocommit=FALSE,然后再进行回滚是可以恢复的。
下面介绍一下COMMIT和ROLLBACK
COMMIT:提交数据。一旦执行,数据永久保存在数据库中ROLLBACK:回滚数据。一旦执行,数据回滚到最近一次COMMIT关于DDL和DML
COMMIT操作,所以就算之前执行SET autocommit=FALSE也是没有用的。SET autocommit=FALSE是可以回滚数据的,但是,如果没有写,数据也是不能回滚的。例:
TRUNCATEsqlCOMMIT
SELECT * FROM mytest
SET autocommit=FALSE
TRUNCATE TABLE mytest
ROLLBACK
SELECT * FROM mytest
删除并且进行回滚,查看表数据:结果是不能把数据回滚出来

DELETE FROMsqlCOMMIT
SELECT * FROM mytest
SET autocommit=FALSE
DELETE FROM mytest
ROLLBACK
SELECT * FROM mytest
删除并且进行回滚,查看表数据:结果是可以把数据回滚出来

在MySQL8.0中,InnoDB表的DDL支持事务完整性——即DDL操作要么成功要么失败后回滚
分别在5.7版本和8版本上执行该操作。
sqlCREATE DATABASE IF NOT EXISTS test CHARACTER SET utf8;
USE test;
CREATE TABLE mytable1(
id INT,
myname VARCHAR(20)
);
SHOW TABLES;
DROP TABLE mytable1,mytable2;
SHOW TABLES;5.7的结果 删除前,查看

删除后,查看

8.0的结果 删除前,查看

删除后,查看

对于5.7来说,虽然删除失败,但是还是把存在的表删除了。 对于8.0来说,虽然执行删除失败了,但是它是原子化的,所以把之前删除的表的信息回滚了。那么表也就没有被删除。