增删改查(4)

插入记录(增)

列与值严格对应

插入基本语法一
insert into 表 values(值1,值2,值n);

插入基本语法二
insert into 表(字段1,字段2,字段n) values (值1,值2,值n);

基本语法1和基本语法2的区别是:

基本语法1的插入语句, 表中有多少个字段就必须要插入多少个值。一个不能多,
一个也不能少。若有默认值,不想传,可以写上null。基本语法2中,除非有必填字段必须要写入值外。 如果有默认值的不想写可以忽略不写。mysql会自动补主默认值。

基本语法2中,以user(id,username,sex)字段顺序为值的顺序。
假设有一张表为user表,我们对字段、字段说明、 类型和字段选填和必须状态进行说明。
表结构如下:

字段 id username email password sex
中文说明 编号 用户名 邮箱 密码 性别
类型说明 int varchar(50) varchar(60) varchar(32) tinyint
默认值说明 自增 必填 选填字段,默认值为kkcode@126.com 选填字段 必填字段

ID为自增的自段可以不用传入值,每插入一次这个字段的值会自动向上加1。有默认值和可为空的字段可不传

按照基本语法一写上表中的插入语句:
insert into user values(null,'kkcode','kkcode@126.com',null ,1);
按照基本语法二写上表中的插入语句:
insert into user(username,sex) values('kkcode',1);

以表user(username,sex)的插入顺序为准,基本语法二为更常用的用法

基本语法变形:一次插入多条记录

insert into user(username,password,sex)
values('黄晓明', 'abcdef', 1),
( 'baby', 'bcdeef', 0),
( '陈赫', '123456', 1),
('王宝强', '987654', 1);

删除记录(删)

基本语法
delete from 表 [where 条件];
示例
delete from user where id > 10;

测试过程中出现赃数据或项目上线前,需要把表记录清空。delete和truncate是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。

如果一个表中有自增字段,使用truncate table,这个自增字段将起始值恢复成1.

基本语法
TRUNCATE TABLE 表名;

示例
TRUNCATE TABLE user; # 示例说明 清空表的数据,并且让自增的id从1开始自增

【切记】

删除时一定要记住加上where条件, 不然会清空掉整个表的记录。删除重要数据前一定要备份、备份、备份

更新记录(修改)

基本语法
改那个表,修改哪些列值,修改那几行?
update 表名 set 字段1=值1,字段2=值2,字段n=值n where 条件
修改单个字段示例
update money set balance=balance-500 where userid = 15;
修改多个字段示例
update money set balance=balance-500,username='kkcode' where userid = 15;

同时对两个表进行更新,基本语法
update 表1,表2 set 字段1=值1,字段2=值2,字段n=值n where 条件

示例

update money m,user u m.balance=m.balance*u.age  where m.userid=u.id;
# 修改money,将money表的别名设置为m;
# user表的别名设置为u;将m表的余额改为m表的balance*
# 用户表的age。执行条件是:m.userid = u.id

查询记录(查)

我们定义了一个表结构,表名为money。

CREATE TABLE money (
id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL ,
balance FLOAT NOT NULL ,
province VARCHAR(20) NOT NULL ,
age TINYINT UNSIGNED NOT NULL ,
sex TINYINT NOT NULL) ENGINE = InnoDB CHARACTER SET utf8;

插入数据

insert into money (id,username,balance,province,age,sex) values
(1,'前端github',120.02,'湖北',29,1),
(2,'范冰冰',260.23,'山东',40,0),
(3,'黄晓明',150.86,'山东',40,1),
(4,'井柏然',810,'辽宁',27,1),
(5,'李冰冰',20.15,'黑龙江',43,0),
(6,'成龙',313,'山东',63,1),
(7,'杨幂',123,'北京',30,0),
(8,'刘诗诗',456,'北京',29,1),
(9,'柳岩',23.4,'湖南',36,0),
(10,'赵本山',3456,'辽宁',63,1),
(11,'汪峰',34.32,'北京',44,1),
(12,'郭德纲',212,'天津',43,1);

基础查询

select * from 表名;

查询结果如下

省略列值

select * from money;
+----+-----------+---------+-----------+-----+-----+
| id | username | balance | province | age | sex |
+----+-----------+---------+-----------+-----+-----+

指定字段查询

基本语法
select 字段 from 表;
示例
select id,username, balance from money;
查询结果如下

+----+----------+---------+
| id | username | balance |
+----+----------+---------+
|  1 | 前端github   |  120.02 |
|  2 | 范冰冰   |  260.23 |
|  3 | 黄晓明   |  150.86 |
|  4 | 井柏然   |     810 |
|  5 | 李冰冰   |   20.15 |
|  6 | 成龙     |     313 |
|  7 | 杨幂     |     123 |
|  8 | 刘诗诗   |     456 |
|  9 | 柳岩     |    23.4 |
| 10 | 赵本山   |    3456 |
| 11 | 汪峰     |   34.32 |
| 12 | 郭德纲   |     212 |
+----+----------+---------+
12 rows in set (0.00 sec)

查询单个字段不重复记录

基本语法
select distinct 字段 from 表;
示例
select distinct age money from money; //查询money表中年龄唯一的所有结果
查询结果如下

+-------+
| money |
+-------+
|    29 |
|    40 |
|    27 |
|    43 |
|    63 |
|    30 |
|    36 |
|    44 |
+-------+
8 rows in set (0.14 sec)

条件查询-where

基本语法
select 字段 from 表 where 条件;
示例
select * from money where age = 29;
查询结果如下

+----+----------+---------+----------+-----+-----+
| id | username | balance | province | age | sex |
+----+----------+---------+----------+-----+-----+
|  1 |   前端github  |  120.02 | 湖北     |  29 |   1 |
|  8 | 刘诗诗   |     456 | 北京     |  29 |   1 |
+----+----------+---------+----------+-----+-----+
2 rows in set (0.00 sec)

where后可接的条件:

1.比较运算符

>、<、>=、<=、!=等比较运算符;
in(m,n) //在[m,n]的集合内
in(100,500) // 在[100,500]的集合内,集合不是范围
between m and n //在[m,n]的范围内
between 100 and 500 //在[100,500]范围内

2.逻辑运算符

多个条件还可以使用 or , and ,not等逻辑运算符进行多条件联合查询

示例:查询所有字段 要求id小于10 并且province=’湖北’
select * from money where id <10 and province='湖北';
查询结果如下

----+-----------+---------+----------+-----+-----+
| id | username | balance | province | age | sex |
+----+-----------+---------+----------+-----+-----+
| 1 | 前端github | 120.02 | 湖北 | 29 | 1 |
+----+-----------+---------+----------+-----+-----+
1 row in set (0.00 sec)

结果集排序

select id,username,balance from money order by balance desc;

排序用到的关键词:

关键词===========说明
asc ==>升序排列,从小到大(默认)
desc==> 降序排列,从大到小

多字段排序

order by 后面可以跟多个不同的字段排序,并且排序字段的不同结果集的顺序也不同,如果排序字段的值一样,则值相同的 字段按照第二个排序字段进行排序。

select id,username, balance from money order by balance desc,age asc;
//查询money表中的id,username,balance字段,按照余额进行降序排序,若余额全都一样,则再使用age进行升
序排序

结果集限制

对于查询或者排序后的结果集,如果希望只显示一部分而不是全部,则可以使用 limit 关键字对结果集进行数量限制

【mysql概念性入门至此结束,多练习,融汇贯通后,再学习更深层次的mysql】

【欢迎关注,点赞支持】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值