创建和管理数据库

方式一:创建数据库

CREATE DATABASE 数据库名;

方式二:创建数据库并指定字符集

CREATE DATABASE 数据库名 CHARACTER SET 字符集;

方式三:判断数据库是否已经存在,不存在则创建数据库(推荐)

CREATE DATABASE IF NOT EXISTS 数据库名 ;

如果MySQL中已经存在相关的数据库,则忽略创建语句,不再创建数据库。

注意:DATABASE 不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删

旧库完成的。

使用数据库

查看当前所有的数据库

SHOW DATABASES; #有一个S,代表多个数据库

查看当前正在使用的数据库

SELECT DATABASE(); #使用的一个mysql的全局函数

查看指定库下的所有表

SHOW TABLES FROM 数据库名;

查看数据库的创建信息

SHOW CREATE DATABASE 数据库名;

使用/切换数据库

USE 数据库名;

注意:要操作表格和数据之前必须先说明是对哪个数据库进行操作,否则就要对所有对象加上“数

据库名.”。

修改数据库

更改数据库字符集

ALTER DATABASE 数据库名 CHARACTER SET 字符集;

方式一:删除指定的数据库

DROP DATABASE 数据库名;

方式二:删除指定的数据库( 推荐 )

DROP DATABASE IF EXISTS 数据库名;

创建表

创建方式一:

必须具备:

CREATE TABLE权限存储空间

语法格式:

CREATE TABLE [IF NOT EXISTS] 表名(

字段1, 数据类型 [约束条件] [默认值],

字段2, 数据类型 [约束条件] [默认值],

字段3, 数据类型 [约束条件] [默认值],

……

[表约束条件]

);

加上了IF NOT EXISTS关键字,则表示:如果当前数据库中不存在要创建的数据表,则创建数据表;

如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。

必须指定:

表名列名(或字段名),数据类型,长度

可选指定:

约束条件默认值

创建表举例1:

-- 创建表

CREATE TABLE emp (

-- int类型

emp_id INT,

-- 最多保存20个中英文字符

emp_name VARCHAR(20),

-- 总位数不超过15位

salary DOUBLE,

-- 日期类型

birthday DATE

);

创建表举例2:

CREATE TABLE dept(

-- int类型,自增

deptno INT(2) AUTO_INCREMENT,

dname VARCHAR(14),

loc VARCHAR(13),

-- 主键

PRIMARY KEY (deptno)

);

创建方式二:

使用 AS subquery 选项,将创建表和插入数据结合起来

指定的列和子查询中的列要一一对应通过列名和默认值定义列

举例:

CREATE TABLE emp1 AS SELECT * FROM employees;

CREATE TABLE emp2 AS SELECT * FROM employees WHERE 1=2; -- 创建的emp2是空表

CREATE TABLE dept80

AS

SELECT employee_id, last_name, salary*12 ANNSAL, hire_date

FROM employees

WHERE department_id = 80;

查看数据表结构

SHOW CREARE TABLE 表名;

修改表

修改表指的是修改数据库中已经存在的数据表的结构。

使用 ALTER TABLE 语句可以实现:

向已有的表中添加列修改现有表中的列删除现有表中的列重命名现有表中的列

追加一个列

语法格式:

ALTER TABLE 表名

ADD 【COLUMN】 字段名 字段类型 【FIRST|AFTER 字段名】;

举例:

ALTER TABLE dept80

ADD job_id varchar(15);

修改一个列

可以修改列的数据类型,长度、默认值和位置修改字段数据类型、长度、默认值、位置的语法格式如下:

ALTER TABLE 表名 MODIFY 【COLUMN】 字段名1 字段类型 【DEFAULT 默认值】【FIRST|AFTER 字段名2】;

举例;

ALTER TABLE dept80

MODIFY last_name VARCHAR(30); #修改数据类型

ALTER TABLE dept80

MODIFY salary double(9,2) default 1000;#修改数据类型和默认值

重命名一个列

ALTER TABLE 表名

CHANGE 【column】 列名 新列名 新数据类型;

举例:

ALTER TABLE dept80

CHANGE department_name dept_name varchar(15);

删除一个列

删除表中某个字段的语法格式如下:

ALTER TABLE 表名

DROP 【COLUMN】字段名

举例:

ALTER TABLE dept80

DROP COLUMN job_id;

重命名表

方式一:使用RENAME

RENAME TABLE emp

TO myemp;

方式二:

ALTER table dept

RENAME [TO] detail_dept; -- [TO]可以省略

删除表

在MySQL中,当一张数据表 没有与其他任何数据表形成关联关系 时,可以将当前数据表直接删除。数据和结构都被删除所有正在运行的相关事务被提交所有相关索引被删除语法格式:

DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];

IF EXISTS 的含义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存

在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。

举例:

DROP TABLE dept80;

DROP TABLE 语句不能回滚!

清空表

TRUNCATE TABLE语句:

删除表中所有的数据释放表的存储空间

举例

TRUNCATE TABLE detail_dept;

TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚!

对比

SET autocommit = FALSE;

DELETE FROM emp2;

#TRUNCATE TABLE emp2;

SELECT * FROM emp2;

ROLLBACK;

SELECT * FROM emp2;

阿里开发规范:

【参考】TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无

事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。

说明:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。

DCL中COMMIT和ROLLBACK

COMMIT:提交数据。一旦执行COMMIT,则数据就被永久的保存在数据库中,意味着数据的不可以 回滚。ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT 之后。

对比TRUNCATE TABLE 和 DELETE FROM

相同点:都可以实现对表中所有数据的删除,同时保留表结构不同点:TRUNCATA TABLE:一旦执行此操作,表数据全部清除。同时数据是不可以回滚的。

DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时数据是可以 实现回滚。

DDL和DML的说明

DDL的操作一旦执行,就不可回滚。指令SET autocommit = FALSE对DDL操作失效。(因为在执行完DDL操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE影响的。)DML的操作默认情况,一旦执行,也是不可回滚。但是在执行DML之前,执行了SET autocommit = FALSE,则执行的DML操作就可以实现回滚。

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: