Mysql基本操作

mysql的基本操作包括增、删、改、查,本书中前三章简单的介绍MySQL为何物,查是mysql中非常重要的功能,4-6章展示了mysql的查(查询——select)的简单实现,mysql的增(插入——insert)是第19章,改(更新——update)和删(删除——delete)是第20章,基本操作还包括21章表操作。

所以这篇文章归纳的是1-6,19-21章的笔记。

第一章 了解SQL

  • 主键

    • 含义:一列(或一组列),其值能够唯一区分表中每个行。
    • 习惯:
      • 不更新主键列中的值;
      • 不重用主键列的值;
      • 不在主键列中使用可能会更改的值。(例如,如果使用一个 名字作为主键以标识某个供应商,当该供应商合并和更改其 名字时,必须更改这个主键。)

第二章 MySQL简介

第三章 使用MySQL

连接

  1. mysql -u root -p
  • -u: 用户名
  • -p: 输入密码

补充:

  • -h: 主机地址
  • -P: 端口
  • mysql --help: 查看MySQL命令行选项

选择数据库

  1. use 数据库名

了解数据库和表

  1. show databases;

SHOW DATABASES;返回可用数据库的一个列表。

  1. show tables;

SHOW TABLES;返回当前选择的数据库内可用表的列表。

  1. SHOW COLUMNS FROM tablename;
  2. 示例:
  3. mysql> show columns from blog;
  4. +---------+--------------+------+-----+---------+----------------+
  5. | Field | Type | Null | Key | Default | Extra |
  6. +---------+--------------+------+-----+---------+----------------+
  7. | id | bigint(20) | NO | PRI | NULL | auto_increment |
  8. | name | varchar(255) | NO | | NULL | |
  9. | handle | varchar(255) | NO | | NULL | |
  10. | user_id | bigint(20) | YES | MUL | NULL | |
  11. +---------+--------------+------+-----+---------+----------------+
  12. 4 rows in set (0.01 sec)

SHOW也可以用来显示表列。

SHOW COLUMNS 要求给出一个表名。

DESCRIBE语句

MySQL支持用DESCRIBE作为SHOW COLUMNS FROM的一种快捷方式。换句话说,DESCRIBE customers;是 SHOW COLUMNS FROM customers;的一种快捷方式。

推荐使用DESCRIBE customers这种方式!

  1. mysql> describe blog;
  2. +---------+--------------+------+-----+---------+----------------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +---------+--------------+------+-----+---------+----------------+
  5. | id | bigint(20) | NO | PRI | NULL | auto_increment |
  6. | name | varchar(255) | NO | | NULL | |
  7. | handle | varchar(255) | NO | | NULL | |
  8. | user_id | bigint(20) | YES | MUL | NULL | |
  9. +---------+--------------+------+-----+---------+----------------+

其他show语句:

  • SHOW STATUS,用于显示广泛的服务器状态信息

  • SHOW CREATE DATABASE和SHOW CREATE TABLE,分别用来显示创 建特定数据库或表的MySQL语句

    1. mysql> show create table blog;
    2. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    3. | Table | Create Table |
    4. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    5. | blog | CREATE TABLE `blog` (
    6. `id` bigint(20) NOT NULL AUTO_INCREMENT,
    7. `name` varchar(255) NOT NULL,
    8. `handle` varchar(255) NOT NULL,
    9. `user_id` bigint(20) DEFAULT NULL,
    10. PRIMARY KEY (`id`),
    11. KEY `fk_blog_user_id` (`user_id`),
    12. CONSTRAINT `fk_blog_user_id` FOREIGN KEY (`user_id`) REFERENCES `jhi_user` (`id`)
    13. ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 |
    14. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    15. 1 row in set (0.01 sec)
  • SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限

  • SHOW ERRORS和SHOW WARNINGS,用来显示服务器错误或警告消息。

  • 执行命令 HELP SHOW;显示允许的SHOW语句

第四章 检索数据

检索单个列

  1. -- 检索products表中的prod_name
  2. SELECT prod_name FROM products;

检索多个列

  1. -- 检索products表中的prod_idprod_nameprod_price
  2. SELECT prod_id, prod_name, prod_price FROM products;

检索所有列(使用*通配符)

  1. --检索products表中的所有列
  2. SELECT * FROM products;

检索不同的行(使用DISTINCT关键字)

SELECT返回所有匹配的行。但是,如果你不想要每个值每次都出现,怎么办?

解决办法是使用DISTINCT关键字,顾名思义,此关键字指示MySQL只返回不同的值。

  1. -- DISTINCT关键字必须直接放在列名的前面,不能部分使用DISTINCTDISTINCT关键字应用于所有列而不仅是前置它的列。
  2. SELECT DISTINCT vend_id FROM products;

示例:

  1. mysql> select * from blog;
  2. +----+-------------------------+------------------------------------+---------+
  3. | id | name | handle | user_id |
  4. +----+-------------------------+------------------------------------+---------+
  5. | 1 | Integration | syndicate Sleek | NULL |
  6. | 2 | Chief Analyst | Savings Account disintermediate | NULL |
  7. | 3 | panel payment Group | Producer | NULL |
  8. | 4 | Executive open-source | generate Saint Martin | NULL |
  9. | 5 | Tuna modular systems | Canyon transmit | NULL |
  10. | 6 | Intranet | quantifying | NULL |
  11. | 7 | Accounts | deposit repurpose | NULL |
  12. | 8 | Multi-layered | Home Loan Account Balboa US Dollar | NULL |
  13. | 9 | Plastic Diverse Dynamic | JBOD New Zealand Buckinghamshire | NULL |
  14. | 10 | payment | website | NULL |
  15. | 11 | 罗翔说刑法 | admin | 3 |
  16. | 12 | 法外狂徒张三 | user | 4 |
  17. | 13 | 法外狂徒张三 | user | 4 |
  18. +----+-------------------------+------------------------------------+---------+

如上,最后是有两行是重复的,如果我不想得到重复的数据:

  1. mysql> select distinct name from blog;
  2. +-------------------------+
  3. | name |
  4. +-------------------------+
  5. | Integration |
  6. | Chief Analyst |
  7. | panel payment Group |
  8. | Executive open-source |
  9. | Tuna modular systems |
  10. | Intranet |
  11. | Accounts |
  12. | Multi-layered |
  13. | Plastic Diverse Dynamic |
  14. | payment |
  15. | 罗翔说刑法 |
  16. | 法外狂徒张三 |
  17. +-------------------------+
  18. 12 rows in set (0.00 sec)

限制显示结果(使用limit关键字)

  1. -- 返回不多于5
  2. SELECT prod_name FROM products LIMIT 5;
  3. -- 返回从第5行开始的5
  4. SELECT prod_name FROM products LIMIT 5,5;

示例:

  1. mysql> select name from blog limit 10;
  2. +-------------------------+
  3. | name |
  4. +-------------------------+
  5. | Integration |
  6. | Chief Analyst |
  7. | panel payment Group |
  8. | Executive open-source |
  9. | Tuna modular systems |
  10. | Intranet |
  11. | Accounts |
  12. | Multi-layered |
  13. | Plastic Diverse Dynamic |
  14. | payment |
  15. +-------------------------+
  16. 10 rows in set (0.00 sec)
  17. mysql> select name from blog limit 5,5;
  18. +-------------------------+
  19. | name |
  20. +-------------------------+
  21. | Intranet |
  22. | Accounts |
  23. | Multi-layered |
  24. | Plastic Diverse Dynamic |
  25. | payment |
  26. +-------------------------+
  27. 5 rows in set (0.00 sec)

检索出来的第一行为行0,因此LIMIT 1,1检索出来的是第二行而不是第一行 MySQL 5 支持LIMIT的另一种替代语法 LIMIT 4 OFFSET 3为从行3开始取4行,同LIMIT 3,4

使用完全限定的表名

  1. SELECT products.prod_name FROM products;
  2. SELECT products.prod_name FROM book.products;

第五章 排序数据

order by

  1. ELECT prod_name
  2. FROM products
  3. ORDER BY prod_name;

按多个列排序

  1. SELECT prod_id, prod_price, prod_name
  2. FROM products
  3. ORDER BY prod_price, prod_name;

对于上述例子中的输出,仅在多个行具有相同的prod_price 值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。

指定排序方向

默认升序排序,降序使用DESC关键字

  1. SELECT prod_id, prod_price, prod_name
  2. FROM products
  3. ORDER BY prod_price DESC;

升序关键字ASC,可省略

如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。

  1. SELECT prod_id, prod_price, prod_name
  2. FROM products
  3. ORDER BY prod_price DESC, prod_name DESC;

找出一列中最高或最低的值

ORDET BY 与 LIMIT 的组合,能够找出一个列中最高或最低的值

  1. SELECT prod_proce FROM products
  2. ORDER BY prod_price DESC LIMIT 1;

给出ORDER BY句子时,应保证位于FROM句子之后,如果使用LIMIT,应位于ORDER BY之后。

第六章 过滤数据

使用WHERE子句

  1. -- 返回prod_price2.50的行
  2. SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50

在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误

WHERE子句操作符

符号 说明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定的两个值之间

使用示例

检查单个值

返回prod_name为Fuses的一行(匹配时默认不区分大小写)

  1. SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses';

列出小于10美元的所有产品

  1. SELECT prod_name, prod_price FROM products WHERE prod_price < 10;

列出小于等于10美元的所有产品

  1. SELECT prod_name, prod_price FROM products WHERE prod_price <= 10;

不匹配检查

列出不是1003的所有产品

  1. SELECT vend_id, prod_name FROM products WHERE vend_id <> 1003;
  2. -- 或者
  3. SELECT vend_id, prod_name FROM products WHERE vend_id != 1003;

范围值检查

检索价格在5-10美元之间的所有产品

  1. SELECT prod_name, prod_price FROM products
  2. WHERE prod_price BETWEEN 5 AND 10;

空值检查

返回价格为空的所有产品

  1. SELECT prod_name FROM products WHERE prod_price IS NULL;

第十九章 插入数据

增删改查中的增功能就是insert,你可以使用insert完成如下操作:

  • 插入完整的行

  • 插入行的一部分

  • 插入多行

  • 插入某些查询的结果

插入完整的行

  1. INSERT INTO Customers
  2. VALUES(NULL,
  3. 'Pep E. LaPew',
  4. '100 Main Street',
  5. 'Los Angles',
  6. 'CA',
  7. '90046',
  8. 'USA',
  9. NULL,
  10. NULL);

语法简单但不安全。更安全的方法为:

  1. INSERT INTO customers(cust_name,
  2. cust_address,
  3. cust_city,
  4. cust_state,
  5. cust_zip,
  6. cust_country,
  7. cust_contact,
  8. cust_email)
  9. VALUES('Pep E. LaPew',
  10. '100 Main Street',
  11. 'Los Angeles',
  12. 'CA',
  13. '90046'
  14. 'USA'
  15. NULL,
  16. NULL);

安全体现在写了列名,插入的数据会根据列名填充。

如下操作填充的结果与上面代码相同,但它的填充次序可以不一样,这就是安全的体现:

  1. INSERT INTO customers(cust_name,
  2. cust_contact,
  3. cust_email,
  4. cust_address,
  5. cust_city,
  6. cust_state,
  7. cust_zip,
  8. cust_country)
  9. VALUES('Pep E. LaPew',
  10. NULL,
  11. NULL,
  12. '100 Main Street',
  13. 'Los Angles',
  14. 'CA',
  15. '90046',
  16. 'USA');

补充: INSERT语句一般不会产生输出。

插入多个行

  1. INSERT INTO customers(cust_name,
  2. cust_address,
  3. cust_city,
  4. cust_state,
  5. cust_zip,
  6. cust_country)
  7. VALUES('Pep E. LaPew',
  8. '100 Main Street'
  9. 'Los Angeles',
  10. 'CA',
  11. '90046',
  12. 'USA');
  13. INSERT INTO customers(cust_name,
  14. cust_address,
  15. cust_city,
  16. cust_state,
  17. cust_zip,
  18. cust_country)
  19. VALUES('M. Martian',
  20. '42 Galaxy Way'
  21. 'New York',
  22. 'NY',
  23. '11213',
  24. 'USA');

太麻烦了,可以使用组合句,一般也是这样写

  1. INSERT INTO customers(cust_name,
  2. cust_address,
  3. cust_city,
  4. cust_state,
  5. cust_zip,
  6. cust_country)
  7. VALUES('Pep E. LaPew',
  8. '100 Main Street'
  9. 'Los Angeles',
  10. 'CA',
  11. '90046',
  12. 'USA'),
  13. ('M. Martian',
  14. '42 Galaxy Way'
  15. 'New York',
  16. 'NY',
  17. '11213',
  18. 'USA');

每组值用一对圆括号括起来,用逗号分隔。

插入检索出的数据

使用insert和select组合,可以将select出来的数据插入到表中。

  1. INSERT INTO customers(cust_id,
  2. cust_contact,
  3. cust_email,
  4. cust_name,
  5. cust_address,
  6. cust_city,
  7. cust_state,
  8. cust_zip,
  9. cust_country)
  10. SELECT cust_id,
  11. cust_contact,
  12. cust_email,
  13. cust_name,
  14. cust_address,
  15. cust_city,
  16. cust_state,
  17. cust_zip,
  18. cust_country
  19. FROM custnew;

为简单起见,这个例子在INSERT和 SELECT语句中使用了相同的列名。但是,不一定要求列名匹配。 事实上,MySQL甚至不关心SELECT返回的列名。它使用的是列的位置,因此SELECT中的第一列(不管其列名)将用来填充 表列中指定的第一个列,第二列将用来填充表列中指定的第二个列,如此等等。这对于从使用不同列名的表中导入数据是非常有用的。

第二十章 更新和删除数据

更新数据

可以使用update完成:

  • 更新表中特定行
  • 更新表中所有行
    • 尽量不要省略where子句,稍不注意就会更新表中所有的行。

update预计由3部分组成:

  • 要更新的表
  • 列名和它们的新值
  • 确定要更新行的过滤条件

如:客户10005现在有了电子邮件地址,因此他的记录需要更新:

  1. UPDATE customers
  2. SET cust_email = 'elmer@fudd.com'
  3. WHERE cust_id = 10005;

更新多个列的语法稍有不同:

  1. UPDARTE customers
  2. SET cust_name = 'The Fudds',
  3. cust_email = 'elmer@fudd.com'
  4. WHERE cust_id = 10005;

在更新多个列时,只需要使用单个SET命令,每个“列=值”对之间 用逗号分隔(最后一列之后不用逗号)。

IGNORE关键字:如果用UPDATE语句更新多行,并且在更新这些 行中的一行或多行时出一个现错误,则整个UPDATE操作被取消 (错误发生前更新的所有行被恢复到它们原来的值)。为即使是发生错误,也继续进行更新,可使用IGNORE关键字,如下所示:UPDATE IGNORE customers…

删除数据

使用DELETE语句

  • 从表中删除特定的行
  • 从表中删除所有的行
    • 尽量不要省略where子句,稍不注意就会删除表中所有的行。

示例:

  1. DELETE FROM customers
  2. WHERE cust_id = 10006;

更新和删除的指导原则

  • 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。
  • 保证每个表都有主键,尽可能像WHERE子句那样使用它(可以指定各主键、多个值或值的范围)。
  • 在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。
  • 使用强制实施引用完整性的数据库,这样MySQL将不允许删除具有与其他表相关联的数据的行。

第二十一章 创建和操纵表

  • 使用具有交互式创建和管理表的工具;
  • 表也可以直接用MySQL语句操纵。

表创建基础

使用CREATE TABLE创建表,注意事项:

  • 新表的名字,在关键字CREATE TABLE之后给出;

    • 指定的表名必须不存在,否则报错
    • 如果要创建一个新的同名表,必须手工删除原有表,然后在用创表语句重建它,CREATE TABLE是无法覆盖原有表的。
    • 可以在表名后面使用IF NOT EXISTS检查表是否已经存在。
  • 表列的名字和定义,用逗号分隔。
  1. CREATE TABLE customers
  2. (
  3. cust_id int NOT NULL AUTO_INCREMENT,
  4. cust_name char(50) NOT NULL,
  5. cust_address char(50) NULL,
  6. cust_city char(50) NULL,
  7. cust_state char(5) NULL,
  8. cust_zip char(10) NULL,
  9. cust_country char(50) NULL,
  10. cust_contact char(50) NULL,
  11. cust_email char(255) NULL,
  12. PRIMARY KEY (cust_id)
  13. ) ENGINE = InnoDB;

上面的建表语句要注意几个细节:

  • NULL/NOT NULL
  • AUTO_INCREMENT
  • PRIMARY KEY
  • ENGINE = InnoDB

使用NULL值

每个表列或者是NULL列或者是NOT NULL列,这种状态在创建时由表的定义规定

  1. CREATE TABLE orders
  2. (
  3. order_num int NOT NULL AUTO_INCREMENT,
  4. order_date datetime NOT NULL,
  5. cust_id int NOT NULL,
  6. PRIMARY KEY (order_num)
  7. ) ENGINE = InnoDB;

建表是可以混合NULL和NOT NULL列的,如上一个例子中就混有。

理解NULL

不要把NULL值与空串相混淆。NULL值是没有值,它不是空串。如果指定''(两个单引号,其间没有字符),这在NOT NULL列中是允许的。空串是一个有效的值,它不是无值。NULL值用关键字NULL而不是空串指定。

解释一下什么是空串:

空串(empty string):长度为零(即不含任何字符)的字符串。

主键

主键值必须唯一。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。

示例:创建多个列组成的主键

  1. CREATE TABLE orderitems
  2. (
  3. order_num int NOT NULL,
  4. order_item int NOT NULL,
  5. prod_id char(10) NOT NULL,
  6. quantity int NOT NULL,
  7. item_price decimal(8,2) NOT NULL,
  8. PRIMARY KEY (order_num, order_item)
  9. )ENGINE = InnoDB;

主键为其值唯一标识表中每个行的列。主键中只能使用不允许NULL值的列。允许NULL值的 列不能作为唯一标识。

AUTO_INCREMENT

AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。每次 执行一个INSERT操作时,MySQL自动对该列增量(从而才有这个关键字AUTO_INCREMENT),给该列赋予下一个可用的值。这样给每个行分配一个唯一的cust_id,从而可以用作主键值。

本文AUTO_INCREMENT讲得比较晦涩,我补充几点个人理解。

理解1:MySQL的中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能.

理解2:使用AUTO_INCREMENT的注意事项:

  • AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列
  • 设置AUTO_INCREMENT属性的数据列应该是一个正数序列
  • AUTO_INCREMENT数据列必须有唯一索引(索引是MySQL高级部分的知识,这里不展开),以避免序号重复(即是主键或者主键的一部分)。
  • AUTO_INCREMENT数据列必须具备NOT NULL属性。

理解3:当进行全表删除时,MySQL AUTO_INCREMENT会从1重新开始编号。

  • MySQL先把数据表里的所有数据和索引删除,然后重建数据表。
  • 如果想删除所有的数据行又想保留序列编号信息,可以用last_insert_id()获取刚刚自增过的值。

理解4:

auto_increment是用于主键自动增长的,从1开始增长,当你把第一条记录删除时,再插入第二跳数据时,主键值是2,不是1。

我们使用上面创建表的一个例子:

  1. CREATE TABLE orders
  2. (
  3. order_num int NOT NULL AUTO_INCREMENT,
  4. order_date datetime NOT NULL,
  5. cust_id int NOT NULL,
  6. PRIMARY KEY (order_num)
  7. ) ENGINE = InnoDB;

新增一条语句,不手动插入order_num

  1. mysql> insert into orders (order_date,cust_id) values ("2021-01-01",10086);
  2. Query OK, 1 row affected (0.01 sec)

看看结果:

  1. mysql> select * from orders;
  2. +-----------+---------------------+---------+
  3. | order_num | order_date | cust_id |
  4. +-----------+---------------------+---------+
  5. | 1 | 2021-01-01 00:00:00 | 10086 |
  6. +-----------+---------------------+---------+
  7. 1 row in set (0.00 sec)

再删除它

  1. mysql> delete from orders where cust_id =10086;
  2. Query OK, 1 row affected (0.00 sec)
  3. mysql> select * from orders;
  4. Empty set (0.00 sec)

再次插入,不手动插入order_num

  1. mysql> insert into orders (order_date,cust_id) values ("2021-01-02",10010);
  2. Query OK, 1 row affected (0.00 sec)

看看结果:

  1. mysql> select * from orders;
  2. +-----------+---------------------+---------+
  3. | order_num | order_date | cust_id |
  4. +-----------+---------------------+---------+
  5. | 2 | 2021-01-02 00:00:00 | 10010 |
  6. +-----------+---------------------+---------+
  7. 1 row in set (0.00 sec)

order_num变为2,说明每新增一条记录,字段值自动加 1。

我们可以使用last_insert_id()获取当前的值

  1. mysql> select last_insert_id();
  2. +------------------+
  3. | last_insert_id() |
  4. +------------------+
  5. | 2 |
  6. +------------------+
  7. 1 row in set (0.00 sec)

指定默认值

DEFAULT

  1. CREATE TABLE orderitems
  2. (
  3. order_num int NOT NUL,
  4. order_item int NOT NULL,
  5. prod_id char(10) NOT NULL,
  6. quantity int NOT NULL DEFAULT 1,
  7. item_price decimal(8,2) NOT NULL,
  8. PRIMARY KEY (order_num,order_item)
  9. ) ENGINE = InnoDB;

MySQL不允许使用函数作为默认值,只支持常量

引擎类型(属于mysql高级的知识,先了解即可)

  • InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索;
  • MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘) 中,速度很快(特别适合于临时表);
  • MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。 引擎类型可以混用。 外键不能跨引擎 混用引擎类型有一个大缺陷。外键(用于强制实施引用完整性)不能跨引擎,即使用一个引擎的表不能引用具有使用不同引擎的表的外键。

更新表

使用ALTER TABLE更改表的结构,必须给出以下信息:

  • 在ALTER TABLE之后给出要更改的表名(该表必须存在,否则将出错);
  • 所做更改的列表。

例:为表vendors新增一列vend_phone

  1. ALTER TABLE vendors
  2. ADD vend_phone CHAR(20);

例:删除刚增加的列

  1. ALTER TABLE vendors
  2. DROP COLUMN vend_phone;

为了对单个表进行多个更改,可以使用单条ALTER TABLE语句,每个更改用逗号分隔

复杂的表结构更改一般需要手动删除过程,它涉及以下步骤:

  • 用新的列布局创建一个新表;
  • 使用INSERT SELECT语句从旧表复制数据到新表。如果有必要,可使用转换函数和计算字段;
  • 检验包含所需数据的新表;
  • 重命名旧表(如果确定,可以删除它);
  • 用旧表原来的名字重命名新表;
  • 根据需要,重新创建触发器、存储过程、索引和外键。

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

删除表

  1. DROP TABLE customers2;

重命名表

  1. RENAME TABLE customers2 TO customers;
  2. #对多个表重命名
  3. RENAME TABLE backup_customers TO customers,
  4. backup_vendors TO vendors,
  5. backup_products TO products;

补充

  • 推荐使用navicat来学习mysql,就不用面对cmd的黑框框没有提示或补全,像本文一样一个一个字打。而且看表数据表结构也更加美观和直观。

  • MySQL的注释

      1. #单行注释可以使用"#"
      2. -- 单行注释也可以使用"--",注意与注释之间有空格
      3. /*
      4. 用于多行注释
      5. */

MySQL必知必会笔记-Mysql基本操作的更多相关文章

  1. 《mysql必知必会》读书笔记--存储过程的使用

    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

  2. MySQL必知必会(第4版)整理笔记

    参考书籍: BookName:<SQL必知必会(第4版)> BookName:<Mysql必知必会(第4版)> Author: Ben Forta 说明:本书学习笔记 1.了解 ...

  3. MySQL必知必会1-20章读书笔记

    MySQL备忘 目录 目录 使用MySQL 检索数据 排序检索数据 过滤数据 数据过滤 用通配符进行过滤 用正则表达式进行搜索 创建计算字段 使用数据处理函数 数值处理函数 汇总数据 分组数据 使用子 ...

  4. 《MySQL必知必会》学习笔记整理

    简介 此笔记只包含<MySQL必知必会>中部分章节的整理笔记.这部分章节主要是一些在<SQL必知必会>中并未讲解的独属于 MySQL 数据库的一些特性,如正则表达式.全文本搜索 ...

  5. MySQL必知必会复习笔记(1)

    MySQL必知必会笔记(一) MySQL必知必会是一本很优秀的MySQL教程书,并且相当精简,在日常中甚至能当成一本工作手册来查看.本系列笔记记录的是:1.自己记得不够牢的代码:2.自己觉得很重要的代 ...

  6. MySQL使用和操作总结(《MySQL必知必会》读书笔记)

    简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机——服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...

  7. 读《MySql必知必会》笔记

    MySql必知必会 2017-12-21 意义:记录个人不注意的,或不明确的,或不知道的细节方法技巧,此书250页 登陆: mysql -u root-p -h myserver -P 9999 SH ...

  8. 《MySQL必知必会》学习笔记——前言

    前言 MySQL已经成为世界上最受欢迎的数据库管理系统之一.无论是用在小型开发项目上,还是用来构建那些声名显赫的网站,MySQL都证明了自己是个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的 ...

  9. 《MySQL必知必会》[01] 基本查询

    <MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...

  10. mysql必知必会系列(一)

    mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...

随机推荐

  1. cf534D 枚举握手次数

    题意:       有n个学生进教室,先后顺序不同,每个人进去后会和当前在教室里的人握手,并且记录人数,而且当教室里有超过三个人的时候 他们有可能组队去参加比赛,后来的人看不到他们. 思路:     ...

  2. CVE-2018-0802:Microsoft office 公式编辑器 font name 字段二次溢出漏洞调试分析

    \x01 前言 CVE-2018-0802 是继 CVE-2017-11882 发现的又一个关于 font name 字段的溢出漏洞,又称之为 "第二代噩梦公式",巧合的是两个漏洞 ...

  3. Windows PE导出表编程2(重组导出表函数地址)

    本次要做的尝试是通过修改导出表的函数地址,实现程序功能的更改,实现这个最大的限制就是堆栈平衡问题. 先写一个DLL和EXE为了测试. DLL代码如下: 这样的话有两个导出函数(我们假设是一个密码验证之 ...

  4. 【python】Leetcode每日一题-寻找旋转排序数组中的最小元素

    [python]Leetcode每日一题-寻找旋转排序数组中的最小元素 [题目描述] 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组nums ...

  5. GDI编程基础

    窗口和视口 视口是基于设备的采用的是设备坐标(单位:像素),窗口是基于程序的采用的是逻辑坐标(单位:像素/毫米/厘米等). 在默认的映射模式下,视口是与窗口等同的.但是如果改变其映射模式,则其对应的单 ...

  6. 逆向工程初步160个crackme-------6

    工具:1. 按钮事件地址转换器E2A 2. PEID 3. Ollydbg 同样我们先来运行一下这个程序, ok按钮是被禁用的,有一个help按钮点击后弹出一个消息框:消息框显示提示信息为.本程序需要 ...

  7. Introduction to x265 Rate Control Algorithm

    The rate control in x265 is the same as x264's implementation, which is mostly empirical. It include ...

  8. Form-OCR & CSDNAPP初体验

    项目 内容 课程:北航2020春软件工程 博客园班级博客 作业:阅读并撰写博客回答问题 软件案例分析 我在这个课程的目标是 全面地评价一个软件 这个作业在哪个具体方面帮助我实现目标 明确软件开发过程中 ...

  9. .NET平台系列9 .NET Core 3.0 / .NET Core 3.1 详解

    系列目录     [已更新最新开发文章,点击查看详细] .NET Core 3.0 于 2019年9月23日发布,重点是增加对同时支持使用 Windwos Forms.WPF 和 Entity Frm ...

  10. Docker Swarm(十)Portainer 集群可视化管理

    前言 搭建好我们的容器编排集群,那我们总不能日常的时候也在命令行进行操作,所以我们需要使用到一些可视化的工具,Docker图形化管理提供了很多工具,有Portainer.Docker UI.Shipy ...