zoukankan      html  css  js  c++  java
  • DML(数据库操作语言)(六)

    一、INSERT插入语句

    语法:

    INTERT INTO 表名(列名1,列名2, ...) VALUES(列值1, 列值2, ...);
    # 在表名后给出要插入的列名,其他没有指定的列等同与插入null值。在VALUES后给出列值,值的顺序和个数必须与前面指定的列对应
    INTERT INTO 表名 VALUES(列值1, 列值2)
    # 没有给出要插入的列,那么表示插入所有列。值的个数必须是该表列的个数。值的顺序,必须与表创建时给出的列的顺序相同。
    

    示例:

    # 查看表结构
    mysql> desc t1;
    +--------+---------------+------+-----+-------------------+----------------+
    | Field  | Type          | Null | Key | Default           | Extra          |
    +--------+---------------+------+-----+-------------------+----------------+
    | id     | int(11)       | NO   | PRI | NULL              | auto_increment |
    | NAME   | char(16)      | NO   |     | NULL              |                |
    | age    | tinyint(4)    | YES  |     | NULL              |                |
    | gender | enum('m','f') | NO   |     | m                 |                |
    | bir    | datetime      | YES  |     | CURRENT_TIMESTAMP |                |
    | telnum | varchar(12)   | NO   | UNI | NULL              |                |
    +--------+---------------+------+-----+-------------------+----------------+
    
    # 插入指定的值
    mysql> insert into t1(id, NAME, gender, telnum) values(1,'tfj','f','13666669999');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from t1;
    +----+------+------+--------+---------------------+-------------+
    | id | NAME | age  | gender | bir                 | telnum      |
    +----+------+------+--------+---------------------+-------------+
    |  1 | tfj  | NULL | f      | 2019-09-18 10:07:06 | 13666669999 |
    +----+------+------+--------+---------------------+-------------+
    1 row in set (0.00 sec)
    
    # 插入所有的值
    mysql> insert into t1 values(2,'ella',30,'f',19990902,'13245678987');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from t1;
    +----+------+------+--------+---------------------+-------------+
    | id | NAME | age  | gender | bir                 | telnum      |
    +----+------+------+--------+---------------------+-------------+
    |  1 | tfj  | NULL | f      | 2019-09-18 10:07:06 | 13666669999 |
    |  2 | ella |   30 | f      | 1999-09-02 00:00:00 | 13245678987 |
    +----+------+------+--------+---------------------+-------------+
    2 rows in set (0.00 sec)
    
    # 一次性插入多条记录
    mysql> insert into t1 values(3,'jolin',32,'f',19850303,'18789989232'),(4,'andy',8,'m',20121212,'13721230990'),(5,'leon',34,'m',19861225,'19900009999');

    二、UPDATE更新数据

    语法:

    UPDATE 表名 SET 列名1=列值1, 列名2=列值2, ... [WHERE 条件]
    # WHERE 条件(条件可选的): # 条件必须是一个boolean类型的值或表达式:
    UPDATE t1 SET gender='', age=age+1 WHERE id='1'; # 运算符:=!=<>><>=<=BETWEEN...ANDIN(...)、IS NULLNOTORAND

    示例:

    mysql> select * from t1;
    +----+-------+------+--------+---------------------+-------------+
    | id | NAME  | age  | gender | bir                 | telnum      |
    +----+-------+------+--------+---------------------+-------------+
    |  1 | tfj   | NULL | f      | 2019-09-18 10:07:06 | 13666669999 |
    |  2 | ella  |   30 | f      | 1999-09-02 00:00:00 | 13245678987 |
    |  3 | jolin |   32 | f      | 1985-03-03 00:00:00 | 18789989232 |
    |  4 | andy  |    8 | m      | 2012-12-12 00:00:00 | 13721230990 |
    |  5 | leon  |   34 | m      | 1986-12-25 00:00:00 | 19900009999 |
    +----+-------+------+--------+---------------------+-------------+
    5 rows in set (0.00 sec)
    
    mysql> update t1 set age=18 where id=1;
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from t1;
    +----+-------+------+--------+---------------------+-------------+
    | id | NAME  | age  | gender | bir                 | telnum      |
    +----+-------+------+--------+---------------------+-------------+
    |  1 | tfj   |   18 | f      | 2019-09-18 10:07:06 | 13666669999 |
    |  2 | ella  |   30 | f      | 1999-09-02 00:00:00 | 13245678987 |
    |  3 | jolin |   32 | f      | 1985-03-03 00:00:00 | 18789989232 |
    |  4 | andy  |    8 | m      | 2012-12-12 00:00:00 | 13721230990 |
    |  5 | leon  |   34 | m      | 1986-12-25 00:00:00 | 19900009999 |
    +----+-------+------+--------+---------------------+-------------+
    5 rows in set (0.00 sec)

    三、DELETE 删除数据

    语法:

    DELETE FROM 表名 [WHERE 条件];
    #
    TRUNCATE TABLE 表名:TRUNCATE是DDL语句,它是先删除drop该表,再create该表。而且无法回滚!!!

    示例:

    mysql> select * from t1;
    +----+-------+------+--------+---------------------+-------------+
    | id | NAME  | age  | gender | bir                 | telnum      |
    +----+-------+------+--------+---------------------+-------------+
    |  1 | tfj   |   18 | f      | 2019-09-18 10:07:06 | 13666669999 |
    |  2 | ella  |   30 | f      | 1999-09-02 00:00:00 | 13245678987 |
    |  3 | jolin |   32 | f      | 1985-03-03 00:00:00 | 18789989232 |
    |  4 | andy  |    8 | m      | 2012-12-12 00:00:00 | 13721230990 |
    |  5 | leon  |   34 | m      | 1986-12-25 00:00:00 | 19900009999 |
    +----+-------+------+--------+---------------------+-------------+
    5 rows in set (0.00 sec)
    
    mysql> delete from t1 where age>18;
    Query OK, 3 rows affected (0.01 sec)
    
    mysql> select * from t1;
    +----+------+------+--------+---------------------+-------------+
    | id | NAME | age  | gender | bir                 | telnum      |
    +----+------+------+--------+---------------------+-------------+
    |  1 | tfj  |   18 | f      | 2019-09-18 10:07:06 | 13666669999 |
    |  4 | andy |    8 | m      | 2012-12-12 00:00:00 | 13721230990 |
    +----+------+------+--------+---------------------+-------------+
    2 rows in set (0.00 sec)

    一般不直接删除,而是使用update替换delete命令,实现伪删除。

    # 添加一个状态列,1表示数据存在,0表示数据被删除。
    mysql> ALTER TABLE t1 ADD state ENUM('1','0') DEFAULT '1'; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM t1; +----+------+------+--------+---------------------+-------------+-------+ | id | NAME | age | gender | bir | telnum | state | +----+------+------+--------+---------------------+-------------+-------+ | 1 | tfj | 18 | f | 2019-09-18 10:07:06 | 13666669999 | 1 | | 4 | andy | 8 | m | 2012-12-12 00:00:00 | 13721230990 | 1 | +----+------+------+--------+---------------------+-------------+-------+ 2 rows in set (0.00 sec) mysql> UPDATE t1 SET state='0' WHERE id='1'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
    # 实现伪删除(将1改为0) mysql
    > SELECT * FROM t1; +----+------+------+--------+---------------------+-------------+-------+ | id | NAME | age | gender | bir | telnum | state | +----+------+------+--------+---------------------+-------------+-------+ | 1 | tfj | 18 | f | 2019-09-18 10:07:06 | 13666669999 | 0 | | 4 | andy | 8 | m | 2012-12-12 00:00:00 | 13721230990 | 1 | +----+------+------+--------+---------------------+-------------+-------+ 2 rows in set (0.00 sec)
    #
    让应用看不到state=0的数据 mysql> select * from t1 WHERE state='1'; +----+------+------+--------+---------------------+-------------+-------+ | id | NAME | age | gender | bir | telnum | state | +----+------+------+--------+---------------------+-------------+-------+ | 4 | andy | 8 | m | 2012-12-12 00:00:00 | 13721230990 | 1 | +----+------+------+--------+---------------------+-------------+-------+ 1 row in set (0.00 sec)

    补充:update操作也是有风险的,一般会在数据库设计中,加入trigger一但有update操作,会触发将修改前和修改后的数据存放到自己定义的一张表中,但是会有性能耗损。

  • 相关阅读:
    Chaikin Curves in Processing
    finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
    System.gc()和Runtime.gc()的区别?
    GC原理---对象可达判断
    java十题
    在 Queue 中 poll()和 remove()有什么区别?
    ArrayList和LinkedList的区别
    HashSet的实现原理
    Java中HashMap和TreeMap的区别
    List、Map、Set之间的联系与区别:
  • 原文地址:https://www.cnblogs.com/cyleon/p/11540208.html
Copyright © 2011-2022 走看看