数据库-mysql数据操作
一:mysql 数据的插入
语法
以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
如果数据是字符型,必须使用单引号或者双引号,如:"value"。
MariaDB [test2]> desc student;
+--------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+----------------+
| stu_id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(10) | NO | | NULL | |
| age | int(11) | NO | | NULL | |
| sex | char(2) | NO | | F | |
+--------+----------+------+-----+---------+----------------+
4 rows in set (0.00 sec) MariaDB [test2]> insert into student (name,age,sex) values('shisanjun',23,'F');
Query OK, 1 row affected (0.00 sec)
二:MySQL 查询数据
语法
以下为在MySQL数据库中查询数据通用的 SELECT 语法:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[OFFSET M ][LIMIT N]
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 你可以使用 WHERE 语句来包含任何条件。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
- 你可以使用 LIMIT 属性来设定返回的记录数。
MariaDB [test2]> select * from student;
+--------+------------+-----+-----+
| stu_id | name | age | sex |
+--------+------------+-----+-----+
| 1 | shisanjun | 23 | F |
| 2 | shisanjun2 | 23 | F |
| 3 | shisanjun3 | 24 | F |
+--------+------------+-----+-----+
3 rows in set (0.00 sec) MariaDB [test2]> select * from student limit 2 offset 1; offset必须要和limit一起使用,而且limit在前端
+--------+------------+-----+-----+
| stu_id | name | age | sex |
+--------+------------+-----+-----+
| 2 | shisanjun2 | 23 | F |
| 3 | shisanjun3 | 24 | F |
+--------+------------+-----+-----+
2 rows in set (0.00 sec) MariaDB [test2]> select * from student offset 1; 报错了
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual
that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
MariaDB [test2]> select * from student limit 2 ,1; 表示从第2条后面开始查询1条
+--------+------------+-----+-----+
| stu_id | name | age | sex |
+--------+------------+-----+-----+
| 3 | shisanjun3 | 24 | F |
+--------+------------+-----+-----+
1 row in set (0.00 sec) MariaDB [test2]>
三:mysql where 子句
语法
以下是 SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法:
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
- 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
以下为操作符列表,可用于 WHERE 子句中
下表中实例假定 A 为 10, B 为 20
| 操作符 | 描述 | 实例 |
|---|---|---|
| = | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
| <>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
| > | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
| < | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
| >= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
| <= | 小于等于号,检测左边的值是否小于于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
如果我们想再 MySQL 数据表中读取指定的数据,WHERE 子句是非常有用的。
使用主键来作为 WHERE 子句的条件查询是非常快速的。
如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。
MariaDB [test2]> select * from student where sex='F';
+--------+------------+-----+-----+
| stu_id | name | age | sex |
+--------+------------+-----+-----+
| 1 | shisanjun | 23 | F |
| 2 | shisanjun2 | 23 | F |
| 3 | shisanjun3 | 24 | F |
+--------+------------+-----+-----+
四:MySQL UPDATE 查询
如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。.
语法
以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法:
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
- 你可以同时更新一个或多个字段。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以在一个单独表中同时更新数据。
当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。
MariaDB [test2]> update student set sex='M';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0 MariaDB [test2]> select * from student;
+--------+------------+-----+-----+
| stu_id | name | age | sex |
+--------+------------+-----+-----+
| 1 | shisanjun | 23 | M |
| 2 | shisanjun2 | 23 | M |
| 3 | shisanjun3 | 24 | M |
+--------+------------+-----+-----+
3 rows in set (0.00 sec)
五:MySQL DELETE 语句
你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录。
语法
以下是 SQL DELETE 语句从 MySQL 数据表中删除数据的通用语法:
DELETE FROM table_name [WHERE Clause]
- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
- 你可以在 WHERE 子句中指定任何条件
- 您可以在单个表中一次性删除记录。
当你想删除数据表中指定的记录时 WHERE 子句是非常有用的。
MariaDB [test2]> delete from student where name='shisanjun3';
Query OK, 1 row affected (0.00 sec)
六:MySQL LIKE 子句
语法
以下是 SQL SELECT 语句使用 LIKE 子句从数据表中读取数据的通用语法:
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
- 你可以在 WHERE 子句中指定任何条件。
- 你可以在 WHERE 子句中使用LIKE子句。
- 你可以使用LIKE子句代替等号 =。
- LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。
MariaDB [test2]> select * from student where name like 'shisanjun%';
+--------+------------+-----+-----+
| stu_id | name | age | sex |
+--------+------------+-----+-----+
| 1 | shisanjun | 23 | M |
| 2 | shisanjun2 | 23 | M |
+--------+------------+-----+-----+
2 rows in set (0.00 sec)
MySQL居然不区分大小写,可以使用binary将字符串先转换为二进制字符串
MariaDB [test2]> select name,count(name) from student group by name;
+------------+-------------+
| name | count(name) |
+------------+-------------+
| shisanjun | 4 |
| shisanjun2 | 1 |
| shisanjun3 | 2 |
+------------+-------------+
3 rows in set (0.00 sec)
可以使用binary将字符串先转换为二进制字符串,在进行比较
MariaDB [test2]> select name,count(name) from student group by binary name;
+------------+-------------+
| name | count(name) |
+------------+-------------+
| Shisanjun | 1 |
| shisanjun | 3 |
| shisanjun2 | 1 |
| shisanjun3 | 2 |
+------------+-------------+
4 rows in set (0.00 sec)
参考资料:http://www.linuxidc.com/Linux/2014-06/102870.htm
七:MySQL 排序
语法
以下是 SQL SELECT 语句使用 ORDER BY 子句将查询数据排序后再返回数据:
SELECT field1, field2,...fieldN from table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
- 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
- 你可以设定多个字段来排序。
- 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
- 你可以添加 WHERE...LIKE 子句来设置条件。
MariaDB [test2]> select * from student order by name;
+--------+------------+-----+-----+
| stu_id | name | age | sex |
+--------+------------+-----+-----+
| 1 | shisanjun | 23 | M |
| 6 | shisanjun | 25 | F |
| 7 | shisanjun | 26 | F |
| 2 | shisanjun2 | 23 | M |
| 4 | shisanjun3 | 24 | F |
| 5 | shisanjun3 | 25 | F |
+--------+------------+-----+-----+
6 rows in set (0.00 sec) MariaDB [test2]> select * from student order by name desc;
+--------+------------+-----+-----+
| stu_id | name | age | sex |
+--------+------------+-----+-----+
| 4 | shisanjun3 | 24 | F |
| 5 | shisanjun3 | 25 | F |
| 2 | shisanjun2 | 23 | M |
| 1 | shisanjun | 23 | M |
| 6 | shisanjun | 25 | F |
| 7 | shisanjun | 26 | F |
+--------+------------+-----+-----+
6 rows in set (0.00 sec)
八:MySQL GROUP BY 语句
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
GROUP BY 语法
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
使用 WITH ROLLUP
WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
例如我们将以上的数据表按名字进行分组,再统计每个人登录的次数:
可以使用coalesce来设置一个可以取代NUll的名称
MariaDB [test2]> select name,count(name) from student group by binary name with rollup;
+------------+-------------+
| name | count(name) |
+------------+-------------+
| Shisanjun | 1 |
| shisanjun | 3 |
| shisanjun2 | 1 |
| shisanjun3 | 2 |
| shisanjun3 | 7 |
+------------+-------------+
5 rows in set (0.01 sec) MariaDB [test2]> select name,count(name) from student group by name with rollup;
+------------+-------------+
| name | count(name) |
+------------+-------------+
| shisanjun | 4 |
| shisanjun2 | 1 |
| shisanjun3 | 2 |
| NULL | 7 |
+------------+-------------+
4 rows in set (0.00 sec) MariaDB [test2]> select coalesce(name,total),count(name) from student group by name with rollup;
ERROR 1054 (42S22): Unknown column 'total' in 'field list'
MariaDB [test2]> select coalesce(name,'total'),count(name) from student group by name with rollup;
+------------------------+-------------+
| coalesce(name,'total') | count(name) |
+------------------------+-------------+
| shisanjun | 4 |
| shisanjun2 | 1 |
| shisanjun3 | 2 |
| total | 7 |
+------------------------+-------------+
4 rows in set (0.00 sec)
九:MySQL NULL 值处理
我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符:
- IS NULL: 当列的值是 NULL,此运算符返回 true。
- IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
- <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。
关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 false,即 NULL = NULL 返回false 。
MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
数据库-mysql数据操作的更多相关文章
- 第二百八十六节,MySQL数据库-MySQL事务操作(回滚)
MySQL数据库-MySQL事务操作(回滚) 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. 举例:有这样一张表 从表里可以看出张 ...
- SQL学习笔记四之MySQL数据操作
阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: DML =========== ...
- python 基础 9.3 mysql 数据操作
#/usr/bin/python #coding=utf-8 #@Time :2017/11/21 0:20 #@Auther :liuzhenchuan #@File :mysql 数据操作 ...
- Python数据库之数据操作
一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...
- MySQL数据操作与查询笔记 • 【目录】
持续更新中- 我的大学笔记>>> 章节 内容 第1章 MySQL数据操作与查询笔记 • [第1章 MySQL数据库基础] 第2章 MySQL数据操作与查询笔记 • [第2章 表结构管 ...
- 数据库 -- mysql记录操作
一,概括 MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现 ...
- mysql 数据操作 目录
mysql 记录的增删改查 mysql 数据操作 单表查询 mysql 数据操作 多表查询
- spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置
spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...
- mysql 数据操作 单表查询 目录
mysql 数据操作 单表查询 mysql 数据操作 单表查询 简单查询 避免重复DISTINCT mysql 数据操作 单表查询 通过四则运算查询 mysql 数据操作 单表查询 concat()函 ...
随机推荐
- 解题:ZJOI 2015 幻想乡战略游戏
题面 神**所有点都爆int,我还以为我写出什么大锅了,不开long long见祖宗... 动态点分治利用点分树树高不超过log的性质,我们对每个点维护一个子树和,一个点分树子树和,一个点分树上父亲的 ...
- 解题:HEOI 2013 SAO
题面 不好讲,直接上式子吧=.= 设$dp[i][j]$表示考虑完$i$的子树后$i$的排名为$j$的方案数,然后转移类似树形背包,具体来说是(这里假设子树在$i$后选,其实反过来还用这个式子答案也是 ...
- 【组合数学】【P5216】DLS采花
Description DLS 有 \(N\) 个花田,每个花田里有 \(a_i\) 朵花. DLS 喜欢稀奇古怪的花田,他希望重新排列花田,然后去采花. 但 DLS 采花又有一个癖好:他会从左往右采 ...
- SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 E. 疯狂计数
1.改高精度 :float/double的精度为x位,小数部分最多x+x位(乘法和加法),整数部分<1000000*1000000/2=5 * 10^11 2.分成整数部分和小数部分分别存储,貌 ...
- error: Failed to start domain lb error: Failed to activate service 'org.freedesktop.machine1': timed out 报错的解决办法
能正常查看kvm虚拟机列表: virsh list 但在执行virsh start lb启动虚拟机时卡顿了好几秒,然后报以下错误: error: Failed to start domain lber ...
- linux(ubuntu) 安装 node.js
其实几个月之前我已经介绍过使用window版的nvm——wnvm了 1.先安装nvm 日常开发安装node通常会用nvm来安装,因为nvm可以帮我们管理好node的版本 我们通过git来把nvm下载到 ...
- 给Java新手的一些建议——Java知识点归纳(Java基础部分)
原文出处:CSDN邓帅 写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行 ...
- UITableViewCell的separatorInset属性
separatorInset这个属性是IOS7后才有的属性,所以需要判断一下,才能修改 if (IOS7_OR_LATER) { cell.separatorInset = UIEdgeInsetsZ ...
- 科学计算三维可视化---Mayavi入门(Mayavi介绍和安装)
Mayavi介绍 是基于VTK开发的可视化软件(更加高效),Mayavi完全由python编写,方便使用,而且可以使用python编写扩展,嵌入到用户程序中 安装要求 VTK >pip3 ins ...
- struct和typedef struct区别
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可 ...