mysql basic mariadb 添加、删除、更改和检查表中的数据
复习:
查看表:show tables; 创建表:create table 表名(字符类型); 删除表:drop table 表名;
对表的结构进行增删改查:
查看表结构:desc 表名;修改表-添加字段:alter table 表名;
修改表-修改字段:不重命名版:alter table 表名 modify 列名 类型及约束;
修改表-修改字段:重命名版:alter table 表名 change 原名 新名 类型及约束;
修改表-删除字段:alter table 表名 drop 列名;
一、增加表中的数据(insert)
insert语句的语法:insert into tablename(字段1名称,字段2名称,...) values(字段1值,字段2值,...)
1、全列插入
--insert into 表名 values(..) --主键字段 可以用0 null default 来站位 例子:向test表中插入一条信息(数据与字段要一一对应) MariaDB [ren]> insert into test values ('谢霆锋',188,38,1); Query OK, 1 row affected (0.01 sec) MariaDB [ren]> select * from test; +-----------+------+------+------+ | name | high | age | id | +-----------+------+------+------+ | 任彦忠 | NULL | 0 | NULL | | 哈哈 | NULL | 66 | NULL | | 胡歌 | NULL | 38 | NULL | | 谢霆锋 | 188 | 38 | 1 | +-----------+------+------+------+ 4 rows in set (0.00 sec)
2、部分插入(主键不能为空)
MariaDB [ren]> insert into test (name,age) values ('张一山',26); Query OK, 1 row affected (0.00 sec) MariaDB [ren]> select * from test; +-----------+------+------+------+ | name | high | age | id | +-----------+------+------+------+ | 任彦忠 | NULL | 0 | NULL | | 哈哈 | NULL | 66 | NULL | | 张一山 | NULL | 26 | NULL | | 胡歌 | NULL | 38 | NULL | | 谢霆锋 | 188 | 38 | 1 | +-----------+------+------+------+ 5 rows in set (0.00 sec)
3、部分插入多条记录
MariaDB [ren]> insert into test (name,age) values ('杨紫',20),('老毕',11);
4、另一种插入数据的语法
insert into tablename set 字段1名称=字段1值,字段2名称=字段值
MariaDB [ren]> insert into test set name='小磐',age=20,id=2;
使用set的方式插入数据时,insert语句中字段的顺序可以与表中的字段顺序不同,而第一种语法中,字段顺序必须与表中的字段顺序相同。
5、aql_mode的模式:
ANSI:宽松模式,对插入数据进行校验,如果不符合定义类型 或长度,对数值截断保存,报警告信息,默认模式;
STRICT_TRANS_TABLES:只在事务型表中进行严格限制;
STRICT_ALL_TABLES:对所有表进行严格限制;
TRADITIONAL:严格模式,当插入数据时,进行数据的严格校验,错误的数据将不能被插入,报error错误。用于事务时,会进行事务的回滚,官方提醒我们说,如果我们使用的存储引擎是非事务型的存储引擎(比如myisam),当我们使用这种模式时,如果执行非法的插入或更新数据操作时,可能会出现部分完成的情况。
二、删除表中的数据(delete)
删除数据需要通过where子句给定删除的范围
1、物理删除
delete from 表名 where 条件
MariaDB [ren]> delete from test where name='哈哈';
2、模糊删除(不建议使用)
MariaDB [ren]> delete from test where name rlike '.*彦*';
like:like的内容不是正则,而是通配符。eg:like "%12__";A like '%abc%' or A like '%cba%'
rlike:rlike的内容可以是正则。(需要转义)eg:rlike ".*12.*" ;A rlike '.*(abc|cba).*'
3、从test表中找出age>30的数据行,然后将这些行按照age进行降序排列,排列后删除第一个
delete from test where age > 30 order by age desc limit 1;
4、清空表数据
truncate [table] 表名; #无法恢复数据,并且清空自增 delete from 表名; #在一定条件下可以恢复数据,不会清除自增
5、逻辑删除
用一条字段来表示这条信息是否已经不能再使用了
-- 给test表添加一个is_delete字段 bit 类型 alter table test add is_delete bit default 0;
三、修改表中的数据(update)
修改数据也需要通过where子句给定修改的范围
update 表名 set 列1=值1, 列2=值2... where 条件;
1、如果不加where,则是修改的表中所有记录的该字段的数据
MariaDB [ren]> update test set age=30; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 MariaDB [ren]> select * from test; +-----------+------+------+------+ | name | high | age | id | +-----------+------+------+------+ | 张柏芝 | 177 | 30 | 3 | | 王菲 | 177 | 30 | 2 | | 谢霆锋 | 188 | 30 | 1 | +-----------+------+------+------+ 3 rows in set (0.00 sec)
2、修改一个字段的值
MariaDB [ren]> update test set high=180 where id=3;
3、修改多个字段的值
MariaDB [ren]> update test set high=180,name='李晓丽' where id=3;
四、查询数据(select)(条件,排序,聚合函数,分组,分页)
创建表并写入数据:
--创建学生表 create table students ( id int unsigned not null auto_increment primary key, name varchar(20) default '', age tinyint unsigned default 0, high decimal(5,2), gender enum('男', '女', '中性', '保密') default '保密', cls_id int unsigned default 0, is_delete bit default 0 );
--创建班级表 create table classes( id int unsigned auto_increment primary key not null, name varchar(20) not null );
--往students表里插入数据 insert into students values (0,'小明',18,180.00,1,1,0), (0,'小月月',19,180.00,1,2,0), (0,'彭于晏',28,185.00,1,1,0), (0,'刘德华',58,175.00,1,2,0), (0,'黄蓉',108,160.00,2,1,0), (0,'凤姐',44,150.00,4,2,1), (0,'王祖贤',52,170.00,2,1,1), (0,'周杰伦儿',34,null,1,1,0), (0,'程坤',44,181.00,1,2,0), (0,'和珅',55,166.00,1,2,0), (0,'刘亦菲',29,162.00,2,3,0), (0,'金星',45,180.00,3,4,0), (0,'静香',18,170.00,2,4,0), (0,'郭靖',22,167.00,1,5,0), (0,'周杰',33,178.00,1,1,0), (0,'钱小豪',56,178.00,1,1,0), (0,'谢霆锋',38,175.00,1,1,0), (0,'陈冠希',38,175.00,1,1,0);
--向classes表里插入数据 insert into classes values (0, '云唯_01期'),(0, '云唯_02期');
(一)简单查询
1、查询所有列
--select * from 表名; select * from students;
2、查询制定列
select id,name from students;
3、使用as给字段起别名
select id,name as '姓名', age, high, gender from students;
4、通过表名字段查询
select students.name from students;
5、给表起别名
select s.id,s.name,s.age from students as s;
6、消除重复行
-- distinct(/dɪ'stɪŋkt/)有区别的,独特的,明显的 select distinct age from students;
(二)条件查询
1、一定条件查询
select * from where id=5;
select * from where age !=38;
2、比较运算符
-- 查询年纪大于18岁的信息 select * from students where age > 18;
--18岁到28岁之间(and) select * from students where age >= 18 and age =< 28; select * from students where age between 18 and 28
--不在18岁到28岁之间(and)
select * from students where age < 18 or age > 28;
select * from students where age not between 18 and 28;
--在18岁以上或者身高180以上的人(or) select * from students where age > 18 or high > 180;
(三)模糊查询
-- like(rlike) -- % 替代1个或者多个甚至是没有 --_表示一个字符 -- 查询姓名中有‘小’的所有名字 select * from students where name like '%小%'; -- 查询两个字人的名字 select * from students where name like '__'; -- 查询至少有2个字的名字 select * from students where name like '%__%'; --查询name字段以t开头的所有数据 select * from students where name rlike '^t.*';
(四)范围查询
-- in (1,3,8)表示在一个非连续的范围内 -- 查询 年纪为18和34的人 select * from students where age in (18, 34); --查询 年龄在17岁到34岁之间的信息 select * from students where age between 17 and 34; --查询 年纪不在18到34岁的信息 select * from students where age not between 17 and 34;
(五)空判断
-- 判断is null -- 查询身高为空的信息 select * from students where high is null; -- 判断非空is not null select * from students where high is not null;
(六)排序
-- order by 字段 -- asc从小到大排列,即升序(ascend,上升,升入,追溯) -- desc从大到小排序,即降序(descend,下降,下去,下来) -- 查询年纪在18到34岁之间的男性,按照年纪从小到大 select * from students where gender=1 and age between 18 and 34 order by age; -- 查询年纪在18到34岁之间的女性,身高从高到矮 select * from students where gender=2 and age between 18 and 34 order by high desc; -- order by 多字段 -- 查询年纪在18到34岁的女性,身高从高到矮排序,如果身高相同的情况下按照年纪从小到大排序 select * from students where age between 18 and 34 and gender=2 order by high desc; -- 查询年纪在18到34岁的男性,身高从高到矮排序,如果身高相同的情况下按照年纪从小到大排序,如果年龄也相等那么按照id从小到大排序; select * from students where age between 18 and 34 and gender=1 order by high desc, age, id asc;
(七)聚合函数
-- 总数 -- count -- 查询男性有多少人 select count(*) from students where gender=1; -- 最大值 -- max -- 查询最大的年纪 select max(age) from students; -- 查询女性的最高 身高 select max(high) from students where gender=2; -- 最小值 -- min select min(high) from students; -- 求和 -- sum -- 计算所有人的年龄总和 select sum(age) from students; -- 平均值 -- avg(average) -- 计算平均年纪 -- 计算平均年纪 sum(age)/count(*) select sum(age)/count(*) from students; select avg(age) from students; -- 保留2位小数round(圆的,整数的) select round(avg(age),2) from students;
(八)分组
-- group by -- 按照性别分组,查询所有的性别 select gender from students group by gender; -- 计算每组性别的人数 select gender, count(*) from students group by gender; -- 查询男性组中的姓名 group_concat(合并多个数组;合并多个字符串) select gender,group_concat(name) from students where gender=1 group by gender; -- having -- 查询每个性别平均年纪超过30岁的性别,以及姓名 having avg(age) > 30 select gender, group_concat(name) from students group by gender having avg(age) > 30; -- 查询每种性别中的人数多于4个的组的信息 select gender,group_concat(name) from students group by gender having count(*)>4;
(九)分页
-- limit:限制,限定
-- 显示5页 select * from students limit 5; -- 分页显示,每页显示2条数据(0表示从第一行开始显示,2表示显示两行) select * from students limit 0,2; -- 按照身高从高到矮排序,查找出所有女性,并且分页显示,每页显示2条数据 select * from students where gender=2 order by high desc limit 0,2;