美文网首页
MySQL必知必会2

MySQL必知必会2

作者: 远方的橄榄树 | 来源:发表于2020-03-10 17:37 被阅读0次

创建计算字段

  • 使用Concat()函数拼接字段

mysql> SHOW COLUMNS FROM address;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| province | varchar(255) | YES  |     | NULL    |                |
| city     | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

mysql> SELECT Concat(province, '-', city) AS address FROM address;
+---------------------+
| address             |
+---------------------+
| 广东省-深圳市       |
| 广东省-惠州市       |
| 广东省-东莞市       |
+---------------------+
  • 使用trim()删除左右侧多余的空格

mysql> SELECT Concat('(', province, ')', '->(', Trim(province), ')') AS trim_test
    -> FROM address WHERE id = 4;
+------------------------+
| trim_test              |
+------------------------+
| (    ABC      )->(ABC) |
+------------------------+

RTrim()删除右边空格,LTrim()删除左边空格。

  • 执行算术计算

mysql> SELECT * FROM good;
+----+---------+------+-------+
| id | name    | num  | price |
+----+---------+------+-------+
|  1 | 苹果    |    4 |  3.60 |
|  2 | 香蕉    |    5 |  5.40 |
|  3 | 西瓜    |    2 | 12.50 |
+----+---------+------+-------+

mysql> SELECT name, num, price, num * price AS total FROM good;
+---------+------+-------+-------+
| name    | num  | price | total |
+---------+------+-------+-------+
| 苹果    |    4 |  3.60 | 14.40 |
| 香蕉    |    5 |  5.40 | 27.00 |
| 西瓜    |    2 | 12.50 | 25.00 |
+---------+------+-------+-------+

使用数据处理函数

  • 函数

SQL支持利用函数来处理数据。函数一般是在数据上执行的,它给数据的转换和处理提供了方便。
大多数SQL实现支持以下类型的函数:
1、用于处理文本串的文本函数。
2、用于在数值数据上进行算术操作的数值函数。
3、处理日期和时间值的时间或日期函数。
4、获取特殊信息的系统函数。

  • 使用函数

1、文本函数

mysql> SELECT Upper(name) FROM user WHERE name REGEXP '^[a-z]+';
+-------------+
| Upper(name) |
+-------------+
| TOM         |
| DUCK        |
| TONY        |
| PUCK        |
| APPLE       |
| PEOPLE      |
+-------------+
常用的文本处理函数 说明
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写

2、日期和时间处理函数

常用日期和时间处理函数 说明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分
mysql> SELECT Now();
+---------------------+
| Now()               |
+---------------------+
| 2020-03-09 15:26:50 |
+---------------------+

mysql> SELECT Date(Now());
+-------------+
| Date(Now()) |
+-------------+
| 2020-03-09  |
+-------------+

mysql> SELECT Time(Now()) AS time;
+----------+
| time     |
+----------+
| 15:29:05 |
+----------+

数值处理函数

常用数值处理函数 说明
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切
mysql> SELECT Abs(-23);
+----------+
| Abs(-23) |
+----------+
|       23 |
+----------+

mysql> SELECT Sqrt(64);
+----------+
| Sqrt(64) |
+----------+
|        8 |
+----------+

汇 总 数 据

  • 聚集函数

SQL聚集函数 说明
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和

聚集函数(aggregate function)运行在行组上,计算和返回单个值的函数。

mysql> SELECT price FROM good;
+-------+
| price |
+-------+
|  3.60 |
|  5.40 |
| 12.50 |
+-------+

mysql> SELECT Count(*), Avg(price), Max(price), Min(price), Sum(price) FROM good;
+----------+------------+------------+------------+------------+
| Count(*) | Avg(price) | Max(price) | Min(price) | Sum(price) |
+----------+------------+------------+------------+------------+
|        3 |   7.166667 |      12.50 |       3.60 |      21.50 |
+----------+------------+------------+------------+------------+

分 组 数 据

  • GROUP BY分组

根据年龄分组,并统计每个年龄的用户数量。

mysql> SELECT age, COUNT(*) FROM user GROUP BY age;
+------+----------+
| age  | COUNT(*) |
+------+----------+
|   12 |        4 |
|   16 |        3 |
|   18 |        2 |
| NULL |        1 |
|   23 |        1 |
|   15 |        1 |
|   22 |        1 |
|   13 |        1 |
|   31 |        3 |
|   11 |        1 |
|   42 |        3 |
|   32 |        1 |
+------+----------+
  • HAVING 过滤分组

mysql> SELECT age, Count(*) AS num FROM user
    -> WHERE age IS NOT NULL
    -> GROUP BY age
    -> HAVING num > 1;
+------+-----+
| age  | num |
+------+-----+
|   12 |   4 |
|   16 |   3 |
|   18 |   2 |
|   31 |   3 |
|   42 |   3 |
+------+-----+

1、HAVING 支持所有 WHERE 操作符。
2、HAVING 和 WHERE 的差别 这里有另一种理解方法, WHERE 在数据
分组前进行过滤, HAVING 在数据分组后进行过滤。

  • 分组和排序

mysql> SELECT * FROM good;
+----+--------+------+-------+
| id | name   | num  | price |
+----+--------+------+-------+
|  1 | 苹果   |    4 |  3.60 |
|  2 | 香蕉   |    5 |  5.40 |
|  3 | 西瓜   |   20 | 12.50 |
|  4 | 苹果   |   10 |  3.60 |
|  5 | 桃子   |    6 |  1.50 |
|  6 | 香蕉   |    3 |  5.40 |
+----+--------+------+-------+

mysql> SELECT name, Sum(num) AS total_num, Sum(num * price) AS total_price FROM good
    -> GROUP BY name
    -> ORDER BY total_price;
+--------+-----------+-------------+
| name   | total_num | total_price |
+--------+-----------+-------------+
| 桃子   |         6 |        9.00 |
| 香蕉   |         8 |       43.20 |
| 苹果   |        14 |       50.40 |
| 西瓜   |        20 |      250.00 |
+--------+-----------+-------------+
  • 使用子查询

SQL允许创建子查询(subquery),即嵌套在其他查询中的查询。
创建两个表sys_usersys_role

mysql> SELECT * FROM sys_user;
+----+---------+--------+----------+
| id | role_id | name   | password |
+----+---------+--------+----------+
|  1 |       1 | 小明   | 123      |
|  2 |       2 | 小李   | 1234     |
|  3 |       2 | 小丽   | 1223     |
|  4 |       3 | 小龙   | 123      |
|  5 |       3 | 小芬   | 123      |
+----+---------+--------+----------+
mysql> SELECT * FROM sys_role;
+----+-----------------+
| id | name            |
+----+-----------------+
|  1 | 超级管理员      |
|  2 | 管理员          |
|  3 | 普通用户        |
+----+-----------------+

若我们需要查找角色是超级管理员或管理员的用户,需要执行以下操作。

mysql> SELECT id AS role_id FROM sys_role WHERE name = '超级管理员' OR name = '管理员';
+---------+
| role_id |
+---------+
|       1 |
|       2 |
+---------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM sys_user WHERE role_id in (1, 2);
+----+---------+--------+----------+
| id | role_id | name   | password |
+----+---------+--------+----------+
|  1 |       1 | 小明   | 123      |
|  2 |       2 | 小李   | 1234     |
|  3 |       2 | 小丽   | 1223     |
+----+---------+--------+----------+

但其实,我们可以利用子查询一步完成。

mysql> SELECT * FROM sys_user WHERE role_id IN 
    ->(SELECT id FROM sys_role WHERE name = '超级管理员' OR name = '管理员');
+----+---------+--------+----------+
| id | role_id | name   | password |
+----+---------+--------+----------+
|  1 |       1 | 小明   | 123      |
|  2 |       2 | 小李   | 1234     |
|  3 |       2 | 小丽   | 1223     |
+----+---------+--------+----------+
  • 作为计算字段使用子查询

mysql> SELECT name, password,
    -> (SELECT r.name FROM sys_role r WHERE sys_user.role_id = r.id) AS role_name 
    ->FROM sys_user;
+--------+----------+-----------------+
| name   | password | role_name       |
+--------+----------+-----------------+
| 小明   | 123      | 超级管理员      |
| 小李   | 1234     | 管理员          |
| 小丽   | 1223     | 管理员          |
| 小龙   | 123      | 普通用户        |
| 小芬   | 123      | 普通用户        |
+--------+----------+-----------------+

联结

  • 关系表

要理解关系表需要看下面这个例子。

假如有一个包含产品目录的数据库表,其中每种类别的物品占一行。对于每种物品要存储的信息包括产品描述和价格,以及生产该产品的供应商信息。假如有多种物品由同一供应商生产。那么在设计上通常将产品信息供应商信息分开。理由如下:
1、 因为同一供应商生产的每个产品的供应商信息都是相同的,对每个产品重复此信息既浪费时间又浪费存储空间。
2、如果供应商信息改变(例如,供应商搬家或电话号码变动),只需改动一次即可。
3、如果有重复数据(即每种产品都存储供应商信息),很难保证每次输入该数据的方式都相同。不一致的数据在报表中很难利用。

在这个例子中,可建立两个表,一个存储供应商信息(vendor),另一个存储产品信息(product)。vendor表存储供应商基本信息,而product只需存储对应vendor表的主键即可,这个主键又叫product的外键

外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。
联结 。简单地说,联结是一种机制,用来在一条 SELECT语句中关联表,检索出多个表的数据。

mysql> SELECT * FROM product;
+----+---------+-----------------+------------+-------+
| id | vend_id | name            | valid_date | price |
+----+---------+-----------------+------------+-------+
|  1 |       1 | 旺旺碎冰冰      | 2020-03-20 |  1.50 |
|  2 |       1 | 旺仔牛奶        | 2020-03-26 |  2.50 |
|  3 |       1 | 旺仔QQ糖        | 2020-03-11 |  4.00 |
|  4 |       2 | 可口可乐        | 2020-03-18 |  3.00 |
|  5 |    NULL | 糖果            | NULL       | 12.00 |
|  6 |    NULL | 饼干            | NULL       | 23.00 |
+----+---------+-----------------+------------+-------+

mysql> SELECT * FROM vendor;
+----+--------------+-----------------------+--------+
| id | name         | address               | phone  |
+----+--------------+-----------------------+--------+
|  1 | 旺旺         | 旺旺制造厂            | 123456 |
|  2 | 可口可乐     | 可口可乐制造厂        | 123456 |
|  3 | 百事可乐     | 百事可乐制造厂        | 123456 |
|  4 | 蒙牛         | 蒙牛牛奶制造厂        | 123456 |
+----+--------------+-----------------------+--------+

mysql> SELECT v.name AS vend_name, p.name AS prod_name, p.price AS prod_price 
    ->FROM vendor v, product p
    -> WHERE v.id = p.vend_id
    -> ORDER BY vend_name, prod_name;
+--------------+-----------------+------------+
| vend_name    | prod_name       | prod_price |
+--------------+-----------------+------------+
| 可口可乐     | 可口可乐        |       3.00 |
| 旺旺         | 旺仔QQ糖        |       4.00 |
| 旺旺         | 旺仔牛奶        |       2.50 |
| 旺旺         | 旺旺碎冰冰      |       1.50 |
+--------------+-----------------+------------+

WHERE子句的重要性 在联结两个表时,你实际上做的是将第一个表中的每一行与第二个表中的每一行配对。 WHERE 子句作为过滤条件,它只包含那些匹配给定条件(这里是联结条件)的行。没有WHERE 子句,第一个表中的每个行将与第二个表中的每个行配对,而不管它们逻辑上是否可以配在一起。

  • 内部联结

前面的例子为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内部联结。对于这种联结可以使用稍微不同的语法来明确指定联结的类型。

mysql> SELECT v.name AS vend_name, p.name AS prod_name, p.price AS prod_price
    -> FROM product 
    ->  p INNER JOIN vendor v ON p.vend_id = v.id
    -> ORDER BY vend_name, prod_name;
+--------------+-----------------+------------+
| vend_name    | prod_name       | prod_price |
+--------------+-----------------+------------+
| 可口可乐     | 可口可乐        |       3.00 |
| 旺旺         | 旺仔QQ糖        |       4.00 |
| 旺旺         | 旺仔牛奶        |       2.50 |
| 旺旺         | 旺旺碎冰冰      |       1.50 |
+--------------+-----------------+------------+

使用哪种语法 ANSI SQL规范首选 INNER JOIN 语法。

  • 内连接与外连接

1、INNER JOIN
内连接INNER JOIN是最常用的连接操作。从数学的角度讲就是求两个表的交集,从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录。

mysql> SELECT p.*, v.name AS vend_name, v.address AS vend_address, v.phone asvend_phone
    -> FROM product p INNER JOIN vendor v
    -> ON p.vend_id = v.id;
+----+---------+-----------------+------------+-------+--------------+-----------------------+--------------+
| id | vend_id | name            | valid_date | price | vend_name    | vend_address          | asvend_phone |
+----+---------+-----------------+------------+-------+--------------+-----------------------+--------------+
|  1 |       1 | 旺旺碎冰冰      | 2020-03-20 |  1.50 | 旺旺         | 旺旺制造厂            | 123456       |
|  2 |       1 | 旺仔牛奶        | 2020-03-26 |  2.50 | 旺旺         | 旺旺制造厂            | 123456       |
|  3 |       1 | 旺仔QQ糖        | 2020-03-11 |  4.00 | 旺旺         | 旺旺制造厂            | 123456       |
|  4 |       2 | 可口可乐        | 2020-03-18 |  3.00 | 可口可乐     | 可口可乐制造厂        | 123456       |
+----+---------+-----------------+------------+-------+--------------+-----------------------+--------------+

2、LEFT JOIN
左连接LEFT JOIN的含义就是求两个表A表和B表的交集外加左表剩下的数据。依旧从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表A表中剩余的记录

mysql> SELECT p.*, v.name AS vend_name, v.address AS vend_address, v.phone asvend_phone
    -> FROM product p LEFT JOIN vendor v
    -> ON p.vend_id = v.id;
+----+---------+-----------------+------------+-------+--------------+-----------------------+--------------+
| id | vend_id | name            | valid_date | price | vend_name    | vend_address          | asvend_phone |
+----+---------+-----------------+------------+-------+--------------+-----------------------+--------------+
|  1 |       1 | 旺旺碎冰冰      | 2020-03-20 |  1.50 | 旺旺         | 旺旺制造厂            | 123456       |
|  2 |       1 | 旺仔牛奶        | 2020-03-26 |  2.50 | 旺旺         | 旺旺制造厂            | 123456       |
|  3 |       1 | 旺仔QQ糖        | 2020-03-11 |  4.00 | 旺旺         | 旺旺制造厂            | 123456       |
|  4 |       2 | 可口可乐        | 2020-03-18 |  3.00 | 可口可乐     | 可口可乐制造厂        | 123456       |
|  5 |    NULL | 糖果            | NULL       | 12.00 | NULL         | NULL                  | NULL         |
|  6 |    NULL | 饼干            | NULL       | 23.00 | NULL         | NULL                  | NULL         |
+----+---------+-----------------+------------+-------+--------------+-----------------------+--------------+

注意后面两条数据

RIGHT JOIN
同理右连接RIGHT JOIN就是求两个表A和B表的交集外加右表B剩下的数据。再次从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录。

mysql> SELECT p.*, v.name AS vend_name, v.address AS vend_address, v.phone asvend_phone
    -> FROM product p RIGHT JOIN vendor v
    -> ON p.vend_id = v.id;
+------+---------+-----------------+------------+-------+--------------+-----------------------+--------------+
| id   | vend_id | name            | valid_date | price | vend_name    | vend_address          | asvend_phone |
+------+---------+-----------------+------------+-------+--------------+-----------------------+--------------+
|    1 |       1 | 旺旺碎冰冰      | 2020-03-20 |  1.50 | 旺旺         | 旺旺制造厂            | 123456       |
|    2 |       1 | 旺仔牛奶        | 2020-03-26 |  2.50 | 旺旺         | 旺旺制造厂            | 123456       |
|    3 |       1 | 旺仔QQ糖        | 2020-03-11 |  4.00 | 旺旺         | 旺旺制造厂            | 123456       |
|    4 |       2 | 可口可乐        | 2020-03-18 |  3.00 | 可口可乐     | 可口可乐制造厂        | 123456       |
| NULL |    NULL | NULL            | NULL       |  NULL | 百事可乐     | 百事可乐制造厂        | 123456       |
| NULL |    NULL | NULL            | NULL       |  NULL | 蒙牛         | 蒙牛牛奶制造厂        | 123456       |
+------+---------+-----------------+------------+-------+--------------+-----------------------+--------------+

组合查询

MySQL允许执行多个查询(多条 SELECT 语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)
下面语句等同于SELECT * FROM product WHERE vend_id = 1 OR price > 3

mysql> SELECT * FROM product WHERE vend_id = 1
    -> UNION
    -> SELECT * FROM product WHERE price > 3;
+----+---------+-----------------+------------+-------+
| id | vend_id | name            | valid_date | price |
+----+---------+-----------------+------------+-------+
|  1 |       1 | 旺旺碎冰冰      | 2020-03-20 |  1.50 |
|  2 |       1 | 旺仔牛奶        | 2020-03-26 |  2.50 |
|  3 |       1 | 旺仔QQ糖        | 2020-03-11 |  4.00 |
|  5 |    NULL | 糖果            | NULL       | 12.00 |
|  6 |    NULL | 饼干            | NULL       | 23.00 |
+----+---------+-----------------+------------+-------+

插 入 数 据

  • 插入完整的行

mysql> INSERT INTO product VALUES(NULL, NULL, '苹果', CurDate(), 5.8);
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO product(name, valid_date, price) VALUES('西瓜', CurDate(), 12.8);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM product;
+----+---------+-----------------+------------+-------+
| id | vend_id | name            | valid_date | price |
+----+---------+-----------------+------------+-------+
|  1 |       1 | 旺旺碎冰冰      | 2020-03-20 |  1.50 |
|  2 |       1 | 旺仔牛奶        | 2020-03-26 |  2.50 |
|  3 |       1 | 旺仔QQ糖        | 2020-03-11 |  4.00 |
|  4 |       2 | 可口可乐        | 2020-03-18 |  3.00 |
|  5 |    NULL | 糖果            | NULL       | 12.00 |
|  6 |    NULL | 饼干            | NULL       | 23.00 |
|  7 |    NULL | 苹果            | 2020-03-10 |  5.80 |
|  9 |    NULL | 西瓜            | 2020-03-10 | 12.80 |
+----+---------+-----------------+------------+-------+

若没有没有限定字段(如第一个例子),需要在VALUES对每个字段赋值,并且需要按表结构中字段的顺序赋值。若没有值,则为NULL,其中id是自增长的,所以我们也赋值NULL。
第二个例子在表名后的括号里明确地给出了列名。这种做法的优点是,即使表的结构顺序改变,此 INSERT 语句仍然能正确工作。

  • 插入多个行

mysql> INSERT INTO product(name, valid_date, price)
    -> VALUES('香蕉', CurDate(), 3.5),
    -> ('桃子', CurDate(), 4.5);
Query OK, 2 rows affected (0.05 sec)

更新和删除数据

  • 更新数据

mysql>  SELECT * FROM product;;
+----+---------+-----------------+------------+-------+
| id | vend_id | name            | valid_date | price |
+----+---------+-----------------+------------+-------+
|  1 |       1 | 旺旺碎冰冰      | 2020-03-20 |  1.50 |
|  2 |       1 | 旺仔牛奶        | 2020-03-26 |  2.50 |
|  3 |       1 | 旺仔QQ糖        | 2020-03-11 |  4.00 |
|  4 |       2 | 可口可乐        | 2020-03-18 |  3.00 |
|  5 |    NULL | 糖果            | NULL       | 12.00 |
|  6 |    NULL | 饼干            | NULL       | 23.00 |
|  7 |    NULL | 苹果            | 2020-03-10 |  5.80 |
|  9 |    NULL | 西瓜            | 2020-03-10 | 12.80 |
| 10 |    NULL | 香蕉            | 2020-03-10 |  3.50 |
| 11 |    NULL | 桃子            | 2020-03-10 |  4.50 |
+----+---------+-----------------+------------+-------+

mysql> UPDATE product SET valid_date = Date('2024-01-19'), price = 6.66 WHERE name = '桃子';

mysql> SELECT * FROM product WHERE name = '桃子';
+----+---------+--------+------------+-------+
| id | vend_id | name   | valid_date | price |
+----+---------+--------+------------+-------+
| 11 |    NULL | 桃子   | 2024-01-19 |  6.66 |
+----+---------+--------+------------+-------+

IGNORE 关键字 如果用 UPDATE 语句更新多行,并且在更新这些
行中的一行或多行时出一个现错误,则整个 UPDATE 操作被取消
(错误发生前更新的所有行被恢复到它们原来的值)。INSERT和DELETE也生效。

  • 删除数据

mysql> DELETE FROM product WHERE name = '苹果';
Query OK, 1 row affected (0.00 sec)

创建和操作表

  • 创建表

NOT NULL:插入时字段不能为空。
DEFULT:指定默认值。
PRIMARY KEY:指定主键。
AUTO_INCREMENT:自增长
ENGINE = InnoDB:指定InnoDB引擎创建和管理表。

mysql> CREATE TABLE customer
    -> (
    -> id int NOT NULL AUTO_INCREMENT,
    -> username varchar(255) NOT NULL,
    -> real_name varchar(255) NOT NULL,
    -> email varchar(100),
    -> salary decimal(10, 2),
    -> state int NOT NULL DEFAULT 1,
    -> PRIMARY KEY(id, username)
    -> )  ENGINE = InnoDB;

以下是几个需要知道的引擎:
1、InnoDB 是一个可靠的事务处理引擎,它不支持全文本搜索;
2、MEMORY 在功能等同于 MyISAM ,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);
3、MyISAM 是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。

  • 更新表

第一个例子为表添加字段。
第二个例子删除新增的字段。

mysql> ALTER TABLE customer ADD COLUMN phone char(10);

mysql> ALTER TABLE customer DROP COLUMN phone;

小心使用 ALTER TABLE 使用 ALTER TABLE 要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的列,可能不能删除它们。类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。

  • 删除表

mysql> DROP TABLE good;
  • 重命名表

mysql> RENAME TABLE customer TO customer2;

相关文章

  • mysql必知必会2

    2018年7月10日笔记 1.创建数据表和插入数据 创建表commodityType 表commodityType...

  • MySQL必知必会2

    创建计算字段 使用Concat()函数拼接字段 使用trim()删除左右侧多余的空格 RTrim()删除右边空格,...

  • MySql 创建和操纵表

    创建表 更新表 参考书籍: MySQL必知必会

  • mysql必知必会

    2018年7月13日笔记 1.数据库的介绍 1.1 什么是数据库 数据库是按照数据结构来组织、存储和管理数据的仓库...

  • Mysql必知必会

    1.表中的任何列都可以作为主键, 只要它满足以下条件:任意两行都不具有相同的主键值;每一行都必须具有一个主键值( ...

  • MySQL必知必会

    分页 方式1:select * from table order by id limit m, n;该语句的意思为...

  • 《Mysql必知必会》

    厚道的人运气都不会太差,我们永远相信会有美好的事情发生

  • 必知必会 - Mysql

    存储引擎InnoDB InnoDB 底层存储结构为B+树, B树的每个节点对应innodb的一个page,page...

  • Mysql必知必会!

    数据库 1. 数据库概述 1.1 数据库概述 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按...

  • MYSQL必知必会

    第一章:了解SQL 数据库概念、表、列和数据类型、行、主键 第二章:MYSQL简介 1、mysql是一种DBMS(...

网友评论

      本文标题:MySQL必知必会2

      本文链接:https://www.haomeiwen.com/subject/pwlpdhtx.html