创建计算字段
-
使用
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_user
和sys_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;
网友评论