创建数据库:
方式一:创建数据库
CREATE DATABASE 数据库名;(使用的是默认的字符集)
方式二:创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
方式三:判断数据库是否已经存在,不存在则创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
(也可以指定字符集:CREATE DATABASE IF NOT EXISTS 数据库名 CHARACTER SET 字符集)
如果MySQL中已经存在相关的数据库,则忽略创建语句,不再创建此名称的数据库。
管理数据库
查看当前连接中的数据库:
SHOW DATABASES;
切换数据库:
USE 数据库名;
查看当前数据库中保存的数据表:
SHOW TABLES;
查看当前使用的数据库:
SELECT DATABASE( ) FROM DUAL;
查看指定的数据库下保存的表:
SHOW TABLE FROM 数据库名;
修改数据库:
更改数据库字符集:
ALTER DATABASE 数据库名 CHARACTER SET 字符集;
删除数据库:
方式一:删除指定的数据库
DROP DATABASE 数据库名;
方式二:删除指定的数据库(如果存在即删除,不存在即结束操作)
DROP DATABASE IF EXISTS 数据库名;
数据类型:
其中,常见的数据类型介绍如下:
创建数据表:
创建数据表(方式一):
CREATE TABLE IF NOT EXISTS 表名(
字段名 数据类型 [约束条件] [默认值],
字段名 数据类型 [约束条件] [默认值],
……
[表约束条件]
);
注:
[ ]中的内容表示约束,也可以没有。
如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集。
IF NOT EXISTS可以没有,但是建议要有。
查看表结构:
DESC 表名;
查看创建表的语句结构:
SHOW CREATE TABLE 表名;
创建数据表(方式二):基于现有的表
CREATE TABLE 表名
AS
SELECT 字段……
FROM 现有的表的表名
……(查询的操作)
即将查询现有的表的查询结果来创建一个新的表。
注:若AS后面的查询操作中的字段起了别名,则该方法创建的表中的字段名即为相应的字段的别名。
修改表:
修改表使用 ALTER TABLE 表名 ……
添加字段
ALTER TABLE 表名
ADD 新字段名 数据类型 [约束条件];
新字段默认添加到表中的最后一个字段的位置后。
除此之外,还可以添加字段到指定位置:
ALTER TABLE 表名
ADD 新字段名 数据类型 [约束条件] FIRST;
表示添加新字段到首列
ALTER TABLE 表名
ADD 新字段名 数据类型 [约束条件] AFTER 字段名;
表示新字段在指定的字段名的位置后添加
修改一个字段
ALTER TABLE 表名
MODIFY 字段名 数据类型 DEFAULT 默认值;
若要将字段的位置进行修改,可以在末尾加上FIRST/AFTER 字段名
注:数据类型一般不会做大更改,一般是将VARCHAR一类的数据类型的长度做修改
若不涉及更改默认值,DEFAULT的语句可省略。
重命名一个字段
ALTER TABLE 表名
CHANGE 字段名 新字段名 数据类型;
注:可以在重命名时对字段的数据类型做修改。
删除一个字段
ALTER TABLE 表名
DROP COLUMN 字段名;
重命名表:
方式一:
RENAME TABLE 表名
TO 新表名;
方式二:
ALTER TABLE 表名
RENAME TO 新表名;
删除表:
DROP TABLE IF EXTSTS 表名;
清空表:
清空表中的所有数据,表本身还在。
TRUNCATE TABLE 表名;
对比TRUNCATE TABLE 和 DELETE FROM
相同点:都可以实现对表中的所有数据的删除,同时保留表结构。
不同点:
TRUNCATE TABLE:执行此操作,表中数据全部清除。同时,数据不能回滚。属于DDL。
DELETE FROM:表中数据被指定删除,同时数据可以实现回滚。属于DML。
COMMIT 和 ROLLBACK
COMMIT:提交数据。执行COMMIT,数据就被永久的保存在数据库中,意味着数据不可回滚。
ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。
关于DDL和DML的说明:
DDL的操作一旦执行,就不可回滚。执行完后,会自动执行一次COMMIT,不受SET autocommit = false的影响。
DML的操作默认情况下,一旦执行,也是不可回滚的。但是若在执行DML之前,执行了SET autocommit = false的操作,则执行的操作就可以实现回滚。
TRUNCATE TABLE 比 DELETE FROM速度快,且使用的系统和事务日志资源少,但TRUNCATE无事务且不触发TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。