zoukankan      html  css  js  c++  java
  • MySQL的DDL和DML

    SQL语句:结构化查询语句,使用SQL与数据库“沟通”,完成相应的数据库操作。

    语句分类

    DDL(Data Definition Languages)语句:即数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。增删改表的结构

    DML(Data Manipulation Language)语句:即数据操纵语句,用来查询、添加、更新、删除等,常用的语句关键字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增删改查。增删改表的数据

    DCL(Data Control Language)语句:即数据控制语句,用于授权/撤销数据库及其字段的权限(DCL is short name of Data Control Language which includes commands such as GRANT and mostly concerned with rights, permissions and other controls of the database system.)。常用的语句关键字有:GRANT,REVOKE。

    TCL(Transaction Control Language)语句:事务控制语句,用于控制事务,常用的语句关键字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION。

    一. DDL语句

    增删改表的结构,代表字段:create,alter,drop

    1.1 创建表

    创建表CREATE

    演示:创建员工表

    CREATE TABLE employee(

    id int(4),

    name VARCHAR(20),

    gender CHAR(1),

    birth DATE,

    salary float(2),

    job VARCHAR(30),

    deptno int(2)

    );

    设置默认值 DEFAULT

    可以通过DEFAULT子句给列指定默认值

    CREATE TABLE emptest(

    id int(4),

    name VARCHAR(20),

    gender CHAR(1) DEFAULT 'M',

    birth DATE

    );

    设置列值非空NOT NULL

    默认情况下,任何列都允许有空值。非空(NOT NULL)是一种条件约束,用于确保字段值不为空,当某个字段被设置了非空约束条件,这个字段中必须存在有效值,即:当执行插入数据操作时,必须提供这个列的数据;当执行更新操作时,不能给这个列的值设置为NULL。Ø NOT NULL:非空

    CREATE TABLE emptest(

    id int(4) ,

    name VARCHAR20) NOT NULL,

    gender CHAR(1) DEFAULT 'M',

    birth DATE

    );

    1.2 复制表

    复执表中所有数据

    CREATE TABLE emptest1 as select * from emptest;

    复制表中部分数据

    CREATE TABLE emptest2 as select id,name from emptest;

    1.3 修改表

    修改表名RENAME

    演示:修改表名

    alter table emptest rename to/as testemp;  #修改表名

    create table testemp1 like emptest;    #创建表结构.这样的建表方式,不仅仅是表的结构,连带着索引也会同时创建.

    增加列ALTER ADD

    演示:在testemp表下面增加hiredate列,并将默认值设置为当前时间增加列,列只能增加在最后,不能插入现有的列中。

    ALTER TABLE testemp ADD(hiredate DATE DEFAULT sysdate);

    删除列 ALTER DROP

    删除列,删除字段需要从每行中删掉该字段占据的长度和数据,并释放在数据块中占据的空间,如果表记录比较大,删除字段可能需要比较长的时间。

    演示:删除testemp表下的hiredate

    ALTER TABLE testemp DROP (hiredate);

    修改列 ALTER MODIFY

    修改列,使用MODIFY可以改变表中列的数据类型、长度和默认值,注意这种修改仅对以后插入的数据有效。另外如果表中已经有数据的情况下,把长度由大改小,有可能不成功,比如原来类型是VARCHAR2(100),其中已经存放了100字节长度的数据,如果改为80字节,则不会修改成功。

    演示:修改testemp表中name的长度为30

    ALTER TABLE testemp MODIFY(name VARCHAR(30));

    1.4 查看表的数据结构DESC

    DESC employee;

    1.5 删除表DROP

    DROP TABLE emptest;

    DROP TABLE if exist emptest;

    二. DML语句

     用于增删改表中数据,DML是伴随TCL事务控制的。代表字段:insert,delete, update

    增加记录INSERT

    INSERT语句用来给数据表增加记录,每次增加一条记录。所有的DML操作,需要再执行事务提交语句COMMIT才算真正确认了此操作。

    语法: insert into tablename(columnname1,columnname2,columnname3,c...) values(value1,value2,value3,....);

    字段和值必须一一对应,个数必须相同,数据类型必须一致

    演示:想testemp中插入一条记录

    INSERT INTO testemp (id,name,gender) VALUES (1,'张三','M');

    COMMIT;

    插入数据时忽略字段则是全列插入,顺序不能错误,如下:

    INSERT INTO testemp VALUES (10,'李四','F',sysdate);

    COMMIT;

    注意:如何插入中文数据
    使用DOS命令窗口不能直接插入中文,因为DOS窗口是GBK的编码方式,但是数据库表只接受UTF-8
    因此可以使用图形化界面工具插入数据,在DOS窗口中查询的时候出现乱码,
    可以修改查询结果集的显示编码方式。
    mysql> set character_set_results ='GBK';

    更新表记录UPDATE

    更新表中的记录,需要配合WHERE子句使用,否则全表的数据都会被更新。

    语法: update tablename set 字段名=字段值,字段名=字段值,字段名=字段值 where 条件

    演示:更新testemp表中张三的ID为2

    UPDATE testemp SET id=2 WHERE name='张三';

    COMMIT;

    同时修改两个类型:

    UPDATE testemp SET id=5,name='王五' WHERE name='李四';

    COMMIT;

    删除表记录DELETE

    删除表中的记录,和UPDATE一样,需要配合WHERE子句使用,不然会将全表数据删除。

    语法: delete from tableame where 条件

    演示:将testemp表中id为2的记录删除

    DELETE FROM testemp WHERE id=2;

     清空表:

    DELETE FROM testemp;

  • 相关阅读:
    C语言基础课程 第二课 HelloWorld不为菜鸟所知的秘密
    C语言基础课程 第一课 Linux环境配置小实战httpserver
    Linux企业级开发技术(6)——libevent企业级开发之内存管理
    Linux企业级开发技术(7)——libevent企业级开发之锁和线程
    Linux内存管理学习笔记--概述
    5月16日云栖精选夜读:从0到1构建大数据生态系列1:数据蛮荒中的拓荒之举
    luoguP1063 能量项链
    bzoj1060 [ZJOI2007]时态同步
    bzoj1864 [Zjoi2006]三色二叉树
    bzoj1864 [Zjoi2006]三色二叉树
  • 原文地址:https://www.cnblogs.com/leslie12956/p/11826779.html
Copyright © 2011-2022 走看看