zoukankan      html  css  js  c++  java
  • MySql:基本SQL

    mysql 众多关系型数据库中的一种

    用来存数据的
    一个仓库 -- 一个数据库
    箱子 -- 表
    进入mysql命令行:
    mysql -uroot -pxxx

    show tables;#查看所有表
    数据库:
    查看 show databases;
    创建 create database bkl charset utf8;
    删除 drop database bkl;
    选择数据库:use blk;
    查看创建数据库:show create database blk;

    表:
    约束:
    #自增长
    auto_increment
    #非空
    not null
    #默认值
    default 'xx'
    #唯一约束
    unique
    #charset
    指定字符集
    #主键
    primary key
    具有唯一性,不能为空
    #外键
    用来表示两个表之间的关系

    增:
    #score
    create table score(
    id int auto_increment primary key,
    s_id int not null,
    grade float not null
    );

    create table blk (
    id int auto_increment primary key,
    name varchar(10) not null,
    sex varchar(5) default '男' ,
    addr varchar(50),
    phone int not null unique,

    );

    删:
    drop table blk;
    改:
    alter table blk rename stu;#改表名
    alter table blk modify name varchar(20) unique;
    alter table blk change name stu_name varchar(30);#修改字段的数据类型
    alter table blk add money float not null after stu_name;#新增一个字段,放在哪个位置
    alter table tablename drop addr;#删除某个字段

    查:
    show create table tablename;#查看建表语句
    desc tablename;查看表结构
    show tables;#查看所有的表

    数据:
    增:
    insert into blk (stu_name,money,sex,phone)
    values ('赵小静','100.1','女',110);
    insert into blk (stu_name,money,phone)
    values ('王国元','100.1',110);
    #指定字段
    #不指定字段
    insert into blk values('','吕亚洲1',10000,'',10991);
    #指定字段的话,插入的值和字段对应
    #不指定的话,要把所有的字典值都写全。
    INSERT INTO blk (stu_name, money, phone)VALUES('杜红娟', 100011, 1091199),('张艳华',1000,1999),('薛伟',100000,101999);#同时插入多条
    删:
    DELETE from blk; 删除整个表里的数据
    truncate tablename;#删除整个表里的数据
    #delete清空的表自增长id还会继续增长
    #truncate 清空的表自增长id从1开始,truncate速度比delete要快,因为truncate 是从磁盘上直接把数据删除,恢复不了。
    delete from blk where stu_name = '赵小静';
    #删除指定的数据

    update blk set money=80;
    #如果不指定条件的话,修改的是整个表的数据
    update blk set money=90 where stu_name='赵小静' ; #修改指定的数据
    update blk set money=100,phone=10000 where stu_name='赵小静' ; #修改多个字段
    UPDATE blk set money=money+100 ;#在原来的值基础上做修改
    查:
    SELECT * from blk limit 1,5;#从第几条开始,下面的x条,不包含开始的那一条
    SELECT * from blk limit 5;查询5条
    SELECT id,stu_name,sex,money,phone from blk;#指定查询的字段
    SELECT * from blk;#查询所有的数据
    SELECT * from blk where sex='男';#指定条件
    SELECT * from blk where sex='男' and money>100; #多个条件,必须同时满足
    SELECT * from blk where sex='男' or sex='未知' ; #多个条件,有一个满足即可
    SELECT * from blk where sex !='男'; #<>也是不等于
    SELECT * FROM blk where addr like '%东京%';#模糊匹配,%代表的是通配符,必须得用like
    SELECT * from blk a where a.stu_name like '姚_';#_通配符表示任意一个单字符
    SELECT a.stu_name 学生名称,a.phone 学生电话 from blk as a where a.stu_name='姚远';#给表起别名,as可以省略
    SELECT * from blk a where a.stu_name in ('阿翔','林倩','姚远');# in
    SELECT * from blk a where a.money BETWEEN 1000 and 10000;#在什么什么之间的数据
    SELECT * from blk ORDER BY money desc;
    #order by xxx desc,根据哪个字段继续排序,默认是升序,
    降序是desc,升序asc
    SELECT * from blk a where a.addr = '' or a.addr is null; #查询数据为空
    SELECT DISTINCT a.money from blk a ;#去重
    SELECT COUNT(*) 学生人数 from blk where sex='女'; #统计行数
    SELECT MAX(a.money) 钱最多 from blk a; #最大值
    SELECT min(money) 钱最少 from blk;#最小值
    SELECT AVG(a.money) 平均多少钱 from blk a; #平均数
    SELECT sum(a.money) 总共多少钱 from blk a;#总和
    SELECT sex 性别,count(*) 人数 from blk GROUP BY sex; #分组
    SELECT
    sex 性别,
    count(*) 人数,
    a.stu_name 名字
    FROM
    blk a
    WHERE
    a.money > 300
    GROUP BY
    a.id
    HAVING
    a.stu_name LIKE '姚%';
    #如果group by后面有条件的话,必须得用having子句,having子句里面用到的字段必须出现在select后面,如果group by和order by一起用的话,order by必须写在group by后面
    SELECT *,COUNT(*) from blk GROUP BY sex,class; #多个字段进行分组

    SELECT id,stu_name from blk UNION SELECT id,t_name from teacher;
    #用来合并两条select语句的结果,两条select语句字段数量要一致,并且数据类型也要一致
    union和union all的区别就是一个会去重一个不会

    多表关联:
    SELECT
    *
    FROM
    USER a,
    accounts b
    WHERE
    a.id = b.user_id
    AND a.username = 'niuhy';
    -- SELECT * from blk a ,score b where a.id=b.s_id; -- 多表关联
    -- 两个表里面都存在的数据查出来
    SELECT * from blk a LEFT JOIN score b on a.id=b.s_id;
    -- LEFT JOIN会把左边表所有的数据都查出来,右边表有匹配的就查出来
    SELECT * from blk a RIGHT JOIN score b on a.id=b.s_id;
    -- RIGHT JOIN会把右边表所有的数据都查出来,左边表有匹配的就查出来
    SELECT * from blk a inner JOIN score b on a.id=b.s_id;
    -- INNER JOIN两边表里都匹配的数据才查到
    子查询:
    把一条sql的结果,作为另一条sql的条件
    SELECT * from score a where a.s_id = (SELECT id from blk where stu_name='阿翔');

    把子查询当成一个表
    SELECT
    a.grade 成绩,
    b.stu_name 学生名称,
    b.id 学号
    FROM
    score a,
    (
    SELECT
    id,
    stu_name
    FROM
    blk
    WHERE
    stu_name = '阿翔'
    ) b
    WHERE
    a.s_id = b.id;

    数据库权限:
    mysql数据的权限实质上都是在user表里控制的
    1、grant
    #所有的权限 所有数据库下面的所有表 用户 用户ip
    grant all on *.* to 'andashu'@'localhost' IDENTIFIED BY '123456' with grant option;
    密码 #有执行grant语句的权限
    grant all on *.* to 'andashu'@'%' IDENTIFIED BY '123456' with grant option;
    取消授权:
    Revoke select on *.* from dba@localhost;
    Revoke all on *.* from andashu@localhost;

    2、修改user表的数据
    对user表进行增加、修改和删除
    flush privileges;#刷新权限

    备份数据库:
    mysqldump -uroot -p123456 db > db.sql
    mysqldump -uroot -p123456 -A > all.sql
    恢复数据:
    mysql -uroot -p123456 db < db.sql

    存储过程:
    批量的造数据
    delimiter $$; #为了改结束符
    CREATE PROCEDURE big_data1(num int)#代表要造多少条数据 100
    BEGIN
    DECLARE i int;
    set i=0;
    WHILE i<num do
    insert into blk (stu_name,money) VALUES (CONCAT('宋灏志',i),20000);
    #CONCAT的作用是连接不同类型的数据
    #把字符串和数字拼接到一起
    set i=i+1;
    end WHILE;
    End
    $$;
    delimiter;

    call big_data1(500); #调用

    如欢如殇 授以青春鲜活肢体奔忙 如思如忘 驱以老朽深沉灵魂冥想 始自情热激荡 从未敢终于世事炎凉 无能执手相望 无法去尝试结发同床 无力至心死身僵 一息坚强 ------ 我一直没有放弃,如果你也能看到 修身 修禅
  • 相关阅读:
    【转】虚拟机 NAT网络设置
    [转载]应用 Valgrind 发现 Linux 程序的内存问题
    Visual Studio 代码格式化插件(等号自动对齐、注释自动对齐等)
    【转】链接任意目录下库文件(解决错误“/usr/bin/ld: cannot find -lxxx”
    C语言实现封装、继承和多态
    美国专利搜索网站
    【转】基于OCS实现高速缓存
    【转】防止网页被搜索引擎、爬虫和网页采集器收录或克隆复制的方法汇总
    [转]机器学习和计算机视觉----数学基础
    [转]机器学习与数据挖掘的学习路线图
  • 原文地址:https://www.cnblogs.com/lz2lhy/p/6845084.html
Copyright © 2011-2022 走看看