MySQL-DDL语句:创建,修改,移除

导航

  • 我们为什么需要DDL语句?
  • DDL的关键词
  • CREATE、ALTER、DROP
    • CREATE
    • ALTER
    • DROP
  • RENAME
  • TRUNCATE
  • GRANT、REVOKE
  • COMMENT

我们为什么需要DDL语句?

  数据库环境搭建时,都是统一的通用模板,而具体使用场景往往是千差万别的,比如某个库需要的表数量及表名都是不同的,表的列数与列名也都是不同的,每一列的数据类型也是不同的。还更数据库更基本的配置,如字符集等。

  那如何通过SQL语句满足这些千差万别呢?我们就需要DDL语句来实现了。

DDL的关键词

  一般文章里,都会按具体的实现功能来介绍SQL的语句分类,我决定采用关键词的形式介绍,如果SQL语句中用到了如下关键词,那么它就是DDL语句,而具体每个关键词的用途及用法,我会在文章后面一一详细介绍。

  需要注意的是,DDL语句往往对数据库的结构影响较大,特别是修改型的DDL语句。如果同一张表同时被多段代码、多个系统使用的话,很可能对其他代码造成影响,所以在使用DDL语句时要全局分析影响。

  这里主要是介绍DDL语句包括的内容,使用的介绍也只是挑选几个常用示例,具体的使用场景会在每个功能的单独博客中介绍。DDL中的关键词如下表:

关键词 作用
CREATE、ALTER、DROP 创建,修改,移除方案对象及其他数据库结构,包括数据库自身及数据库用户
RENAME 修改方案对象名称
TRUNCATE 删除方案对象的所有数据,但不移除对象结构
GRANT、REVOKE 授予或收回权限及角色
AUDIT、NOAUDIT 打开或关闭审计选项
COMMENT 向数据字典中添加注释

CREATE、ALTER、DROP

  这三个,是最常见的DDL语句关键词,可以用来对方案对象及其他数据库结构进行创建,修改和移除。

  方案对象及其他数据库结构包括:表、数据库本身、视图、索引、用户、存储过程、触发器、事件等等。

CREATE

  我们使用CREATE语句来创建新的数据库结构:

  • 1.创建表 CREATE Table:
	CREATE TABLE t_students(
	sid INT PRIMARY KEY AUTO_INCREMENT,
	sname VARCHAR(64),
	age   int,
	gender VARCHAR(12),
	college_id INT NOT NULL
	);

  创建完毕后,我们就可以在数据库信息中查到这张表,并进行数据的增删改查等操作。

  • 2.创建数据库 CREATE DATABASE:
	CREATE DATABASE SMS CHARACTER SET = utf8;

  创建一个全新的数据库实例,数据库名为SMS。

  • 3.创建视图 CREATE VIEW:
	CREATE VIEW v_students_info (sname,age,gender,college_name) AS
	SELECT a.sname,a.age,a.gender,b.college_name FROM t_students a , t_college b
	where a.college_id = b.college_id;

  创建一个名为v_students_info的视图,视图展示的内容为as后面查出来的学生信息。可以将视图当作一种特殊的表,视图创建后,直接查询视图,则会得到AS后面的查询结果,更加方便。

  • 4.创建用户CREATE USER:
	CREATE USER  'user_name'@'host' IDENTIFIED BY  'password';  --@前后不要空格

  user_name是要创建用户的名字。host:表示要这个新创建的用户允许从哪台机登陆,如果只允许从本机登陆,则 填 ‘localhost’ ,如果允许从远程登陆,则填 ‘%’。password:新创建用户的登陆数据库密码,如果没密码可以不写。

ALTER

  我们使用ALTER语句来修改现有的数据库结构:

  • 1.修改表ALTER TABLE:
	--增加字段
	ALTER TABLE t_students ADD height DOUBLE;
	--删除字段
	ALTER TABLE t_students DROP COLUMN height;
	--修改字段的数据类型
	ALTER TABLE t_students MODIFY COLUMN sname VARCHAR(12);
  • 2.修改视图ALTER VIEW:
	ALTER VIEW v_students_info (sname,age,gender,college_name,height) AS
	SELECT a.sname,a.age,a.gender,b.college_name,a.height FROM t_students a , t_college b
	where a.college_id = b.college_id;

DROP

  我们使用DROP语句来移除现有的数据库结构:

  • 1.移除表DROP TABLE:
	DROP TABLE t_students;
  • 2.移除视图DROP VIEW:
	DROP VIEW v_students_info;

RENAME

  我们可以使用RENAME语句来修改表名:RENAME TABLE,实例:

	-- rename table 原表名 to 新表名
	rename table t_students to t_students_info;

  需要注意的是,修改了表明后,使用到原表的视图会变得不可用,而不会自动查询新表名。

TRUNCATE

  我们可以使用TRUNCATE语句来快速清空目标表:TRUNCATE TABLE,实例:

	truncate table t_students;

  使用TRUNCATE会快速清空目标表的所有记录,与DML语句中的Delete不同的是,TRUNCATE后面无法接where进行条件判断,只能默认清空所有记录。

  使用TRUNCATE清空时不会产生日志记录,更偏向于从更底层直接删除,所以它是DDL语句。而DELETE是DML语句,删除每行时都会产生日志记录,所有效率会比TRUNCATE慢。

  TRUNCATE清空表中后,自动增加字段初始值也被重置为1。而使用DELETE时,自增字段还是会在原有基础上继续增加。

GRANT、REVOKE

  数据库的权限大体可以分为两类:一是认证,即是否有资格连接数据库;二是授权,即是否有权限进行某些操作。认证是授权的前提。

  我们可以GRANT语句来进行授权,使用REVOKE来收回授权。

  GRANT语句的通用格式如下:

	grant 权限 on 数据库对象 to 用户 

  其中,权限可以包括:增删改查、创建、修改、移除、索引等等。数据库对象则有表、视图、存储过程、函数、数据库等等。并且在一行语句中可以同时授权多种权限,权限间使用“,”分开即可。

  REVOKE语句的通用格式如下:

	revoke 权限 on 数据库对象 from 用户 

  REVOKE的用法与GRANT类似,只是作用相反,是将授权回收。

  需要注意的是,grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

COMMENT

  数据库的字段都是英文字母的,虽然我们在为字段及表命名时都会尽量遵守开发命名规范,做到见词达意,但日子一长,特别是系统、工作有了多次交接,难免会忘记数据库表及字段的设计初衷与用途。使用COMMENT,可以为表及字段添加中文注释,更方便理解。

  可以在创建表的同时添加注释,实例:

	create table t_students
	(
	    sid int comment '字段的注释'
	)comment='表的注释';

  也可以在表创建后修改注释,实例:

--修改表的注释
alter table t_students comment '修改后的表的注释';
--修改字段的注释
alter table t_students modify column sid int comment '修改后的字段注释';

  使用COMMENT添加完成注释后,我们可以使用show create table和show full columns来查看注释。

你可能感兴趣的:(数据库)