mysql 学习笔记(5)-- 增删改查
FROM 菜鸟教程: https://www.runoob.com/mysql/mysql-insert-query.html
1. 插入数据
方式一:
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
实例如下:
insert into runoob_tbl (runoob_title, runoob_author, submission_date)
VALUES
("myTest", "test", NOW());
PS: 实例中 NOW() 是一个 MySQL 函数,该函数返回日期和时间。
注意:
(1)如果数据是字符型,必须使用单引号或者双引号,如:"value"。
(2)如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号 ;。
(3)规定插入的列名时,可以不用加反引号。
添加多列 实例如下:
方式二:
如果所有列都需要添加数据,可以不规定列进行数据添加 ????
实例:
insert into runoob_tbl
values
(null,"test2", "me", NOW());
如果添加过主键自增(PRINARY KEY AUTO_INCREMENT)第一列在增加数据的时候,可以写为0或者null,这样添加数据可以自增, 从而可以添加全部数据,而不用特意规定那几列添加数据。
添加多列 实例如下:
insert into runoob_tbl
values
(0, 'test4', 'test',now()),
(0, 'test5', 'test',now()),
(0, 'test6', 'test',now());
2. 查询数据
1. 查询某个表的所有记录
select * from 表名;
2. mysql 查询数据通用的语法
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 你可以使用 WHERE 语句来包含任何条件。
- 你可以使用 LIMIT 属性来设定返回的记录数。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。(相当于mongodb中的skip)
2.1 WHERE 子句(筛选数据的条件)
1. 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 表中的字段值来读取指定的数据。
使用实例如下:
select * from runoob_tbl where runoob_author='test';
操作结果:
注意:使用 where 子句的字符串比较是不会区分大小写的,但可以通过 BINARY(或者小写的 binary) 关键字来设定where子句的字符串比较是区分大小写的。
使用实例如下:
(1)
select * from runoob_tbl where binary runoob_author='test';
操作结果:
(2)
select * from runoob_tbl where binary runoob_author='TEST';
操作结果:
2.2 like 子句 (like子句可以用来替代等号,通常用作模糊查询,等号则相当于精确查询)
like 的执行效率: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 子句来指定条件。
***************************** like 匹配/模糊匹配,会与 % 和 _ 结合使用 *****************************
'%a' // 以a结尾的数据 'a%' // 以a开头的数据 '%a%' // 含有a的数据 '_a_' // 三位且中间字母是a的 '_a' // 两位且结尾字母是a的 'a_' // 两位且开头字母是a的
***************************** 在 where like 的条件查询中,SQL 提供了四种匹配方式,如下:*****************************
- %:表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
- _:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。
- []:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个 ---- 使用的不是like, 而是regexp。
- [^] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
- 查询内容包含通配符时,由于通配符的缘故,导致我们查询特殊字符 “%”、“_”、“[” 的语句无法正常实现,而把特殊字符用 “[ ]” 括起便可正常查询。
实例1:
select * from test where name like 'zhang%';
实例2:
select * from test where name regexp 'zhang[1-9]';
2.3 where / group by / having
where:数据库中常用的是where关键字,用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。
group by: 对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。
having:用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。
执行顺序
select –>where –> group by–> having–>order by
3. 更新记录
语法:
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
- 你可以同时更新一个或多个字段。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以在一个单独表中同时更新数据。
实例:
update runoob_tbl set runoob_author='M' where runoob_id=10;
4. 删除记录
语法: (delete from 表名 from where 删除条件)
DELETE FROM table_name [WHERE Clause]
- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
- 你可以在 WHERE 子句中指定任何条件
- 您可以在单个表中一次性删除记录。
实例1:删除 runoob_tbl 数据表中 runoob_id为12的数据
delete from runoob_tbl where runoob_id=12;
实例2:删除 runoob_tbl 数据表中的所有数据
delete from runoob_tbl;
4.1 delete / drop / truncate 区别:
delete,drop,truncate 都有删除表的作用,区别在于:
- 1、delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了。
- 2、delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚,打个比方,delete 是发微信说分手,后悔还可以撤回,truncate 和 drop 是直接扇耳光说滚,不能反悔。
- 3、执行的速度上,drop>truncate>delete,打个比方,drop 是神舟火箭,truncate 是和谐号动车,delete 是自行车。