mysql 增删改查


mysql -uroot -p123456

create database db2 ;

use db2

create table sanguo(id int(2)zerofill,name char(20),sex enum('f','m'),country varchar(10))default charset=uft8;

insert into sanguo values(1,'曹操','m','魏国').......

1 where 条件子句
1定义 条件子句 ,一般配合查询,修改,删除 ,删改差。
2 语法
select * from 表名 where 条件;

环境准备
create table sanguoo(id int(2)zerofill,name char(20),sex enum('f','m'),country varchar(10))default charset=utf8;


insert into sanguoo values(1,'曹操','m','魏国'),(2,'小乔','f','吴国'),(3,'诸葛亮','m','蜀国'),(4,'貂蝉','f','东汉'),(5,'赵子龙','m','蜀国'),(6,'魏延','m','蜀国');


1查找 所有蜀国人的信息
select * from sanguoo where country='蜀国';
2 查找 女人的信息,只显示 姓名和性别;
select name,sex form sanguoo where sex='f';


2 update 修改语法
1语法
update 表名 set 字段名1=值1,字段名2=值2 where 条件字句;
2示例
1 把 曹操的国籍 改为蜀国,
update sanguoo set country='蜀国' where name ='曹操';
2 把魏延的性别改为 f,把国籍 改为 泰国;


update sanguoo set country='泰国', sex='f' where name='魏延';


3 把id号为2的记录 的名字 改为司马懿,性别改为男,国家改为魏国
update sanguoo set name='司马懿', country='魏国',sex='m' where id=2;




注意:
update sanguoo set name='赵云' where name='赵子龙';
如果 不加字句where 全部改成 赵云 



3 delete 删除操作
1语法
delete from 表名 where 条件子句
2示例
1删除所有泰国的人
delete from sanguoo where country='泰国';


2 删除 id 为4的人
delete from sanguoo where id=4;




注意:
1delete 语句后不加 where 子句 全部删除;
4 运算符操作(配合查询、修改 删除)


1数值比较
1运算符 =, !=, > , > =,  <,  <=,
2语法
查: select * from 表名 where 字段名 运算符 数字;
改: update 表名 set 字段名 = 值 where ....    ;
删:delete from 表名 where 字段名 运算符 数字;
3 示例
1查找 攻击力 大于等于 150 的英雄的名字和攻击力
select name,gongji from sanguo where gongji >=150;


2 把id为2 的英雄 的攻击力改为888;
update sanguo set gongji=888 where id=2;


3把防御力大于100的英雄 删除


delete from sanguo where fangyu>100;


2 字符比较
1 运算符 := ,!=
2语法  同 数值比较
3 示例
1查找蜀国的英雄信息
select *from sanguo where country ='蜀国';

2 把貂蝉的名字改为小乔
update sanguo set name='小乔' where name='貂蝉';




练习 
1查找 攻击力200的英雄 select *from sanguo where gongji=200;
2将赵云攻击力改为 666 防御改为88 update sanguo set gongji=666 where name='赵云';
3在表中插入一条记录 ,魏延 insert into sanguo values(10,'魏延',101,1,'蜀国'); 
4删除 表中名字 魏延的记录  delete from sanguo where name='魏延';


3逻辑比较
1运算符 :and or 
2 示例
1查找 攻击力大于200 的蜀国 英雄 的姓名和国家 攻击力select name,country,gongji from sanguo where gongji>200and country='蜀国';
2 将国家为吴国并且攻击力为 110的英雄的攻击力设置为100,防御力设置为60
update sanguo set gongji=100,fangyu=60 where country='吴国'and gongji=110;


3 查找名字是 小乔或者 魏国人
select *from sanguo where name='小乔'or country='魏国' ;


????select name='小乔' or country='魏国' from sanguo;

4 范围内比较  
1 运算符 between and ,in ,not in ,
2 语法 
字段名 between 值1 and 值2 
字段名 in (值1,值2,....)
字段名 not in(值1,值2,....)
3 示例
1找到 攻击力 在100到200 的英雄
select * from sanguo where gongji between 100 and 200;


2 找到 id 在1,3,5,7中的英雄 的id和姓名
select id ,name from sanguo where id in(1,3,5,7);

3 查找国家不是魏国和蜀国的英雄信息
select * from sanguo where country not in ('魏国','蜀国');
5 匹配空 非空
1空 :is null
2 非空 :is not null
3 示例
1 找名字为空值的英雄的 名字和国家 
select name ,country from sanguo where name is null;


select name ,country from sanguo where name is not null;


select * from sanguo where name is  not null;


select * from sanguo where name='';


注意:


1   null 和'' 不同 ,null 是空值 ,必须用is 或者is not 操作。
'' 是空字符串 用 = 或者 != 操作

练习:
select *from sanguo where id in(3,5,7)and gongji>150;

select name ,fangyu,country from sanguo where country not in ('蜀国','吴国')or fangyu>60;

update sanguo set fangyu =88 where country='吴国'and gongji between 1 and 100;

insert into sanguo values(99,'黄月英',200,90,'蜀国');

delete from sanguo where id =99;
6模糊比较
1语法
字段名 like 表达式
2 表达式
1 —:匹配单个字符
2 % :匹配0到多个字符
find . -name'demo*'
示例:
1select id ,name from sanguo where name like '_%_';
名字至少有两个字符的
2 select id ,name from sanguo where name like '%';
匹配所有的记录
3 select id,name from sanguo where name like'___';
匹配名字为三个的记录
4 select id ,name from sanguo where name like'赵%';
匹配 姓赵的
select * from sanguo where name like "___";

5 sql 高级操作
1 order by
1作用 :给查询的结果进行排序
2排序方式 : 
1 升序ASC
2 降序 DESC 
示例
1 按照英雄的攻击力 降序排列
select *from sanguo order by gongji desc;
2 按照英雄的防御力升序排列
select * from sanguo order by fangyu asc;
注意:
order by 为升序 默认
2limit 
1 作用
限制 显示查询记录的个数
2 用法
1 limit n --> 显示几条记录
2 limit m,n 
m 表示从第m条开始显示
n 表示显示n条
注意 :
m 的值是从0 开始计算的,3则表示从第4 条记录
示例:
1 查找 攻击力前三名的蜀国 的英雄 的姓名 和攻击力
select name,gongji from sanguo  where country='蜀国'order by gongji desc limit 3;

2 查找防御力 倒数第二名至 倒数第四名 的 英雄记录;
select *from sanguo fangyu order by fangyu  limit 1,3;
3 聚合函数
1 avg(字段名): 求字段的平均值
2sum(字段名):求字段的和
3 max(字段名):求字段的最大值
4 min(字段名):求字段的最小值
5count(字段名):统计该字段的记录的个数
示例:
1、统计一下sanguo表中一共有多少条记录
select count(*) from sanguo;
select id ,name,country
2 统计一下表中 id,name字段分别有多少条记录
select count(id),count(name)from sanguo;
#注释 空值null被统计,空字符串''不会被统计 
3 计算蜀国英雄的总攻击力
select sum(gongji) from sanguo where country='蜀国';
select sum(gongji) as ZGJL from sanguo where country='蜀国';
4 找到 攻击力最强的是多少?
select *from sanguo order by gongji  limit 0;
select max(gongji) as best from sanguo;
4 group by
1作用: 给查询的结果进行分组
示例:
1 查询 sanguo 表中一共有几个国家
select country ,name from sanguo group by country ,name;
注意:
group by 后的字段名必须要为 select 之后的字段名
2计算所有国家的平均攻击力;
select country,avg(gongji) from sanguo group by country;
注意:
1 group by 后的字段名 必须要为select 之后的字段名
2 group by 处理的是 group by 之后的所有字段,如果查询 字段和group by 之后的 字段不一致,则必须要对 该字段值 做聚合处理(聚合函数)

5 distinct
1作用 
不显示 字段的重复值
示例 
1sanguo 表中 一共有多少个国家
select distinct country from sanguo;
select country from sanguo group by country;
注意:
1distinct 处理的是 distinct 与from 之间的所有字段,所有字段必须全部相同才能去重
2 distinct 不能对任何字段做聚合处理
6 查询表记录时 做数学运算
1 运算符
+ - * / %
2select id,name,country ,gongji*10 as xgj from sanguo;
3 查询 显示时 所有英雄的防御力+5
select *, gongji+5 from sanguo;
6 表操作小结
修改表记录 (行) 修改表字段 (列)
添加 insert into 表名 values.. alter table 表名 add
修改 update 表名 set.. alter table 表名 modify
删除 delete from 表名.. alter table 表名 drop 
查询  select *from 表名.. 
7 约束
1 作用
为了保证数据的完整性,一致性 ,有效性 的规则 可以限制无效的数据插入到 数据表里面


2 约束分类
1默认约束 default 
create table t1(id int,name char(20),age tinyint unsigned,score int(11));

insert into t1(id,name) values(1,'bob');
create table t2 (id int,name char(20),sex enum('boy','girl','secret')default 'secret',age int);
insert into t2(id,name)values(1,'lucy');
2非空约束 not null
create table t3(id int not null,name char(20));
insert into t3(name) values ('zhangsan ');
insert into t3 (id) values (1);
3 主键约束 primary key

1 规则
1一个表中 只能有一个主键(primary)字段
2对应字段的值 不允许重复 而且不能为空 not null
3 主键字段 的key 标志为 pri
4 把表中 能够唯一把标识一条记录的字段设置为 主键,通常把 表中记录 编号 的字段 设置为主键
2 创建主键(primary key)
1 在创建表的时候 创建主键
示例:
create table t4(id int primary key,name varchar(15),sex enum('boy','girl')default 'girl');
insert into t4 values(1,'lisi','boy');
create table t5(id int,name char(30),likes set('girl','study','python','mysql'),primary key(id));
2 在已有表中添加 主键限制
语法:alter table 表名 add primary key(字段名);
alter table sanguo add primary key(id);
3 删除主键限制
语法:
alter table 表名 drop primary key;
alter table sanguo drop peimary key;
select * from sanguo;复合主键
3 自增长属性 auto_increment
通常和主键一起配合使用
1 在创建表时添加 自增长属性
create table t6(id int primary key auto_increment,name char(20),age tinyint unsigned);
insert into t6(name,age)values ('diaochan',25);
insert into t6(name,age)values ('daqiao',28);
2 在已有表中 添加自增长属性
语法
alter table 表名 modify 字段名 数据类型 primary key auto_increment;
4 唯一约束 unique key
1使用规则
1 一个表里面可以有多个unique 字段
2 unique 字段的值 不允许重复,但可以为空
3 unique 的key 标志是 uni
4 
2 创建唯一约束
1 在创建表时 创建唯一约束
方式1
create table t7(id int unique,name char(15));
方式2
create table t8(id int,name char(15),unique(id,name));
unique name 
5 外键约束 foreign key


































































































































































































































































































































































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值