1 插入数据INSERT

以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:

  1. INSERT INTO table_name ( field1, field2,...fieldN )
  2. VALUES
  3. ( value1, value2,...valueN );

如果数据是字符型,必须使用单引号或者双引号,如:”value”。
以下实例中我们将向 runoob_tbl 表插入三条数据:

root@host# mysql -u root -p password;
Enter password:*******
mysql> use RUNOOB;
Database changed
mysql> INSERT INTO runoob_tbl 
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("学习 PHP", "菜鸟教程", NOW());
Query OK, 1 rows affected, 1 warnings (0.01 sec)
mysql> INSERT INTO runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("学习 MySQL", "菜鸟教程", NOW());
Query OK, 1 rows affected, 1 warnings (0.01 sec)
mysql> INSERT INTO runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("JAVA 教程", "RUNOOB.COM", '2016-05-06');
Query OK, 1 rows affected (0.00 sec)
mysql>

注意: 使用箭头标记 -> 不是 SQL 语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号 ;。
在以上实例中,我们并没有提供 runoob_id 的数据,因为该字段我们在创建表的时候已经设置它为 AUTO_INCREMENT(自动增加) 属性。 所以,该字段会自动递增而不需要我们去设置。实例中 NOW() 是一个 MySQL 函数,该函数返回日期和时间。
接下来我们可以通过以下语句查看数据表数据:

select * from runoob_tbl;

MySQL基本操作-增删改查 - 图1
INSERT 插入多条数据 :

INSERT INTO table_name  (field1, field2,...fieldN)  VALUES 
(valueA1,valueA2,...valueAN),(valueB1,valueB2,...valueBN),(valueC1,valueC2,...valueCN)......;

图片.png

2 删除数据DELETE

DELETE FROM table_name [WHERE Clause]
  • 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
  • 你可以在 WHERE 子句中指定任何条件
  • 您可以在单个表中一次性删除记录。

    以下实例将删除 runoob_tbl 表中 runoob_id 为3 的记录:

    mysql> use RUNOOB;
    Database changed
    mysql> DELETE FROM runoob_tbl WHERE runoob_id=3;
    Query OK, 1 row affected (0.23 sec)
    

    delete,drop,truncate 都有删除表的作用,区别在于:

  • 1、delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除

  • 2、delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚
  • 3、执行的速度上,drop>truncate>delete

图片.png

3 更新数据UPDATE

语法

UPDATE table_name SET 列名称=新值, field2=new-value2
[WHERE Clause]
  • 你可以同时更新一个或多个字段。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以在一个单独表中同时更新数据。

    当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。
    实例
    以下实例将更新数据表中 runoob_id 为 3 的 runoob_title 字段值:
    ```sql mysql> UPDATE runoob_tbl SET runoob_title=’学习 C++’ WHERE runoob_id=3; Query OK, 1 rows affected (0.01 sec)

mysql> SELECT * from runoob_tbl WHERE runoob_id=3; +—————-+———————+———————-+————————-+ | runoob_id | runoob_title | runoob_author | submission_date | +—————-+———————+———————-+————————-+ | 3 | 学习 C++ | RUNOOB.COM | 2016-05-06 | +—————-+———————+———————-+————————-+ 1 rows in set (0.01 sec)

**UPDATE替换某个字段中的某个字符**<br /> 当我们需要将字段中的特定字符串批量修改为其他字符串时,可已使用以下操作:  
```sql
UPDATE table_name SET field=REPLACE(field, 'old-string', 'new-string') 
[WHERE Clause]

图片.png

4 查询数据SELECT

4.1 基本语法

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
  • SELECT 命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 你可以使用 WHERE 语句来包含任何条件。
  • 你可以使用 LIMIT 属性来设定返回的记录数。
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
  • limit N,M : 相当于 limit M offset N , 从第 N 条记录开始, 返回 M 条记录

实例

select * from runoob_tbl;

MySQL基本操作-增删改查 - 图5

图片.png

4.2 简单查询语句

/*websites  表名   NAME alexa url country  字段*/
SELECT * FROM websites;                      /* 查询表所有数据 */

SELECT NAME FROM websites;                   /* 查询表字段数据 */

SELECT * FROM websites where name = "广西";   /* 查询表字段下条件数据 */

SELECT * from websites where name like "_o%"; /* 模糊查询表下数据 */

SELECT * FROM websites where id BETWEEN "1" AND "5";    /* 查询表下字段范围数据 */

SELECT * FROM websites WHERE name in ("广西","百度");    /* 查询表字段下固定条件数据 */

SELECT DISTINCT country FROM Websites;                  /* 查询去重值 */

SELECT * FROM Websites WHERE country = "CN" AND alexa > 50;  /*查询表下范围条件数据*/

SELECT * FROM Websites WHERE country = "USA" OR country="sh"; /* 查询表下条件不同值 */

SELECT * FROM Websites ORDER BY alexa;                      /* 查询表下值排序结果 */

SELECT * FROM Websites ORDER BY alexa DESC;                 /* 查询表下排序结果降序 */

SELECT * FROM Websites LIMIT 2;      /* 查询表下范围数据 */

SELECT name as zzz from websites;    /*别名查询表下数据*/

4.3 Mysql 的分页查询语句的性能分析

MySql 分页 sql 语句,如果和 MSSQL 的 TOP 语法相比,那么 MySQL 的 LIMIT 语法要显得优雅了许多。使用它来分页是再自然不过的事情了。

4.2.1 最基本的分页方式:

SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...

在中小数据量的情况下,这样的 SQL 足够用了,唯一需要注意的问题就是确保使用了索引。
举例来说,如果实际 SQL 类似下面语句,那么在 category_id, id 两列上建立复合索引比较好。

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10

4.2.2 子查询的分页方式

随着数据量的增加,页数会越来越多,查看后几页的 SQL 就可能类似:

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10

一言以蔽之,就是越往后分页,LIMIT 语句的偏移量就会越大,速度也会明显变慢。
此时,我们可以通过子查询的方式来提高分页效率,大致如下:

SELECT * FROM articles WHERE  id >=
 (SELECT id FROM articles  WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10