zoukankan      html  css  js  c++  java
  • MySQL学习笔记(二)

      SQL标准规定SQL语句分为:DDL(Data Define Language 数据定义语言)、DML(Data Manipulation Language 数据操作语言)、TCL(Transaction Control Language 事务控制语言)、DQL(Data Query Language 数据查询语言)、DCL(Data Control Language 数据控制语言)。本文将详细介绍基于TABLE的DDL语句,其余的将在接下来的文章中加以详述。

    一、DDL语言概述

      DDL语言全面数据定义语言(Data Define Language),主要的DDL动词有CREATE(创建)、DROP(删除)、ALTER(修改),还有TRUNCATE(截断)、RENAME(重命名)。使用DDL语言时,必须在动词后跟上数据库对象名词(例如:TABLE、VIEW、INDEX、SCHEMA、TRIGGER等)。

      注意:MySQL的DDL语言还有创建数据库,如CREATE DATABASE、DROP DATABASE,这在Oracle中则没有。

    二、创建数据库对象 

    语法格式:CREATE TABLE [IF NOT EXISTS] [schema.]dbName (<colume><data type>[列级完整性约束条件][,<colume><data type>[列级完整性约束条件]]...[,<表级完整性约束条件>]);

      原始员工表信息

      1、包含部分语法格式创建员工表

      2、包含所有语法格式员工创建员工表

      注意:使用sql developer创建数据库时,如果加入IF NOT EXISTS(如果已经存在,不会报错),会报错。如果数据库存在,在命令行客户端使用此命令则正常。

      创建完成数据库对象---表emp后,想显示一下emp表的结构,使用DESC table_name。但是使用sql developer操作mysql时,输入这句命令没有任何结果。由于是sql developer是可视化界面,因此可以直接点击forget406模式下的emp表直接查看表结构。当然也可以通过命令行输入DESC table_name查询表结构。

    显示表结构

    三、修改数据库对象属性(字段)

      DDL语言中,ALTER关键字用于修改数据库对象的字段,修改的方式大致有:增加字段、删除字段等。详细用法见:ALTER TABLE Syntax

    语法格式:ALTER TABLE table_name [ADD [COLUMN]<new_column_name><data tape> [完整性约束] ][ADD<表级完整约束>][DROP [COLUMN]<column_name>[CASCADE|RESTRICT]][DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]][ALTER COLUMN<column_name><data type>]

    原始emp表结构

      1、增加雇佣日期(hiredate)列  

    ALTER TABLE emp ADD COLUMN hiredate DATE NOT NULL; 或者 ALTER TABLE emp ADD hiredate DATE NOT NULL;  /* COLUME可以省略 */

      ADD子句,用于增加新列(新字段)hiredate及其数据类型、新的列级完整约束NOT NULL、以及新的表级完整约束(此处没有)。当然增加的列是在所有已有列的最后。

      2、修改列名和数据类型

      3、修改字段对应的数据类型

    ALTER TABLE emp MODIFY COLUME hiredate VARCHAR(30);  /* column可以省略 */

      4、删除hiredate列

    ALTER TABLE emp DROP COLUMN CASCADE;或者ALTER TABLE emp DROP COLUMN RESTRICT;

    四、修改数据库对象名字

      修改数据库对象的名字,首先我想到的是能不能修改DATABASE和SCHEMA这两种命名空间的名字。尝试了一下,发现不行。具体情况如下图所示。

     

      在google上查了一下MySQL5.7文档,发现MySQL5.7并不支持通过SQL语句对数据库名和模式名进行重命名,而只支持对基本表(TABLE)以及用户(USER)的重命名。

      因为我用的是MySQL5.5,所以我也没有确定这个理论是否正确,直到我在StackOverFlow上看到这段话,基本就确认目前使用的MySQL版本是不支持对数据库重命名的,而作为与数据库名类似的schema不支持也是同样的道理(原因是两者均为命名空间)。

      因此,如果需要改变db_name或者schema_name,只能通过Create关键字重新建立所需要的数据库、模式。

      MySQL修改基本表与Oracle有一定的区别。主要区别如下:

    重命名 表 格式
    MySQL: 
        RENAME TABLE old_table_name TO new_table_name;  /* 多了关键词 TABLE */
    Oracle:
        RENAME old_table_name TO new_table_name; 

    五、删除数据库对象与其数据

       TRUNCATE TALBE emp; 删除emp中的数据,但是保留emp表结构  

       DROP TABLE emp; 删除表emp及其数据 

    六、总结

      通过MySQL文档学习,虽然不能够完全掌握所有DDL内容,但是能够清楚的明白一点:MySQL的DDL语句十分灵活多变,尤其是其子句更是多种组合并用。往后的学习中需要根据具体的问题详细分析后挑选合适的SQL语句。

    ALTER子句

      目前主流的数据库大致有Oracle、Oracle MySQL、Microsoft SQL Server、Sybase、IBM DB2、Apache Derby(纯Java数据库,JDK1.7包含在db包中)、BSD PostgreSQL,这些数据库的SQL语句均在遵循大部分SQL标准后加入扩展语句,这就使得学习的难度有所增加。

      就本文涉及到的知识点,试着比较一下MySQL和Oracle这两种主流数据库的区别。

      1、数值类型

      1.1)Oracle一般使用NUMBER(P,S)表示浮点数和NUMBER(P)表示整数,其中P代表支持的数字总位数,S代表最多支持的小数位数,其余为整数位;MySQL可以使用标准SQL定义中的NUMERIC(P,S)来支持类似的功能。

      1.2)Oracle使用NUMBER类型的子类型FLOAT(N)来定义浮点数(一般不常用,在SQL标准中定义);MySQL则不仅有SQL标准的FLOAT,还扩展支持了FLOAT(P,S)和DOUBLE(P,S)。

      2、字符类型

      2.1)Oracle支持CHAR、VARCHAR、VARCHAR2(Oracle特有),其中定长字符串CHAR最多支持2000字节,变长字符串VARCHAR2最多支持4000字节。注意Oracle不建议使用VARCHAR;而MySQL支持CHAR和VARCHAR,不过MySQL中的字符串相对比较复杂,将在接下去的文章中详细分析。

      注意:VARCHAR在SQL中定义不清楚,可能会改变,因此oracle干脆直接新定义了VARCHAR2来描述变长字符串。

      

      声明:本文系作者原创,转载需经作者同意。

  • 相关阅读:
    C++中dynamic_cas操作符的工作原理
    wcf服务契约的重载
    db2学习笔记
    微软新特性下的异常处理
    任务取消TASK
    socket多文件发送(压缩,解压)
    oracle 表分区例子
    Task构造
    TASK 的使用
    Asp.Net 用户验证(自定义IPrincipal和IIdentity)
  • 原文地址:https://www.cnblogs.com/forget406/p/5495902.html
Copyright © 2011-2022 走看看