加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_沈阳站长网 (https://www.024zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql从入门到优化(2)数据的增删改查操作总结

发布时间:2022-09-19 15:44:51 所属栏目:MySql教程 来源:
导读:  这篇是承接上一篇基础操作的文章的,在上一篇文章中主要介绍了以下内容:

  (1)数据库基本操作

  (2)数据表基本操作

  (3)约束相关操作

  (4)函数相关操作

  因此这篇文章
  这篇是承接上一篇基础操作的文章的,在上一篇文章中主要介绍了以下内容:
 
  (1)数据库基本操作
 
  (2)数据表基本操作
 
  (3)约束相关操作
 
  (4)函数相关操作
 
  因此这篇文章主要是从数据的增改删查角度来分析,其中查询是数据操作中最为麻烦的一种,但是这里给出一些常见的基本操作,关于其优化等等会在今后的文章中指出。感谢各位支持。
 
  一、插入数据
 
  1、向所有字段插入
 
  语法:
      INSERT INTO 表名(字段1,字段2,字段3......) VALUES(值1,值2,值3......);
  实例:
      mysql> create table stu(
      -> id int(11) primary key,
      -> name varchar(20),
      -> score float
      -> );
      Query OK, 0 rows affected (0.19 sec)
      
      mysql> insert into stu(id,name,score) values (2,"fdd",99.5);
      Query OK, 1 row affected (0.02 sec)
  描述:
      创建了一张stu表,然后插入了一条数据,其优点是可以插入多行数据
  2、向指定字段插入
 
  语法:
      INSERT INTO 表名(指定字段集合) VALUES(指定字段值);
  实例:
      mysql> alter table stu modify id int auto_increment;
      Query OK, 2 rows affected (0.47 sec)
      Records: 2  Duplicates: 0  Warnings: 0
  ?
      mysql> insert into stu(name,score) values("lisi",11.0);
      Query OK, 1 row affected (0.02 sec)
  描述:
      首先设置id为自增长的,这时候就可以不用写id,直接插入剩下的值即可
  二、修改数据
 
  当然,我们也可以根据条件进行修改数据,比如使用where进行筛选即可,但这里只给出一个最简单的。
 
  语法:
      UPDATE 表名 SET 字段1=值,字段2=值......;
  实例:
      mysql> update stu set name="java的架构师技术栈";
      Query OK, 3 rows affected (0.03 sec)
      Rows matched: 3  Changed: 3  Warnings: 0
  ?
      mysql> select * from stu;
      +----+---------------------------+-------+
      | id | name                      | score |
      +----+---------------------------+-------+
      |  1 | java的架构师技术栈        |  99.5 |
      |  2 | java的架构师技术栈        |  99.5 |
      |  3 | java的架构师技术栈        |    11 |
      +----+---------------------------+-------+
      3 rows in set (0.00 sec)    
  描述:
      将所有的字段name的值改为“java的架构师技术栈”
  三、删除数据
 
  同样可以根据where进行有条件的删除。
 
  语法:
      DELETE FROM 表名 [WHERE筛选] [ORDER BY筛选] [LIMIT筛选];
  实例:
      mysql> delete from stu where id=1;
      Query OK, 1 row affected (0.08 sec)
  ?
      mysql> select * from stu;
      +----+---------------------------+-------+
      | id | name                      | score |
      +----+---------------------------+-------+
      |  2 | java的架构师技术栈        |  99.5 |
      |  3 | java的架构师技术栈        |    11 |
      +----+---------------------------+-------+
      2 rows in set (0.00 sec)
  描述:
      删除id为1的数据,然后在查找一下。如果没有where筛选,就会删除所有数据。
  四、查询数据
 
  这个查询数据是最麻烦的,我们在这里给出一些常见的查询。
 
  1、查询所有字段和部分字段
 
  语法:
      SELECT * 或者 [字段名] FROM 表名;
  实例:
      mysql> select * from stu;
      +----+---------------------------+-------+
      | id | name                      | score |
      +----+---------------------------+-------+
      |  2 | java的架构师技术栈        |  99.5 |
      |  3 | java的架构师技术栈        |    11 |
      +----+---------------------------+-------+
      2 rows in set (0.00 sec)
  ?
      mysql> select name,score from stu;
      +---------------------------+-------+
      | name                      | score |
      +---------------------------+-------+
      | java的架构师技术栈        |  99.5 |
      | java的架构师技术栈        |    11 |
      +---------------------------+-------+
      2 rows in set (0.00 sec)
  2、使用distinct去除重复数据
 
  语法:
      SELECT DISTINCT 字段名 FROM 表名;
  实例:
      mysql> select distinct name from stu;
      +---------------------------+
      | name                      |
      +---------------------------+
      | java的架构师技术栈        |
      +---------------------------+
      1 row in set (0.03 sec)
  描述:
      去除重复的name字段
  3、使用limit指定查询结果的行数
 
  语法:
      SELECT  字段名 DROM 表名 LIMIT [n];
  实例:
      mysql> select * from stu limit 1;
      +----+---------------------------+-------+
      | id | name                      | score |
      +----+---------------------------+-------+
      |  2 | java的架构师技术栈        |  99.5 |
      +----+---------------------------+-------+
      1 row in set (0.00 sec)
  4、使用order by对结果进行排序
 
  语法:
      ORDER BY 字段名 [ASC|DESC];
  实例:
      mysql> select * from stu order by score desc;
      +----+---------------------------+-------+
      | id | name                      | score |
      +----+---------------------------+-------+
      |  2 | java的架构师技术栈        |  99.5 |
      |  1 | fdd                       |  88.5 |
      |  4 | lisi                      |  80.5 |
      |  3 | java的架构师技术栈        |    11 |
      +----+---------------------------+-------+
      4 rows in set (0.03 sec)
  描述:
      选择所有数据,并按照降序排列
  5、使用where进行条件查询
 
  (1)比较运算符
 
  mysql数据库优化视频教程_mysql数据库优化方面的经验_mysql优化教程
 
  (2)算术和逻辑运算符
 
  mysql优化教程_mysql数据库优化方面的经验_mysql数据库优化视频教程
 
  举俩例子,其他运算符用法类似:
 
  实例:
      mysql> select * from stu where id > 1 and score > 11;
      +----+---------------------------+-------+
      | id | name                      | score |
      +----+---------------------------+-------+
      |  2 | java的架构师技术栈        |  99.5 |
      |  4 | lisi                      |  80.5 |
      +----+---------------------------+-------+
      2 rows in set (0.03 sec)
  实例:
      mysql> select * from stu where name like "java%";
      +----+---------------------------+-------+
      | id | name                      | score |
      +----+---------------------------+-------+
      |  2 | java的架构师技术栈        |  99.5 |
      |  3 | java的架构师技术栈        |    11 |
      +----+---------------------------+-------+
      2 rows in set (0.02 sec)
  6、多表查询
 
  先给出两张表:
 
      A表
      id name
      1  张三
      2  李四
      3  王五
      
      B表
      id  a_id  class
      1   4     班级1
      2   2     班级2
  (1)内连接:只返回两个表都有,而且id相等的值
 
  语法:
      SELECT 字段集 FROM 表1 INNER JOIN 表2 ON 连接条件;
  实例:
      select A.name,B.class from A a  inner join B b on a.id=b.a_id
  结果:
      只会有一条记录:李四  班级2
  说明:
      只返回了A表和B表都有的数据
  (2)左连接:返回包括左表所有记录,还有和右表中相等的记录
 
  语法:
      SELECT 字段集 FROM 表1 LEFT JOIN 表2 ON 连接条件;
  实例:
      select a.name,b.job from A a  left join B b on a.id=b.A_id
  结果:
      张三 null   李四  班级2   王五  null
  说明:
      返回A表所有的数据,没有在B表匹配的直接用null
  (3)右连接:返回包括右表所有记录,还有和左表中相等的记录
 
  语法:
      SELECT 字段集 FROM 表1 LEFT JOIN 表2 ON 连接条件;
  实例:
      select a.name,b.job from A a  left join B b on a.id=b.A_id
  结果:
      张三 null   李四  班级2   王五  null
  说明:
      返回A表所有的数据,没有在B表匹配的直接用null
  7、子查询
 
  也就是查询里面套查询
 
  mysql> select * from stu
      -> where class_id in
      -> (select id from class
      -> where name="fdd"
      -> );
  这里面的用法太多了mysql优化教程,而且也太麻烦了。因此给出了这个最简单的例子。
 
  8、分组查询
 
  (1)使用group by分组
 
  语法:
      SELECT 字段名 [聚合函数] FROM 表名 GROUP BY 字段名  [ASC | DESC] ;
  实例:
      mysql> select name,cout(*) as totle
      -> from stu
      -> group by class_id;
  描述:
      查询所有在一个班级的同学姓名和人数
  (2)使用having设置条件
 
  语法:
      SELECT 字段名 [聚合函数] FROM 表名  HAVING 条件;
  实例:
      mysql> select name group_concat(name) as names
      -> from stu
      -> group by class_id
      -> having count(name) > 1;
  描述:
      根据班级分组,列出所有的同学,筛选条件是学生数量大于1
  9、正则表达式
 
  正则表达式是最灵活的一种,也是使用率比较高的一种。
 

(编辑:我爱制作网_沈阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!