SQL语法之DDL

本文主要介绍MySQL语法之DDL(data define language)操作。

1.MySQL数据定义语言

用于定义和管理数据对象,包括数据库、数据表等。包括CREATE、DROP、ALTER、TRUNCATE、RENAME等。

2. CREATE语句

  • CREATE DATABASE建库

    1
    2
    3
    4
    5
    6
    # 建库语句
    mysql> CREATE DATABASE IF NOT EXISTS db1 DEFAULT CHARACTER SET UTF8;
    # 其中有一部分可以省略
    mysql> CREATE DATABASE db1;
    # 查看系统是如何建库的
    mysql> SHOW CREATE DATABASE db1;
  • CREATE TABLE建表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 建表语句
    mysql> CREATE TABLE IF NOT EXISTS emp(id int) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    mysql> CREATE TABLE IF NOT EXISTS emp1(ID INT NOT NULL DEFAULT 1, NAME CHAR);
    mysql> CREATE TABLE IF NOT EXISTS emp2(ID INT NOT NULL AUTO_INCREMENT, NAME CHAR);
    # 其中有一部分可以省略
    mysql> CREATE TABLE emp(id int);
    # 查看系统是如何建表的
    mysql> SHOW CREATE TABLE emp;
    # 使用like建表,快速建立相同表结构的表
    # CREATE TABLE imp LIKE emp;
    # DESC emp;
    # DESC imp;
  • CREATE USER建用户

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 创建一个用户
    mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'new_password' PASSWORD EXPIRE;
    # 查看系统是如何创建的
    mysql> SHOW CREATE USER 'jeffrey'@'localhost';
    # 创建一个用户,指定过期时间
    mysql> CREATE USER 'tom'@'localhost' IDENTIFIED BY 'new_password' PASSWORD EXPIRE INTERVAL 180 DAY;
    # 查看系统是如何创建的
    mysql> SHOW CREATE USER 'tom'@'localhost';
    # 查看user.assword_last_changed 列来看对应账号密码的最近一次的修改时间
    mysql> select user,host,password_expired,password_last_changed,password_lifetime from mysql.user;
  • CREATE VIEW建视图
    视图是一个虚拟存在的表,视图的使用方式与表的使用方式一致,不需要实际上的物理存储,数据还是存储在原来的表里。
    视图可以只展现数据表的一部分数据,对于我们不希望让用户看到全部数据,只希望用户看到部分数据的时候,可以选择使用视图。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 创建视图
    mysql> create view emp_view as SELECT * from emp;
    # 查看视图表结构
    mysql> desc emp_view;
    # 查看视图内容
    mysql> select * from emp_view limit 1;
    # 修改视图
    msyql> alter view emp_view as SELECT * FROM emp;
    mysql> UPDATE emp_view set ename='lisi' WHERE ename='zhangsan';
    # 删除视图
    mysql> drop view emp_view;

3. ALTER语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 建一个测试表
mysql> create table emp ( ename varchar(20), sex char(1), hiredate date, sal decimal(10,2), deptno tinyint(1)) engine=memory default charset=utf8;
mysql> SHOW COLUMNS FROM emp;
# 修改存储引擎
mysql> ALTER TABLE emp ENGINE=Innodb;
# 修改字符集
mysql> ALTER TABLE emp DEFAULT CHARSET=utf8;
# 修改库字符集
mysql> alter database db1 character set utf8;
# 增加一个列,默认增加到最后
mysql> alter table emp add age tinyint(1);
mysql> SHOW COLUMNS FROM emp;
# 删除某一列
mysql> alter table emp drop age;
在hiredate这列后面增加一列,使用after关键字
mysql> alter table emp add manager varchar(30) after hiredate;
# 把一列加到最前面,使用first关键字
mysql> alter table emp add manager varchar(30) first;
# 使用modify修改一列的数据类型
mysql> alter table emp modify manager varchar(40);
# 修改列名要使用change去修改
mysql> alter table emp change manager boss varchar(30); --
# modify和change的区别,都可以修改数据类型,但change要写原列名;只有change可以修改列名,modify不可以

4.其他DDL语句

  • TRUNCATE语句
    1
    2
    # 截断表,清空了表内的所有数据,但是表的结构还在
    mysql> truncate table emp;
  • RENAME语句
    1
    2
    # 修改表的名字
    mysql> rename table emp to emp1;
  • DROP语句
    1
    2
    3
    4
    5
    6
    # 删库
    mysql> DROP DATABASE IF EXISTS db1;
    # 删表
    mysql> DROP TABLE IF EXISTS emp;
    # 删视图
    mysql> drop view emp_view;
---------------- The End ----------------