Mysql 基础

基础

1 对数据库 新增字段,修改字段,删除字段 

-- 在表中添加字段,新增一个字段,设置对应的类型,长度,是否为null,默认值,注释
ALTER TABLE 表名 ADD COLUMN 字段  类型  NOT NULL DEFAULT '0' COMMENT '注释' ;
ALTER TABLE h_user ADD COLUMN remark VARCHAR(20) NOT NULL DEFAULT '1' COMMENT '备注' 
-- 修改一个字段的类型
ALTER TABLE 表名 MODIFY 字段 类型  NOT NULL DEFAULT '0' COMMENT '字段注释';
ALTER TABLE h_user MODIFY remark INT  NOT NULL DEFAULT '0' COMMENT '备注1';
-- 修改一个字段的名称,此时要重新指定该字段的类型
ALTER TABLE 表名 CHANGE 字段 新字段 类型  NOT NULL DEFAULT '0' COMMENT '字段注释';
ALTER TABLE h_user CHANGE remark remark1 VARCHAR(10) NOT NULL DEFAULT '0' COMMENT '备注2';

2 关于时间的函数

表结构
DROP TABLE IF EXISTS `h_user`;
CREATE TABLE `h_user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `passwords` varchar(20) NOT NULL,
  `sex` int(0) NULL DEFAULT NULL,
  `email` varchar(13) NOT NULL ,
  `phone_number` varchar(12) NOT NULL,
  `create_time` datetime(0) NULL DEFAULT NULL,
  `create_user` varchar(12) NOT NULL,
  `status` int(0) NULL DEFAULT NULL COMMENT '状态(0正常 1停用)',
  `update_time` varchar(255) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
)     
数据
INSERT INTO `h_user`(`id`, `username`, `passwords`, `sex`, `email`, `phone_number`, `create_time`, `create_user`, `status`, `update_time`) 
VALUES (1, 'han', '111', NULL, NULL, NULL, '2021-04-13 06:25:53', NULL, 1, '2021-04-12 22:25:53');
INSERT INTO `h_user`(`id`, `username`, `passwords`, `sex`, `email`, `phone_number`, `create_time`, `create_user`, `status`, `update_time`) 
VALUES (2, 'qiang', 'saa', NULL, NULL, NULL, '2021-04-06 22:26:36', NULL, NULL, '2021-04-02 22:26:36');
//向update_time加6天
select *,ADDDATE(update_time,6) from  h_user
select *,ADDDATE(create_time,6) from  h_user
//向update_time加2时1分钟10秒
select *,ADDTIME(update_time, "02:01:10") from h_user
select *,ADDTIME(create_time, "02:01:10") from h_user
//返回当前日期
select *,CURDATE() from h_user
//返回格式 2021-09-19
select *,CURRENT_DATE() from h_user
//返回格式 19:59:02
select *,CURRENT_TIME() from h_user
//返回格式 2021-09-19 19:59:02
select *,CURRENT_TIMESTAMP() from h_user
//计算create_time和update_time相差天数
select *,DATEDIFF(create_time,update_time) from h_user
//向当前时间减去2天
select *,DATE_SUB(update_time,INTERVAL 2 DAY) from h_user
//向当前天数加上45天
select *,DATE_ADD(update_time,INTERVAL 45 DAY) from h_user
//格式化天数  按照指定日期或时间显示格式 输出日期或日期时间;
select *,DATE_FORMAT(NOW(),'%m-%d-%Y'),DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s')as sd from h_user
//STR_TO_DATE()函数:按照指定日期或时间显示格式 将字符串转换为日期或日期时间类型;
SELECT STR_TO_DATE(update_time,'%Y-%m-%d') FROM h_user

 3  DISTINCT 去重

select distinct name from 表名 。代表会展示不重复的名称。
select distinct name,age from 表名 。有相同的name和age的数据把重复去掉,只展示一条数据;如有2条相同的name='a' 和 age=10 数据只会展示一条。如 2条数据只有name相同而age不相同,则这2条数据就都会展示。 

在百度的时候看到很多例子:如果要对某个字段去重,可以试下:
SELECT  *, COUNT(DISTINCT name)  FROM table  GROUP BY   name
一般会报错,因为表中会有 id(自增),name,age,sex 等字段,报错的原因是分组之后,同一组会有多id,就无法展示。  如果想要分组之后,展示同组的多个id,可以使用下面的group_concat()函数。

4 关于数字部分

为h_user表添加字段,数据自行添加
ALTER TABLE h_user ADD COLUMN money  DOUBLE NOT NULL DEFAULT'0.00' COMMENT'人民币'
ALTER TABLE h_user MODIFY  money DECIMAL(5,2) NOT NULL DEFAULT '0.00' COMMENT '美元'
//截取小数点后面的位数,第一个参数代表所截字段,第二个参数代表截取的个数,最后返回的值会四舍五入。
SELECT ROUND(money,1) FROM h_user

//查询最大值和最小值
//对字符型数据的最大值,是按照首字母由A~Z的顺序排列,越往后,其值越大。当然,对于汉字则是按照其全拼拼音排列的,若首字符相同,则比较下一个字符,以此类推。 
//当然,对与日期时间类型的数据也可以求其最大/最小值,其大小排列就是日期时间的早晚,越早认为其值越小
SELECT  MAX(money),MIN(money),username FROM h_user GROUP BY username
//update_time 是varchar 
SELECT  MAX(update_time),username FROM h_user GROUP BY username
// 把varchar可以转换为int decimal
ALTER TABLE h_user ADD COLUMN age VARCHAR(10)  NULL DEFAULT '0' COMMENT '年龄'
SELECT MAX(age+0) FROM h_user 
SELECT MAX(CAST(age AS DECIMAL(4,2))) AS highScore  FROM h_user
//返回数字的绝对值,但是对于varchar类型也好使
SELECT *,ABS(remark) FROM h_user;
//开平方,但是对于varchar类型也好使
SELECT *,SQRT(remark) FROM h_user;
//对于reamrk的值求和,但是对于varchar类型也好使
SELECT SUM(remark) FROM h_user GROUP BY STATUS
//计算数据的条数
SELECT COUNT(*) FROM h_user GROUP BY STATUS

5 关于字符串部分

//可以把多个字符串合并为一个
SELECT CONCAT(remark,"备注") FROM h_user
//自定义分割符 合并字符串
SELECT CONCAT_WS("---",remark,"注释","备注") FROM h_user  
//找到b在remark中所在的位置,remark得有分割符逗号 例如'a,a,a,a,b'
SELECT FIND_IN_SET("b",remark) FROM h_user
//把money字段改长
ALTER TABLE h_user MODIFY money DECIMAL(16,2) NOT NULL COMMENT '美元' 
//格式化数字 "#,###.##" 形式:(250500.5634, 2)-- 输出 250,500.56
SELECT FORMAT(money,1) FROM h_user
//小写变大写
SELECT UCASE(remark) FROM h_user
SELECT UPPER(remark) FROM h_user
//大写变小写
SELECT LCASE(remark) FROM h_user
SELECT LOWER(remark) FROM h_user
//将字符串后几位返回
SELECT RIGHT(remark,2) FROM h_user
//将结尾的空格去掉
SELECT RTRIM(remark) FROM h_user
//比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1
select STRCMP(s1,s2) from 表名
SELECT STRCMP(remark,age) FROM h_user
//将字remark从s开始截取l长度
SELECT SUBSTR(remark,s,l) FROM 表名
SELECT SUBSTR(remark,1,2) FROM h_user

6 关于运算符

//算数运算符
1 +             加法
2 -             减法
3 %  mod        取余
4 /             会取余  
5 DIV           不会取余,会直接把小数点之后的数据舍掉
//比较运算符
1 =             等于
2 <> !=         不等于
3 >             大于
4 <             小于
4 >=            大于等于
5 <=            小于等于
6 BETWEEN       在俩者之间
7 NOT BETWEEN   不在这俩之间
8 in            包含
9 not in        不包含
10 LIKE         模糊查询
11 IS NULL      为空
12 IS NOT NULL  不为空
//逻辑运算符
1 NOT 或 !      逻辑非
2 AND           逻辑与
3 OR            逻辑或
4 XOR    	    逻辑异或
//位运算符
1 &             按位与
2 |             按位或
3 ^             按位异或
4 !             取反
5 <<            左移
6 >>            右移

高级

1 group_concat()函数与group by 一起使用, 主要通过分组后,使group_concat()中的属于同一组的列显示出来。

   group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。

select license_plate,group_concat(alarm_id order by alarm_id asc separator ' ') from 表名  group by license_plate;

参考

未完,还要补充其他的mysql的基础。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值