mysql

作者: _前端码农_ | 来源:发表于2020-04-26 13:54 被阅读0次
    • 启动mysql,进入bin目录,net start mysql, mysql -u root -p
    • timestamp 时间戳,会自动根据十区去改变时间
    • timestamp 会自动储存当前时间,datetime会存null
    • select * from lesson limit 1,2 从第二条开始,读两条
    • timestamp 如果想自动填充时间,默认值设为CURRENT_TIMESTAMP
    • order by desc 必须在 limit的前边,不然会报错

    库操作

    创建库:create database 库名
    删除数据库:drop database if exists 库名
    删除所有记录:delete from bname
    显示所有库:show databases
    使用库:use 库名
    显示当前使用的库:select database()
    当前用户:select user()
    当前服务器版本:select version()
    

    操作表

    创建表:create table bname (列名,类型)
    删除表:drop table bname
    显示所有表:show tables;
    显示表的列结构:DESC bname;
    复制表的列结构和记录:create table bname select * from bname2
    复制其他表的记录:insert into bname select * from 元表名
    仅复制表的列结构:create table 新表名 LIKE 元表名
    
    修改表结构:alter table bname ( add modify change drop )
    修改列的数据类型或位置:
    alter table bname MODIFY lname ARCHAR(100) (first || after empid)
    
    添加列:alter table bname ADD lname 数据类型 (after empid某列后 || first最前边)
    修改列名和数据类型:alter table bname CHANGE 修改前列名 修改后列名 修改后数据类型
    删除列:alter table bname DROP lname
    删除行:delete from bname where id=""
    
    插入数据:insert into bname(l1,l2,l3) values(v1,v2,v3)
    输出指定的值:select (2+3)*6
    
    创建主键和自动编号:create table bname (lname 类型 auto_increment primary key)
    初始化自动编号:alter table bname auto_increment=1;
    唯一值:create table bname (a int UNIQUE)
    默认值:create table bname (lname 类型 default 默认值)
    

    索引

    create index 索引名 on bname(lname)
    show index from bname 显示索引
    drop index 索引名 on bname
    
    select AVG(sales) from tb
    SUM(sales)
    COUNT(sales)
    连接字符串:
    concat(a,b,c);
    select concat(empid,name) from tb1;
    

    字符串函数

    从右侧取两位
    select right(empid,2) from tb1;
    left() 从左取
    substring(id,2,3)
    reverse(name) 反转
    

    日期和时间函数

    把当前时间存储进去,但字段必须为datetime类型
    insert into bname (b) values(NOW()); 
    
    select lname from bname limit 3 where sales not between 20 and 60
    select lname from bname where month in (5, 6); month=5 或者 6;
    
    distinct:去除重复选项
    select distinct empid from tb
    where age is null; 如果age是空
    where age is not null;
    where name like '%chuan%'
    
    模糊查询通配符:
    %:任意个字符
    _:任意一个字符
    
    select id,sales,case when s>100 then '高' when s>50 when '中等' else '低' end as '评价' from tb1;
    
    排序
    select * from bname group by 用于分组的列名
    
    分组后提取记录
    select id, sum(sales) from tb group by id having sum(sales)>200;
    
    提取记录后分组
    select id, AVG(sales) from tb where sales>50 group by id order by avg(sales) desc;
    
    

    编辑数据

    修改列的记录
    update db1 set lname=value
    防止意外执行update和delete: 启动时加上 --safe-updates 选项
    delete from bname where 条件 // 删除符合条件的记录
    
    

    多个表

    使用union命令从多个表中提取记录并合并
    (select lname from bname) union (select lname2 from bname2)
    union all 可省去消除重复记录的操作
    
    内连接:把不同表中相匹配的记录提取出来的连接方式
    select lname from bname join bname2 on 表一的列=表二的列
    select tb.id,tb.name,tb1.sales from tb join tb1 on tb.id=tb1.id;
    join tb1 using(id) 当两个表字段名都为id时,可这样写。
    
    select * from b1 join b2 on ~ b2 join b3 on ~
    
    左外连接:相匹配记录和表一的全部记录(left join)
    select lname from bname1 left join bname2 on bname1.lie=bname2.lie
    
    右外连接(right join)
    
    
    同时使用 order by 和 where时,order by 应该位于where之后
    where 子句中not操作符只有一个功能,就是否定其他所跟的任何条件
    
    select id, quantity, quan * itemprice as price from tb;
    
    更新:update bname set lname='' where ~
    

    相关文章

      网友评论

          本文标题:mysql

          本文链接:https://www.haomeiwen.com/subject/opidwhtx.html