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:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
查看日期,必须用相应格式
 
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;                                                                        --查看表结构
show tables;                                                                       --查看当前数据库的所有表
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 拼成一个字符串 并 用空格分开
   
-- 查询男性组中的姓名 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条数据
 
常用的增删改查基本是这些,还是要多练多敲才会加深印象,加油吧!

最新文章

  1. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇三:批量处理后的txt文件入库处理
  2. EL表达式的算术运算
  3. Asp.net上传文件Request.files获取不到文件
  4. awk笔记
  5. mysql常用命令集锦
  6. C语言经典算法100例(一)
  7. Js跳出循环
  8. The Shortest Path in Nya Graph
  9. git删除未跟踪文件
  10. 【搜索引擎Jediael开发笔记1】搜索引擎初步介绍及网络爬虫
  11. Leetcode 动态规划 Candy
  12. DirectX 9 UI三种设计学习笔记:文章4章Introducing DirectInput+文章5章Wrapping Direct3D
  13. CF 604B More Cowbell#贪心
  14. Eclipse tomcat插件
  15. Spring-boot中使用@ConditionalOnExpression注解,在特定情况下初始化bean
  16. swift 4 生成随机数的内置方法汇总
  17. tmux 使用说明
  18. 犹记当年写出bug睡不着,回想今天只求睡好渡余生……
  19. POJ 2481 Cows 【树状数组】
  20. Mysql 用命令行导出导入数据方法

热门文章

  1. centos7最小化安装Oracle11gR2
  2. CVX安装使用
  3. vue 根据下拉框动态切换form的rule
  4. 页面关闭或刷新时触发javascript的事件
  5. 【codeforces 734F】Anton and School
  6. windows部署iBase4J
  7. ASP.NET-GUID扩展类使用
  8. java Timer定时器管理类
  9. 自己定义控件-MultipleTextView(自己主动换行、自己主动补齐宽度的排列多个TextView)
  10. hive 运行sqlclient异常