一、数据类型

MariaDB数据类型可以分为数字,日期和时间以及字符串值。

使用数据类型的原则:够用就行, 尽量使用范围小的,而不用大的

  • 常用的数据类型
  1. 整数:int, bit
  2. 小数:decimal                                     #decimal(5,2)
  3. 字符串:varchar, char  
  4. 日期时间:date, time, datetime
  5. 枚举类型(enum)
  • 约束
  1. 主键primary key:物理上存储的顺序(不能重复)
  2. 非空not null:此字段不能为空
  3. 唯一unique:此字段不允许重复
  4. 默认default:当不填写此值时会使用默认值,如果填写则已填写为准
  5. 外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常。

二、增删改

枚举类型的数据可以索引取值

主键null/default/0默认自增

decimal 小数会四舍五入

年龄写成字符串会默认为整型

自增不会回退(好马不吃回头草)

 MariaDB [jam]> desc classes;      #查看表结构
+-----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+----------------+
| id | tinyint() unsigned | NO | PRI | NULL | auto_increment |
| name | varchar() | YES | | NULL | |
| age | tinyint() unsigned | YES | | NULL | |
| high | decimal(,) | YES | | NULL | |
| gender | enum('男','女') | YES | | 女 | |
| cls_id | int() unsigned | YES | | NULL | |
| date | bit() | YES | | NULL | |
| is_delete | bit() | YES | | NULL | |
+-----------+---------------------+------+-----+---------+----------------+
rows in set (0.01 sec) MariaDB [jam]> select * from classes; #查看表里的内容
Empty set (0.01 sec) #查看时间
MariaDB [jam]> select now();
#增字段 alter table 表名 add 字段名 数据类型;
MariaDB [jam]> alter table classes add bithday datetime;
#修改数据类型 alter table 表名 modify 字段名 新的数据类型;
MariaDB [jam]> alter table classes modify bithday date;
#修改字段名,数据类型 alter table 表名 change 旧字段名 新字段名 数据类型
MariaDB [jam]> alter table classes change bithday birth datetime;
#删除字段名(drop)
MariaDB [jam]> alter table classes drop birth;

#插入一个新的数据
MariaDB [jam]> insert into classes values (,'萧敬腾',,171.2,'男',,,);
#部分插入,可以多条插入
MariaDB [jam]> insert into classes (name,age,high) values ('jam',,171.2),('hsiao',,);

插入insert

#将hsiao修改为田馥甄
MariaDB [jam]> update classes set name='田馥甄' where name='hsiao';
#修改特定的某一条的name,用id指定
MariaDB [jam]> update classes set name='张惠妹' where id=;
#修改多个字段用‘,’隔开
MariaDB [jam]> update classes set name='阿密特',age= where id=;

修改update

#全部删除(危险操作,一定要注意)
MariaDB [jam]> delete from classes;
Query OK, rows affected (0.00 sec) MariaDB [jam]> select * from classes;
Empty set (0.00 sec)
#物理删除,按主键删除最保险
MariaDB [jam]> delete from classes where id=;
#编辑一个is_de字段,默认值为0,bit()表示1,
MariaDB [jam]> alter table classes add is_de bit() default ;
#逻辑删除is_de;
MariaDB [jam]> alter table classes drop is_de;
#查看is_delete=1的行
MariaDB [jam]> select * from classes where is_delete=;
+----+-----------+------+--------+--------+--------+------+-----------+
| id | name | age | high | gender | cls_id | date | is_delete |
+----+-----------+------+--------+--------+--------+------+-----------+
| | 萧敬腾 | | 171.00 | 男 | NULL | | |
| | 白敬亭 | | 183.00 | 男 | NULL | | |
| | | | 3.00 | | | | |
| | | | 5.00 | | | | |
+----+-----------+------+--------+--------+--------+------+-----------+
rows in set (0.00 sec)
#查看is_delete=0的行
MariaDB [jam]> select * from classes where is_delete=;
+----+-----------+------+--------+--------+--------+------+-----------+
| id | name | age | high | gender | cls_id | date | is_delete |
+----+-----------+------+--------+--------+--------+------+-----------+
| | 王嘉尔 | | 172.00 | 男 | NULL | | |
| | 阿密特 | | 160.00 | 女 | NULL | | |
| | | | 6.00 | | | | |
+----+-----------+------+--------+--------+--------+------+-----------+
rows in set (0.00 sec)

删除delete/alter(drop)

三、单表查询

查询基本使用(条件,排序,聚合函数,分组,分页)

#创建studens表
MariaDB [jam]> create table students (
-> id int unsigned not null auto_increment primary key,
-> name varchar() default '',
-> age tinyint unsigned default ,
-> high decimal(,),
-> gender enum('男', '女', '中性', '保密') default '保密',
-> cls_id int unsigned default ,
-> is_delete bit default );
#创建class表
MariaDB [jam]> create table class(
-> id int unsigned auto_increment primary key not null,
-> name varchar() not null);
#插入行
MariaDB [jam]> insert into students (name,age,high,gender,cls_id,is_delete) values('猪',,,,,),('狗',,,,,),('鸡',,,,,),('马',,,,,),('鼠',,,,,);
MariaDB [jam]> select * from students;
+----+------+------+--------+--------+--------+-----------+
| id | name | age | high | gender | cls_id | is_delete |
+----+------+------+--------+--------+--------+-----------+
| | 猪 | | 150.00 | 男 | | |
| | 狗 | | 180.00 | 男 | | |
| | 鸡 | | 183.00 | 女 | | |
| | 马 | | 120.00 | 女 | | |
| | 鼠 | | 150.00 | 男 | | |
+----+------+------+--------+--------+--------+-----------+

创建好需要部署的表

#给字段取别名
MariaDB [jam]> select name as '姓名',age as '年纪' from students;
+--------+--------+
| 姓名 | 年纪 |
+--------+--------+
| 猪 | |
| 狗 | |
| 鸡 | |
| 马 | |
| 鼠 | |
+--------+--------+
rows in set (0.00 sec)
#给表取别名(多表查询特别有用)
MariaDB [jam]> select s.name,s.age from students as s;
+------+------+
| name | age |
+------+------+
| 猪 | |
| 狗 | |
| 鸡 | |
| 马 | |
| 鼠 | |
+------+------+
rows in set (0.00 sec)
#全部查询(危险操作,数据大时会承受不了)
MariaDB [jam]> select * from students;

查询(取别名as)

MariaDB [jam]> select distinct age from students;

根据字段消除重复的行

#查询年纪大于10的行
MariaDB [jam]> select * from students where age >;
#查询年纪在19到30之间的行(上下等价)
MariaDB [jam]> select * from students where age > && age <;
MariaDB [jam]> select * from students where age > and age <;
#查询年纪小于14或大于20的行(同上)
MariaDB [jam]> select * from students where age < or age >;
MariaDB [jam]> select * from students where age < || age >;

条件查询

%表示零个或任意多个字符
#查询students表的age列中包含1的行
MariaDB [jam]> select * from students where age like '%1%';
#查询students表的age列中开头为1的行
MariaDB [jam]> select * from students where age like '1%';
#查询students表的age列中末尾为1的行
MariaDB [jam]> select * from students where age like '%1';
#查询students表的age列中只有一个字符的行
MariaDB [jam]> select * from students where age like '_';
#查询students表的age列中只有两个字符的行
MariaDB [jam]> select * from students where high like '__';
#查询students表的age列中至少有两个字符的行
MariaDB [jam]> select * from students where high like '__%';

模糊查询

#查询年纪在12,,20的人
MariaDB [jam]> select * from students where age in (,,);
#查询年纪在10到20之间的人,包含10和20
MariaDB [jam]> select * from students where age between and ;
#查询年纪不在10和20之间的人
MariaDB [jam]> select * from students where age not between and ;

范围查询(in between)

#查询年纪为空的行
MariaDB [jam]> select * from students where age is null;
#查询年纪不为空的行
MariaDB [jam]> select * from students where age is not null;

空判断

#按年纪从小到大排序asc(默认从小到大)
MariaDB [jam]> select * from students order by age asc;
+----+------+------+--------+--------+--------+-----------+
| id | name | age | high | gender | cls_id | is_delete |
+----+------+------+--------+--------+--------+-----------+
| | 马 | | 120.00 | 女 | | |
| | 猪 | | 150.00 | 男 | | |
| | 狗 | | 180.00 | 男 | | |
| | 鸡 | | 183.00 | 女 | | |
| | 鼠 | | 150.00 | 男 | | |
+----+------+------+--------+--------+--------+-----------+
rows in set (0.00 sec) MariaDB [jam]> select * from students order by age;
+----+------+------+--------+--------+--------+-----------+
| id | name | age | high | gender | cls_id | is_delete |
+----+------+------+--------+--------+--------+-----------+
| | 马 | | 120.00 | 女 | | |
| | 猪 | | 150.00 | 男 | | |
| | 狗 | | 180.00 | 男 | | |
| | 鸡 | | 183.00 | 女 | | |
| | 鼠 | | 150.00 | 男 | | |
+----+------+------+--------+--------+--------+-----------+
rows in set (0.00 sec)
#按年级从大到小排序(desc)
MariaDB [jam]> select * from students order by age desc;
+----+------+------+--------+--------+--------+-----------+
| id | name | age | high | gender | cls_id | is_delete |
+----+------+------+--------+--------+--------+-----------+
| | 鼠 | | 150.00 | 男 | | |
| | 鸡 | | 183.00 | 女 | | |
| | 狗 | | 180.00 | 男 | | |
| | 猪 | | 150.00 | 男 | | |
| | 马 | | 120.00 | 女 | | |
+----+------+------+--------+--------+--------+-----------+
rows in set (0.00 sec)
#-- 查询年纪在18到34岁之间的男性,按照年纪从小到大
MariaDB [jam]> select * from students where (age between and ) and gender= order by age;
#-- 查询年纪在18到34岁之间的女性,身高从高到矮
MariaDB [jam]> select * from students where (age between and ) and gender= order by high desc;
# -- 查询年纪在10到20岁的女性,身高从高到矮排序,如果身高相同的情况下按照年纪从小到大排序
MariaDB [jam]> select * from students where (age between and ) and gender= order by high desc, age;
#-- 查询年纪在18到44岁的男性,身高从高到矮排序,如果身高相同的情况下按照年纪从小到大排序,如果年龄也相等那么按照id从小到大排序;
MariaDB [jam]> select * from students where (age between and ) and gender= order by high desc,age,id;

排序(asc,desc)默认按主键排序

-- 总数
-- count
-- 查询男性有多少人
select count(*) from students where gender=; -- 最大值
-- max
-- 查询最大的年纪
select max(age) as '最大值' from students; -- 查询女性的最高 身高
select max(high) from students where gender=; -- 最小值
-- min
select min(age) as '最小值' from students; -- 求和
-- sum
-- 计算所有人的年龄总和
select sum(age) form students; -- 平均值
-- avg
-- 计算平均年纪
-- 计算平均年纪 sum(age)/count(*)
select avg(age) from students;
select sum(age)/count(*) form students; #除去空值,比较准确
-- 保留2位小数
select round(avg(age),)
-- 总数
-- count
-- 查询男性有多少人
select count(*) from students where gender=; -- 最大值
-- max
-- 查询最大的年纪
select max(age) as '最大值' from students; -- 查询女性的最高 身高
select max(high) from students where gender=; -- 最小值
-- min
select min(age) as '最小值' from students; -- 求和
-- sum
-- 计算所有人的年龄总和
select sum(age) form students; -- 平均值
-- avg
-- 计算平均年纪
-- 计算平均年纪 sum(age)/count(*)
select avg(age) from students;
select sum(age)/count(*) form students; #除去空值,比较准确
-- 保留2位小数
select round(avg(avg),) from studen
-- 总数
-- count
-- 查询男性有多少人
select count(*) from students where gender=; -- 最大值
-- max
-- 查询最大的年纪
select max(age) as '最大值' from students; -- 查询女性的最高 身高
select max(high) from students where gender=; -- 最小值
-- min
select min(age) as '最小值' from students; -- 求和
-- sum
-- 计算所有人的年龄总和
select sum(age) form students; -- 平均值
-- avg
-- 计算平均年纪
-- 计算平均年纪 sum(age)/count(*)
select avg(age) from students;
select sum(age)/count(*) form students; #除去空值,比较准确
-- 保留2位小数
select round(avg(age),) 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=;
--查询以性别分组的人
select gender,group_concat(name) from students group by gender; -- having
-- 查询每个性别平均年纪超过30岁的性别,以及姓名 having avg(age) >
select gender,group_concat(name) from students group by gender having avg(age) > ; -- 查询每种性别中的人数多于4个的组的信息
select gender,group_concat(name) from classes group by gender having count(*) > ;

分组查询

-- 分页显示,每页显示2条数据(以1开头,如果limit3,2以4开头)
select * from classes limit ,; -- 按照身高从高到矮排序,查找出所有女性,并且分页显示,每页显示2条数据
select * from students where gender= order by high desc limit ,

分页查询

mariadb数据库(2)增删改与 单表查询的更多相关文章

  1. 数据库开发-Django ORM的单表查询

    数据库开发-Django ORM的单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询集 1>.查询集相关概述 查询会返回结果的集,它是django.db.mod ...

  2. mysql数据库:mysql增删改、单表、多表及子查询

    一.数据增删改 二.单表查询 三.正表达式匹配 四.多表查询 五.子查询       一..数据增删改     增加  insert [into] 表名[(可选字段名)] values(一堆值1),( ...

  3. mysq表的三种关系,数据的增删改以及单表多表查询

    一丶三种关系 分析步骤: #.先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #.再站在右表的角度去找 ...

  4. Django框架第七篇(模型层)--多表操作:一对多/多对多增删改,跨表查询(基于对象、基于双下划线跨表查询),聚合查询,分组查询,F查询与Q查询

    一.多表操作 一对多字段的增删改(book表和publish表是一对多关系,publish_id字段) 增  create publish_id 传数字   (publish_id是数据库显示的字段名 ...

  5. 数据库相关--mysql中的单表查询

    一.完整的单表查询语句 select [distinct] *|字段1,字段2, .... from 表名 [where 条件1] [group by 字段名 [having 条件2] ] [orde ...

  6. MySQL----MySQL数据库入门----第四章 单表查询

    select [distinct] * | 字段1,字段2,字段3... from 表名 [where 条件表达式] [group by 字段名] [having 条件表示式] [order by 字 ...

  7. 巨蟒python全栈开发数据库攻略3:行记录的操作&单表查询3

    1.数据行的增删改 2.单表查询 select&where条件 3.group by&having&order by&limit

  8. Java通过JDBC连接数据库的三种方式!!!并对数据库实现增删改查

    前言 java连接数据库完整流程为: 1,获得驱动(driver),数据库连接(url),用户名(username),密码(password)基本信息的三种方式. 2,通过获得的信息完成JDBC实现连 ...

  9. Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查

    本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...

随机推荐

  1. C# .NET 微信开发-------当微信服务器推送消息时如何接收处理

    最近一直在看微信,整整一个月了,看到现在说实话还有很多没看的,从前两周一点看不懂到现在单个功能的一步步实现,不知道这样的速度是否太慢了. 不过现在往下看还是有思路了,目前整个文档完成学习只有1/3左右 ...

  2. (转)ORACLE中关于外键缺少索引的探讨和总结

    在ORACLE数据库中,定义外键约束时,ORACLE是不会自动创建对应索引的,必须手动在外键约束相关的列上创建索引.那么外键字段上是否有必要创建索引呢?如果有必要的话,巡检时,如何找出外键字段上没有创 ...

  3. DP tricks and experiences

    [LeetCode] 关于动态规划的经验与技巧. 很多时候多分配一位空间是为了递推的方便,例如前推两位. 辅助数组的索引,用到的可能是 1 — N,或者是 0 — N-1. 具体要看清 f[i] 每一 ...

  4. System.nanoTime与System.currentTimeMillis

    System.nanoTime提供相对精确的计时,但是不能用他来计算当前日期.(系统计时器的当前值,以毫微秒为单位) System.currentTimeMillis返回的是从1970.1.1 UTC ...

  5. CentOS5、CentOS6启动流程

    这三篇文章讲的都很好,可以看一下 http://os.51cto.com/art/201407/446819.htm http://www.mamicode.com/info-detail-11656 ...

  6. 搭建私有CA

    一.实验目的 搭建私有CA并使其可以实现公司内部的的签名服务. 二.实验环境: 系统架构:Centos7(服务器).Centos6(需要申请证书的服务器)需要的软件包:openssl.openssl- ...

  7. HDU 6040 - Hints of sd0061 | 2017 Multi-University Training Contest 1

    /* HDU 6040 - Hints of sd0061 [ 第k小数查询,剪枝 ] 题意: 给出随机数列 a[N] (N < 1e7) 询问 b[M] (M < 100) ,对于每个询 ...

  8. JavaScript算术运算符

    ㈠运算符(操作符) ⑴通过运算符可以对一个或多个值进行运算,并获取运算结果 ⑵比如:typeof就是运算符,可以来获得一个值得类型               它会将该值的类型以字符串的形式返回   ...

  9. Word:表格在页面中垂直居中

    本文适用于Word 2007 + Windows 7,熊猫帮帮主@cnblogs 2018/2/22 如何让表格在页面上垂直居中呢.想当然的认为这属于表格的设置,在表格属性和其它表格相关选项中一通猛找 ...

  10. HGOI 20190828 题解

    Problem A 数学题 设数论函数$f(x)$表示$x(x ∉ Prime)$的次大因数, 给出$l,r$求出$\sum\limits_{i=l,i ∉ Prime} ^r f(i)$ . 对于$ ...