MySQL-3.数据操作-CRUD

本文详细介绍了MySQL数据库的基本操作,包括插入数据时的注意事项、数据类型的匹配、默认值的使用、删除数据的delete、truncate和drop命令,以及更新和查询数据的方法,如使用LIKE和IN运算符进行条件查询和分页查询示例。
摘要由CSDN通过智能技术生成

 Create、Read、Update、Delete

3.1 插入数据-insert into(插入行)

insert into 表名 (可以省略)values (不可省略的内容)

mysql> insert into teacher (id, name, phone, address) values(1,'Frank', '188888888', 'ShangHai');
Query OK, 1 row affected (0.00 sec)

注意细节:

1.插入的数据应与字段的数据类型相同
2. 数据的长度应在列的规定范围内
3. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应
4. 字符和日期型数据应包含在单引号中
5. 列可以插入空值[前提是该字段允许为空]
6. insert into tab_name (列名..) values (),(),() 形式添加多条记录
7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
8. 默认值default的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
-- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给 null
-- 如果我们希望指定某个列的默认值,可以在创建表时指定
  • 数据的自动添加:NULL 

mysql> insert into teacher values(NUll,'Tom',NULL,NULL);
Query OK, 1 row affected (0.00 sec)

mysql> select * from teacher;
+----+-------+-----------+----------+
| id | name  | phone     | address  |
+----+-------+-----------+----------+
|  1 | Frank | 188888888 | ShangHai |
|  2 | Tom   | NULL      | NULL     |
+----+-------+-----------+----------+
  •  default的使用

mysql> insert into teacher values(NULL, 'Jerry',Null, default);
Query OK, 1 row affected (0.00 sec)

mysql> select * from teacher;
+----+-------+-----------+----------+
| id | name  | phone     | address  |
+----+-------+-----------+----------+
|  1 | Frank | 188888888 | ShangHai |
|  2 | Tom   | 100000000 | Nanjing  |
|  3 | Jerry | NULL      | 暂时未知 |
+----+-------+-----------+----------+
3 rows in set (0.00 sec)
  • 插入数据可以省略自增的字段值

mysql> insert into teacher (name, phone, address)values('Jerry',Null, default);
Query OK, 1 row affected (0.00 sec)

mysql> select * from teacher;
+----+-------+-----------+----------+
| id | name  | phone     | address  |
+----+-------+-----------+----------+
|  1 | Frank | 188888888 | ShangHai |
|  2 | Tom   | 100000000 | Nanjing  |
|  3 | Jerry | NULL      | 暂时未知 |
+----+-------+-----------+----------+
3 rows in set (0.00 sec)
  • 一次性插入多条数据:逗号分隔

mysql> insert into teacher values(NULL, 'TOM_1', NULL, default),(NULL, 'Jerry_1', NULL, default);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from teacher;
+----+---------+-----------+----------+
| id | name    | phone     | address  |
+----+---------+-----------+----------+
|  1 | Frank   | 188888888 | ShangHai |
|  2 | Tom     | 100000000 | Nanjing  |
|  3 | Jerry   | NULL      | 暂时未知 |
|  4 | TOM_1   | NULL      | 暂时未知 |
|  5 | Jerry_1 | NULL      | 暂时未知 |
+----+---------+-----------+----------+
5 rows in set (0.00 sec)

3.2 删除数据-delete from、truncate、drop(删行)

delete from 表名 where 选定的字段名称=你要删除的字段相应信息;

mysql> delete from teacher where id = 9;

// 条件删除
mysql> delete from teacher where id > 4;

// 删除表
mysql> drop table 表名;   // 完全删除,表不存在
mysql> delete from 表名;   // 数据删除(即删除所有记录),表结构存在

// 清空表
mysql> truncate table 表名;  // 数据删除,表结构存在

1.drop:删除内容和定义,释放空间,表的结构也删除了,即删除整个表;

   delete:删除内容、释放空间但不删除定义,但一行一行删除,效率低;

   truncate:删除内容、释放空间但不删除定义,类似销毁表后,在克隆一个完全一样的新的空表,速度快。

2. 对于自增的字段,delete表后再添加数据,id在原基础上增加,但truncate从1开始。

3. delete不能删除某一列的值,可使用Update设为null或""

4. 整列删除(包括字段):alter table 表名 drop 字段;

3.3 更新数据-update

update 表名 set 要修改的字段名=要修改成的数据 where 定位字段名=相应数据;

mysql> update teacher set name='Frank' where id=3;

 注意细节:

  • 更改多个数据用逗号分隔:

update 表名 set 要修改的字段名=要修改成的数据,要修改的字段名=要修改成的数据,··· where 定位字段名=相应数据

mysql> update teacher set name='Frank',phone=123456,address='ShangHai' where id = 3;
  • 条件更新:

updata 表名 set 要修改的字段名=要修改成的数据 where 定位字段名=相应数据 or 定位字段名=相应数据

mysql> update teacher set name='Frank' where id=1 or id=2;
  •  全部更新:没有where

mysql> update teacher set name='Tom';  // 会让所有数据的name为tom

 3.4 查询数据-select(查的是列)

select 要查询的字段名 from 表名;
SELECT DISTINCT 要查询的字段名 FROM 表名;  # DISTINCT可选,即是否对查询结果去重

mysql> select phone from teacher;
+--------+
| phone  |
+--------+
| NULL   |
| NULL   |
| 123456 |
+--------+
3 rows in set (0.00 sec)
  • 多个字段查询:

select 要查询的字段名,要查询的字段名··· from 表名

mysql> select name ,phone from teacher;
+------+--------+
| name | phone  |
+------+--------+
| Tom  | NULL   |
| Tom  | NULL   |
| Tom  | 123456 |
+------+--------+
3 rows in set (0.00 sec)
  • 全部查询:*

select * from 表名

mysql> select * from teacher;
+----+------+--------+----------+
| id | name | phone  | address  |
+----+------+--------+----------+
|  1 | Tom  | NULL   | 暂时未知 |
|  2 | Tom  | NULL   | 暂时未知 |
|  3 | Tom  | 123456 | ShangHai |
+----+------+--------+----------+
3 rows in set (0.00 sec)
  • 使用表达式对查询的列进行运算

# 统计每个学生的总分
SELECT `name`, (chinese+english+math) FROM student;
  • 使用 as 取别名

SELECT `name` AS '名字', (chinese + english + math) AS total_score
    FROM student;
  • order by 排序查询结果 

排序列,放在末尾
Asc:升序,默认
Desc:降序
  • 分组查询group by :对列进行分组查询,having 对分组后的结果进行过滤

GROUP by 用于对查询的结果分组统计, having 子句用于限制分组显示结果
# 显示每个部门的平均工资和最高工资
SELECT AVG(sal), MAX(sal) , deptno FROM emp GROUP BY deptno;

# 显示平均工资低于 2000 的部门号和它的平均工资
SELECT AVG(sal), deptno FROM emp GROUP BY deptno HAVING AVG(sal) < 2000;
  • 分页查询LIMIT

综合练习:

-- 请统计各个部门 group by 的平均工资 avg,
-- 并且是大于 1000 的 having,并且按照平均工资从高到低排序, order by
-- 取出前两行记录 limit 0, 2
SELECT deptno, AVG(sal) AS avg_sal
    FROM emp
        GROUP BY deptno
        HAVING avg_sal > 1000
        ORDER BY avg_sal DESC
        LIMIT 0,2;

3.5 where 子句

常用运算符:

LIKE:%表示0到多个字符,_表示单个字符 
# 查询英语分数在 80-90 之间的同学,betweenand是闭区间
SELECT * FROM student WHERE english BETWEEN 80 AND 90;

# 查询数学分数为 89,90,91 的同学
SELECT * FROM student WHERE math IN (89, 90, 91);

# 查询所有姓李的学生成绩(模糊查询)
SELECT * FROM student WHERE `name` LIKE '李%';

# 查询总分大于 200 分 并且 数学成绩小于语文成绩,的姓赵的学生
SELECT * FROM student
    WHERE (chinese + english + math) > 200 AND math < chinese AND `name` LIKE '赵%;

参考:http://t.csdnimg.cn/wdHJs 、韩顺平

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值