MySql 数据库笔记

什么数据库:是用来储存数据的
创建库语句是

数据定义语言(DDL):
DROP、CREATE、ALTER等语句,主要用于对数据库、表的操作。   
数据操作语句(DML):
INSERT、UPDATE、DELETE语句,主要用于对表中的数据进行操作。
数据查询语句(DQL):
SELECT语句,数据查询操作。
数据控制语句(DCL):
GRANT、REVOKE、COMMIT、ROOLBACK等语句,主要用于对数据库控制操作,如事务管理。

mysql数据库端口:3306

create database '库名' 建库
drop  database '库名' 删库


mysql数据类型
数值:int,float
日期:datetime
字符串是:varchar


mysql 建表语句

create table '表名'(
字段1,字段2...

drop table '表名';

insert into '表名'(字段...)
values(值1...)

create table test(
 #主键,唯一,且不能重复 
 id int(11) not null primary key auto_increment,
 #默认值
 sex int(1)  DEFAULT 1,
 status int(1) DEFAULT 1,
 #不为空约束 
 name varchar(50) not null        '姓名',
 #唯一约束,且不能重复 
 card_num VARCHAR(18) not null UNIQUE
);

添加字段的命令:
ALTER TABLE `表名`
ADD COLUMN `字段`  数据类型; 

修改字段类型的
ALTER TABLE `表名`
modify COLUMN `字段`  数据类型; 

新增主键
ALTER TABLE 表名
ADD [CONSTRAINT 约束名] PRIMARY KEY 

添加唯一约束
ALTER TABLE 表名
ADD [CONSTRAINT 约束名] UNIQUE (字段名...)

删除唯一约束
ALTER TABLE 表名  DROP INDEX 约束名
    
设置默认值
ALTER TABLE 表名
ALTER 字段 SET DEFAULT 默认值
删除默认值
ALTER TABLE 表名
ALTER 字段 DROP DEFAULT

设置非空约束
ALTER TABLE 表名
MODIFY字段名 字段定义 NOT NULL ;

修改字段顺序
ALTER TABLE new_test MODIFY 
sex int(1) AFTER name;

mysql 是一款关系型数据库;
设置外键约束:
  FOREIGN KEY(字段) REFERENCES 
  主表名(字段)
新增外键约束
ALTER TABLE 表名 
ADD  FOREIGN KEY(外键列) 
REFERENCE 父表(父表主键名)

修改数据
update 表名 set 字段='值',...
修改某项数据的 利用where条件
查询数据
select * from 表名 where 条件
*****慎用
delete  from 表名 where 条件


查询数据    
查询所有的字段
select * from 表名
起别名
select 字段1 as 别名2,字段1 as 别名2... from 表名 
select 字段1   别名2,字段1   别名2... from 表名 
where条件语句
and 同时满足多个条件
select * from 表名 where 条件1 and 条件2
or 满足其中一个条件 
select * from 表名 where 条件1 or 条件2
in包含
select * from 表名 where 字段 in('值1','值2'...)
concat 字符串拼接
select concat(str,str2,...) from 表名
like 模糊查询
全模糊
select * from 表名 where 字段 like '%值%'
左模糊
select * from 表名 where 字段 like '%值'
右模糊
select * from 表名 where 字段 like '值%'
between  and 区间查询左闭右开
select * from 表名 where 字段 between  '值1' and '值2'

not null
select * from 表名 where 字段 is not null;

order by 默认是升序
select * from 表名 order by 字段 
order by desc 降序
select * from 表名 order by 字段 desc

+-*/(用于字段是数值类型的)

>= <= != < > 
distinct 不查询重复数据(除id外所
有内容相同,查询的时候不能出现id)
binary 区分大小写的

limit n,m;
n代表的是页数                                                           ,m代表的是条数;


聚合函数
count() 查询总数的
sum() 求和的
max() 最大值
min() 最小值
avg() 平均值
分组 group by

HAVING 
如果对 group by 进行条件过滤的时候
则必须是having  可以单独使用

case when 条件语句
case 
when 条件1 then 值
when 条件2 then 值2
end 别名


group_concat


日期处理
获取当前时间
now(),sysdate()
ex:
    select now();
    select sysdate();
日期格式化
date_format(date,'%Y%m%d%h%i%s')y是大写重点
字符串转换成日期
str_to_date(str,格式)
select str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09
select str_to_date('08/09/08' , '%m/%d/%y'); -- 2008-08-09
select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s');

日期计算相加的
date_add(date,interval n unit)
    select date_add (now(), interval 1 day); -- add 1 day
    select date_add (now(), interval 1 hour);
    select date_add (now(), interval 1 week);
    select date_add (now(), interval 1 month);
日期相减的
date_sub(date,interval n unit)
    select date_sub (now(), interval 1 day); -- add 1 day
    select date_sub (now(), interval 1 hour);
    select date_sub (now(), interval 1 week);
    select date_sub (now(), interval 1 month);
返回某一天
    select DAYOFMONTH(birthday)
返回当前是某一年的第多少天
    select DAYOFYEAR(now());
返回一周第几天(记着减一)
    dayofweek(date)=

    字符串
    concat(str1,str2); 
    length(st1)//字节长度
    char_length()//获取字符串长度
    substring()//截取字符串长度
    substr()// 截取字符串长度
    left(str, length)
    right(str, length)
    截取值的第几个之前的字符串
    substring_index(str,"值",count);
    
    select substring_index('西门吹雪雪'),'雪',2) from employees;


    upper(str); 转换成大写
    lower(str)转换成小写
    CONCAT_WS(separator,str1,str2)
    trim(str)去掉首尾空格
    REPLACE(str, from_str, to_str);替换
    REPEAT(str, count)str重复几次返回
    REVERSE(str): 字符串颠倒顺序
    locate(str,str2)字符串位置,类似于包含
    elt(n,st1,str2....)返回第n个字符窜
    field(str,str1,str2...)返回与str匹配的位置下标从1开始
    find_in_set(str,str2);返回相同位置的(str2要用逗号隔开)
    
多表连接查询

笛卡尔积:是多个表的乘积
格式:select * from tb1,tb2..

inner:如果没有条件的时候相当笛卡尔积
select *from tb1 inner join 
tb2 where 条件 

子查询
    --步骤1:查询最高工资人的信息
            select max(salary) maxSalary from person
            --步骤2:查询 工资是maxSalary 的 员工
            select employee_id,last_name,salary from person where salary=maxSalary
            --步骤3:合成SQL
            select employee_id,last_name,salary from person where salary=(select max(salary) maxSalary from person)    
            
查询工资是前3名的信息
select * from 
#临时表
    (select * from employees_20190221 
    order by salary desc
    ) tb limit 0,3;


左外连接格式
            left join .. on ..
            select * from tb1
            left join tb2 
            on 条件 where 条件

右外连接格式
        right join .. on ..
        select * from tb1
        left join tb2 
        on 条件 where 条件

自连接查询
查询 星星是一个
相同部所有人的都有谁
        SELECT p1.*  FROM 
        person AS p1 JOIN 
        person AS p2 
        ON 
        p1.did=p2.did 
        WHERE 
        p2.name='星星';


    


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TimBL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值