第六节:数据定义语言DDL

DDL:数据定义语言用到的关键字主要有create、drop、alter、rename、set、show、desc、use

comment: 表示注释

create

  1. create:作用是用来创建数据库、表、视图、索引、临时表等
  2. 名称规范:
    1. 数据库以db开头:db_name
    2. 表以tb开头:tb_name

创建数据库

  1. 语法:create database [if not exists]数据库名 [default character set 字符集名称] [default collate  校对规则名称]
    1. [ ]:表示[]里面的内容是可选的
    2. if not exists:在创建数据库之前进行判断,如果不存在才会创建,如果存在也不会报错(避免数据库已经存在而重复创建的错误)
    3. [DEFAULT] CHARACTER SET:指定数据库的默认字符集
    4. [DEFAULT] COLLATE:指定字符集的默认校对规则
  2. 实例:数据库为db_test,指定其默认字符集为 utf8,默认校对规则为 utf8_chinese_ci(简体中文,不区分大小写)  
    1. create database if not exists db_test default character set utf8 default collate utf8_chinese_ci

创建表

  1. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性约束的过程
  2. CREATE TABLE 命令语法:其主要是由表创建定义(create-definition)、表选项(table-options)和分区选项(partition-options)所组成的
  3. 创建表的语法:CREATE TABLE [if not exists] tb_name ([表定义选项])[表选项][分区选项];
    1. [表定义选项]的格式为:(列名 列类型 其他的关键词,...列名 列类型 其他的关键词)
  4. CREATE TABLE 语句的主要语法及使用说明如下:
    1. CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限
    2. tb_name:指定要创建表的名称,在 CREATE TABLE 之后给出,必须符合标识符命名规则。表名称被指定为 db_name.tbl_name,在特定的数据库中创建表
    3. 表定义选项:表创建定义,由列名、列的属性、约束或表索引组成。
  5. 例如:创建了tb_test表
    create table IF NOT EXISTS tb_test(
      id int  not null auto_increment comment '用户id',
      user_name varchar(20) not null comment '用户名',
      email varchar(50) not null comment '用户邮箱',
      age tinyint unsigned not null comment '用户年龄',
      primary key(id)
    )ENGINE=INNODB DEFAULT CHARSET=utf8;
  6. 使用select语句创建表:

    1. CREATE  TABLE 表名 AS  SELECT语句 ;
    2. CREATE  TABLE 表名 SELECT语句 ;

创建用户

  1. 语法格式:create user 'user_name'@'host_name' identified  by 'password'
  2. 语法说明如下:
    1. 'user_name'@'host_name':是一个整体,在user表中唯一标识一个用户。
      1. user_name:是用户名
      2. host_name:为主机名,指定了允许用户登录所使用的IP。若没指定主机名,则主机名默认为“%”(比如user=root Host=192.168.1.1。表示说root用户只能通过192.168.1.1的客户端去访问) %是个通配符,表示所有IP都有连接权限
    2. identified by:用于设置用户的登录密码,如果省略则不设置登录密码
    3. password:设置的登录密码
  3. create user 注意点:
    1. create user 语句创建一个用户账号后,会在系统自身的MySQL数据库的 user 表中添加一条新记录。
    2. 如果两个用户具有相同的用户名和不同的主机名,MySQL 会将他们视为不同的用户,并允许为这两个用户分配不同的权限集合
  4. 实例:
    1. create user userName@192.168.1.60 identified by '123456';(创建一个用户,用户名是 userName,密码是 123456,主机是 192.168.1.60。)
    2.   create user userName;  (不加地址,默认是所有机器,不加identified by  表示不设置登录密码) 

drop

删除数据库

  1. 语法:drop database[ if exists ] 数据库名
  2. 语法说明如下
    1. 数据库名:指定要删除的数据库名
    2. IF EXISTS:用于防止当数据库不存在时发生错误
  3.  注意:MySQL 安装后,系统会自动创建名为 information_schema 和 mysql 的两个系统数据库,用来存放一些和数据库相关的信息,删除了这两个数据库,MySQL 将不能正常工作
  4. 例子:drop database if exists db_test;

删除表

  1. 语法:DROP TABLE [IF EXISTS] 表名1,..., 表名n
  2. 语法说明如下
    1. 表名:被删除的表名。drop table 语句可以同时删除多个表
    2. 参数IF EXISTS用于在删除前判断删除的表是否存在,加上该参数后,在删除表的时候,表不存在也不会报错
  3. 实例:drop table newTeacher;

删除用户

  1. 语法格式:drop user 用户名1,...,用户名n
  2. drop user 注意点:
    1. drop user 语句可用于删除一个或多个用户
    2. 在 drop user 语句的使用中,若没有明确地给出账户的主机名,则该主机名默认为“%”。
    3.  删除用户不会影响他们之前所创建的表、索引等其他数据库对象,因为 MySQL 并不会记录是谁创建了这些对象
  3. 实例:drop user 'jack'@'localhost';

alter、rename和set

修改数据库

  1. 语法:ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET 字符集名 | [ DEFAULT ] COLLATE 校对规则名}
  2. 语法说明如下
    1. 数据库名称可以省略(省略即是默认的数据库)
    2. alter database修改的的是数据库的全局属性,这些特性存储在数据库目录的 db.opt 文件中。
    3. character set 和 collate用于修改字符集和校对规则
  3. 例子:alter database db_test default character set gb2312 default collate gb2312_chinese_ci;

修改表结构

  1. 语句用来修改表的 结构(增加或者减少列,创建获者取消索引,更改列名、表名、索引,修改字段的排列位置,更改表的存储引擎、约束等等)
  2. 基本语法:alter table tb_name 修改选项
  3. 添加字段
    1. 语法:ALTER TABLE 表名 ADD [column] 新字段名 数据类型 [约束条件] [FIRST|AFTER 已存在的字段名]
    2. 语法说明如下
      1. 新字段名:需要添加的字段的名称;
      2. FIRST:为可选参数,其作用是将新添加的字段设置为表的第一个字段;
      3. AFTER 为可选参数,其作用是将新添加的字段添加到指定的已存在的字段名的后面。
      4. column:为可选参数,使用与否均不影响结果
      5. “FIRST 或 AFTER 已存在的字段名”用于指定新增字段在表中的位置,如果没有这两个参数,则默认将新字段设置为数据表的最后列。
    3. 实例
      1. alter table teacher2 add age1 int first;
      2. alter table teacher2 add age2 int after age1;
  4. 修改字段数据类型:
    1. 语法:alter table tb_name modify [column] 列名称  类型
    2. 语法说明如下
      1. column:为可选参数,使用与否均不影响结果
      2. 表名:指要修改数据类型的字段所在表的名称
      3. 字段名:指需要修改的字段
      4. 数据类型:指修改后字段的新数据类型
    3. 实例:alter table teacher modify column name varchar(11);
  5. 删除字段
    1. 语法:alter table tb_name drop 字段名;
    2. 语法说明如下:
      1. 字段名:指需要从表中删除的字段的名称。
    3.  实例:alter table teacher drop name;
  6. 修改字段名称
    1. 语法:alter table tb_name change 旧字段  新字段  新类型
    2. 语法说明如下:
      1. 旧字段名:指修改前的字段名
      2. 新字段名:指修改后的字段名
      3. 新数据类型:指修改后的数据类型,如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样,但数据类型不能为空。
    3. 实例:alter table teacher change id pid varchar(25);
    4. 注意: CHANGE 也可以只修改数据类型,实现和 MODIFY 同样的效果,将 SQL 语句中的“新字段名”和“旧字段名”设置为相同的名称,只改变“数据类型”。
  7. 修改表名
    1. 语法:alter table 旧表名 rename [to] 新表名
    2. 语法说明如下:
      1. TO 为可选参数,使用与否均不影响结果。
    3. 实例:alter table teacher1 rename newTeacher;

修改用户账号和密码

修改用户账号

  1.  语法格式:rename user  username@hostname to newname@newhost
  2. 语法说明如下:
    1.  username@hostname:系统中存在的需要修改的用户账号
    2.  newname@newhost:新的用户账号
    3. newname和hostname:随便改哪个都算修改用户账号
  3. rename user注意点:
    1. rename user 语句用于对原有的账户进行重命名
    2. 若系统中旧账户不存在或者新账户已存在,则该语句执行时会出现错误
  4. 实例: rename user james@'localhost' TO jack@'localhost';

修改密码

  1. 语法格式:set password [for username@hostname] =  password('新明文口令')
  2. 语法说明如下:
    1. for username@hostname:指定欲修改密码的账户;不加表示修改当前账户的密码
    2. password('新明文口令'):表示使用函数 password() 设置新口令,即新口令必须传递到函数 PASSWORD() 中进行加密
  3. 实例:set password for 'Weiking'@'localhost'= password('123456');

show

  1. 查看数据库:show databases [like %数据库名称%];
    1. LIKE 是可选项,用于匹配指定的数据库名称:show databases like 'Weiking%';
    2. 查看所有数据库 :show databases;
  2. 查看创建表的SQL语句:show create table 表名 \G;
    1. 不仅可以查看创建表时的详细语句,而且可以查看存储引擎和字符编码。
    2. 如果不加“\G”参数,显示的结果可能非常混乱,加上“\G”参数之后,可使显示的结果更加直观
  3. 查看某个数据库下有哪些表:show tables(相当于相对路径)或show tables from database_name;
  4. 查看某个数据库下的某张表有哪些列:show columns from tb_name from db_name;
  5. 查看某个用户的授权:show grants for user_name;
  6. 查看一张表的索引:show index from table_name;
  7. 查看当前所有的线程的状态: show status;
  8. 查看所有系统变量:show variables;
  9. 查看当前数据库支持的引擎:show engines;

desc

  1. DESCRIBE/DESC 语句可以查看表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等
  2. 语法:describe ta_name(或简写成:DESC ta_name)
  3. 实例:desc commodity;
  4. 表结构说明如下
    +------------+-------------+------+-----+---------+-------+
    | Field      | Type        | Null | Key | Default | Extra |
    +------------+-------------+------+-----+---------+-------+
    | c_id       | int(11)     | NO   | PRI | NULL    |       |
    | c_name     | varchar(50) | NO   |     | NULL    |       |
    | c_madein   | varchar(50) | NO   |     | NULL    |       |
    | c_type     | int(11)     | YES  | MUL | NULL    |       |
    | c_inprice  | int(11)     | NO   |     | NULL    |       |
    | c_outprice | int(11)     | YES  |     | NULL    |       |
    | c_num      | int(11)     | YES  |     | 100     |       |
    +------------+-------------+------+-----+---------+-------+
    
    1.Null:表示该列是否可以存储 NULL 值。
    2.Key:表示该列是否已编制索引。PRI 表示该列是表主键的一部分,UNI 表示该列是 UNIQUE 索引的一部分,MUL 表示在列中某个给定值允许出现多次。
    3.Default:表示该列是否有默认值,如果有,值是多少。
    4.Extra:表示可以获取的与给定列有关的附加信息,如 AUTO_INCREMENT 等。    

 

use

  1. 切换数据库:use tb_name;
  2. 语法说明如下
    1. 该语句可以通知 MySQL 把tb_name作为当前数据库。
  3. 实例:use teacher;

 

 

posted @ 2019-12-05 17:49  WeiKing  阅读(580)  评论(0)    收藏  举报