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操作,会触发将修改前和修改后的数据存放到自己定义的一张表中,但是会有性能耗损。

原文地址:https://www.cnblogs.com/cyleon/p/11540208.html