MariaDB 数据类型
MariaDB数据类型可以分为数字,日期和时间以及字符串值。
使用数据类型的原则:够用就行,尽量使用范围小的,而不用大的

常用的数据类型

  1. 整数:int, (bit比整数还要小的整数,即二进制)
  2. 小数:decimal                                                                          --decimal(5,2) 保留5位数字,小数点后两位
  3. 字符串:varchar(2)最大占位2字符        Char(2)占位2字符      --括号内的2是限制        
  4. 日期时间:date, time, datetime
  5. 枚举类型(enum)                                                                           --(例:‘男’‘女’)即只能选择
约束
  1. 主键primary key:物理上存储的顺序,不能重复
  2. 非空not null:此字段不能为空
  3. 唯一unique:此字段不允许重复
  4. 默认default:当不填写此值时会使用默认值,如果填写则已填写为准
  5. 外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
mariadb-增删改查怎么用-LMLPHPmariadb-增删改查怎么用-LMLPHP
mariadb-增删改查怎么用-LMLPHPmariadb-增删改查怎么用-LMLPHP
查看日期,必须用相应格式
mariadb-增删改查怎么用-LMLPHPmariadb-增删改查怎么用-LMLPHP
 
select now();                                                                    --显示当前时间
select database();                                                            --显示当前数据库
create database test1 charset utf8;                                 --创建一个支持中文的数据库tset1
create table xxxx(id int, name varchar(20));                    --创建xxxx表 (字段的名是id,id的类型是int,数据名name,字符串varchar)
 
create table yyyy(id int primary key not null auto_increment, name varchar(30));     --若命令太长也可以(如下)分行写
create table zzzz(                                     
id int primary key not null auto_increment,                    --自增
name varchar(20)
);
insert into yyyy values (1,'张三');                                      --在yyyy表中添加张三
select * from yyyy;                                                            --查看yyyy表信息
desc xxxx;                                                                        --查看表结构
create table students (    
id int unsigned not null auto_increment primary key,
name varchar(20),
age tinyint unsigned default 0,
high decimal(5,2),
gender enum('男', '女', '中性', '保密') default '保密',
cls_id int unsigned
);                                                                                         --创建students表 
insert into students values(0,'金星',18, 188.88, '中性', 0);   --插入一条信息进入到students表
create table classes(
id int unsigned not null auto_increment primary key,
name varchar(20)
);                                                                                         --创建classes表(id, name)
 
show create table students;                                            --查看表的创建
alter table students add birthday datetime;                       --alter table 表名 add 列名 类型;(即:添加个字段)
-- 修改表-修改字段:不重命名版                  
alter table students modify birthday date;                         -- alter table 表名 modify 列名 类型及约束;(即:修改个字段)
-- 修改表-修改字段:重命名版
alter table students change birthday birth date default '2000-01-01';    -- alter table 表名 change 原名 新名 类型及约束;
 -- 修改表-删除字段
alter table students drop xxx;                                              --删除students表中的xxx字段
-- 删除表
-- drop table xxxx;                                                               --删除xxxx表
 
--MyISAM与InnoDB区别(两种引擎)
--两种类型最主要的区别就是InnDB支持事物处理与外键和行级锁
 
--增删改查
 --增加
 --全列插入
        --insert into 表名 values(..)
        --主键字段 可以用0 null default 来站位
        insert into classes values (0, '大神班');
 
        -- 向students表里插入 一个学生信息
        insert into students values (0, '鹿鼎记', 20, '女', 1, '1990-01-01')
        insert into students values (null, '鹿鼎记', 20, '女', 1, '1990-01-01')
        insert into students values (default, '鹿鼎记', 20, '女', 1, '1990-01-01')
        insert into students values (default, '鹿鼎记', 20, '1', 1, '1990-01-01')
        insert into students values (default, '鹿鼎记', 20, '2', 1, '1990-01-01')
        insert into students values (default, '鹿鼎记', 20, '3', 1, '1990-01-01')
        insert into students values (default, '鹿鼎记', 20, '4', 1, '1990-01-01')
        --失败insert into students values (default, '鹿鼎记', 20, '第四性别', 1, '1990-01-01')
 --部分插入
         insert into students(name, gender) values ('小乔', 2);
 --部分插入多条记录
        insert into students(name, gender) values ('大乔', 2),('貂蝉', 2);
 
--修改表内信息
--update 表名 set 列1=值1, 列2=值2... where 条件;
update stadents set age=15 where id=14;                         --修改大乔年纪
--删除表内信息
--物理删除(从硬盘里删除数据)
-- delete from 表名 where 条件
 delete from students;                                                        --删除students表内所有数据
delete from students where id=15                                    --删除students表内id为15的所有数据
 
--逻辑删除
 
-- 用一条字段来表示 这条信息是否已经不能在使用了
-- 给students表添加一个is_delete字段 bit 类型
-- alter table students add is_delete bit default 0;
-- update students set is_delete=1 where id=6;
alter table students add is_delete bit default 0;                --添加一个字段is_dalete设为bit类型,默认是0,但是不显示,并不会影响使用
 
--查询基本使用(条件,排序,聚合函数,分组,分页)
 
查询  练习准备
1、--创建学生表
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
);
 
2、--创建班级表
create table classes(
id int unsigned auto_increment primary key not null,
name varchar(20) not null
);
3、--往students表里插入数据
insert into students values
(0,'小明',18,180.00,2,1,0),
(0,'小月月',19,180.00,2,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,2,2,0),
(0,'刘亦菲',29,162.00,3,3,0),
(0,'金星',45,180.00,2,4,0),
(0,'静香',18,170.00,1,4,0),
(0,'郭静',22,167.00,2,5,0),
(0,'周杰',33,178.00,1,1,0);
 
--向classes表里插入数据
insert into classes values (0, 'python_01期'),(0, 'python_02期');
 
-- 查询所有列
--select * from 表名
select * from students;                                                --查询students表中的所有字段
select * from classes;
 
--一定条件查询
select * from students where name='小李飞刀';          --查找name是小李飞刀的
select * from students where id>3;                             --查找id>3的
 
-- 查询制定 列
select name, gender from students;                            --查询 name 和 gender 这两列
 
-- 可以使用as制定列或表制定别名;
select name as 姓名, gender as 性别 from students;    --查询 name 和 gender 两列,并定义别名 为姓名和性别
select id as 序号, gender as 性别, name as 姓名 from students;
 
-- 通过表名字查询
select students.name, students.age from students;             --查询 name 和 age 这两列
 
-- 给表起别名查询
select s.name, s.age from students as s;                               --将 name,age,定义别名为 s,查看 s
 
--消除重复行
-- distinct
select distinct gender from students;                                   --查看gender列,并删除重复的
 
--条件查询
--比较运算符
select * from students where age > 18;                                -- 查询年纪大于18岁的信息
select id, name, gender from students where age > 18;      --查询年纪大于18岁的信息,显示id,nsme,gender三列
select * from students where age>18 and age<28;             --18岁到28岁之间(and)
select * from students where age>18 or high>=180;          --在18岁以上或者身高180以上的人(or)
 
-- 模糊查询
-- like
-- % 替代1个或者多个甚至是没有
select * from students where name like '小%';                      --查找name是‘小......’的信息
 
-- 查询姓名中有‘小’的所有名字
select * from students where name like '%小%';                   --查找name是‘ ...小...’的信息
 
 
-- 查询有两个字的名字
select * from students where name like '__';                         --查找name是两个字符的信息(“_”代表一个字符)
 
select * from students where name like '__%';                      -- 查询至少有2个字符的信息
 
-- rlike 正则
--  (.*贪婪匹配,.*?非贪婪匹配)
select * from students where name rlike '^周.*';                  --查找以“周“为开头的信息
select * from students where name rlike '^周.*儿$';             --查找以”周“为开头,”儿“为结尾的信息
 
--范围查询
-- in (1,3,8)表示在一个非连续的范围内                                    
select * from students where age=18 or age=34;                -- 查询 年纪为18,34的人
 
select * from students where age=18 or age=34 or age=12;
select * from students where age in (12,18,34);                   --查询年纪为12,18,34的人
 
select * from students where age between 18 and 34;        --查询 年龄在17岁到34岁之间的信息
 
select * from students where age not between 18 and 34;  --查询 年纪不在18到34岁的信息
 
-- 空判断
-- 判断is null
select * from students where high is null;                              --查找high是null(空)的信息
 
-- 判断非空is not null
select * from students where high is not null;                       --查找high不是null(空)的信息
 
排序    
--order by 字段
--asc从小到大排列,即升序
--desc从大到小排序,即降序
        
--查询年纪在18到34岁之间的男性,按照年纪从小到大
select * from students where age between 18 and 34 and gender=1;
select * from students where age between 18 and 34 and gender=1 order by age;
select * from students where age between 18 and 34 and gender=1 order by age asc;
select * from students where age between 18 and 34 and gender=1 order by age desc;
        --查询 students 表中的 age 18 到 34 的 枚举的第一个元素
        --查询 students 表中的 age 18 到 34 的 枚举的第一个元素,并且以age字段 进行默认排序
        --查询 students 表中的 age 18 到 34 的 枚举的第一个元素,并且以age字段 进行 asc 方式排序
        --查询 students 表中的 age 18 到 34 的 枚举的第一个元素,并且以age字段 进行 dasc 方式排序
select * from students where (age between 18 and 34) and gender=2 order by high desc;
        --查询年纪在18到34岁之间的女性,身高从高到矮排序
 
--order by 多字段
select * from students where (age between 18 and 34) and gender=2 order by high desc, age desc;
        --查询年纪在18到34岁的女性,身高从高到矮排序,如果身高相同的情况下按照年纪从大到小排序
select * from students where (age between 18 and 34) order by high desc, age,id;
        --查询年纪在18到34岁的女性,身高从高到矮排序,如果身高相同的情况下按照年纪从大到小排序,如果年龄也相等那么按照id从大到小排序;
select * from students order by age asc, high desc;
        --按照年纪从小到大、身高从高到矮的排序
--聚合函数
-- 总数
-- count(*)统计行数据数 
-- 查询男性有多少人
select * from students where gender=1;                                --查询students表 中 gender枚举 的第一个元素
select count(*) from students where gender=1;                    --查询students表 中 gender枚举 是第一个元素的数量
select count(*) as '男性' from students where gender=1;      --查询students表 中 gender枚举 是第一个元素的数量 并定义别名 男性
    
-- 最大值
-- max
select age from students;                                                        -- 查询年纪列
select max(age) from students;                                               -- 查询最大的年纪
select gender,max(high) from students where gender=2;     -- 查询女性的最高 身高
    
-- 最小值
-- min
select min(age) from students;                                               -- 查询最小的年纪
    
-- 求和
-- sum
select sum(age) from students;                                               -- 计算所有人的年龄总和
    
-- 平均值
-- avg
select avg(age) from students;                                               -- 计算平均年纪
    
-- 计算平均年纪 sum(age)/count(*)
select sum(age)/count(*) from students;
 
-- 保留2位小数
select round(avg(age), 2) from students;
    
-- 分组
-- group by(先分组在查询)
select gender from students group by gender;                    -- 按照性别分组,查询所有的性别
    
select gender, count(*) from students group by gender;     -- 计算每组性别的人数
    
select gender, count(*) from students where gender=1 group by gender;    -- 计算男性人数
    
--把查出来的内容拼接成一个字符串concat
select concat(id,name,age) from students;                        --查询id,name,age并拼成一个字符串
select concat(id,' ',name,' ',age) from students;                 --查询id,name,age 拼成一个字符串 并 用空格分开
    mariadb-增删改查怎么用-LMLPHP
-- 查询男性组中的姓名 group_concat
select gender, group_concat(name) from students where gender=1 group by gender;
select gender, group_concat(name,age) from students where gender=1 group by gender;
select gender, group_concat(name,age,id) from students where gender=1 group by gender;
select gender, group_concat(name,age," ",id) from students where gender=1 group by gender;
        --按照性别分组,并显示name枚举的第一个元素组内name的信息
        --按照性别分组,并显示name枚举的第一个元素组内name,age的信息
        --按照性别分组,并显示name枚举的第一个元素组内name,age,id的信息
        --按照性别分组,并显示name枚举的第一个元素组内name,age,id的信息,并用空格分开 age 与 id
-- having        (where必须放在group by前边   having 放后边)
select gender, group_concat(name), avg(age) from students group by gender having avg(age)>30;
        -- 查询平均年纪超过30岁的性别,以及姓名 having avg(avg) > 30
--失败案例:
select gender, group_concat(name), avg(age) from students where avg(age)>30 group by gender;
    
select gender, group_concat(name) from students group by gender having count(*)>4;
        -- 查询每种性别中的人数多于4个组的信息
 
-- 分页
-- 显示5页
select * from students limit 2;                                           -- 分页显示,每页显示2条数据 
 
select * from students limit 0, 2;                                       -- 分页显示,从第0条后开始显示2条数据
 
select * from students where gender=2 order by high desc limit 0, 2;
        -- 按照身高从高到矮排序,查找出所有女性,并且分页显示,每页显示2条数据
 
常用的增删改查基本是这些,还是要多练多敲才会加深印象,加油吧!
05-28 12:51