美文网首页
数据库第一周

数据库第一周

作者: _Clown_ | 来源:发表于2018-09-14 11:00 被阅读0次

    mysql的命令和查询语句:

    启动
    service mysql start
    停止
    service mysql stop
    重启
    service mysql restart
    查看mysql服务状态
    service mysql status
    

    登陆系统

    mysql -u 用户名(root) -p      输入密码
    show databases;  查看数据库
    USE 库名       选中数据库
    show tables;     查看表格式信息
    select * from 表名      查看表里面的信息
    

    数据库的操作

    #查看数据库下所有的存储引擎:
    SHOW ENGINES;
    #查看当前数据库使用的存储引擎:
    SHOW VARIABLES LIKE 'default_storage_engine';
    #修改默认的存储引擎:
    SET default_storage_engine=MYISAM;
    utf-8:万国码,一般情况下不会出现乱码情况,以后要使用的也是utf-8编码
    
    #创建数据库:
    CREATE DATABASE|SCHEMA 数据库名称 CHARSET='utf8';
    #创建数据库,如果不存在才创建
    CREATE DATABASE|SCHEMA IF NOT EXISTS 数据库名称 CHARSET='utf8';
    #可以修改数据库
    ALTER DATABASE 数据库名称 CHARSET=字符集;
    #切换数据库
    USE 数据库名称;
    #删除数据库
    DROP DATABASE 数据库名称;
    #当数据库存在的情况下删除数据库
    DROP DATABASE IF EXISTS 数据库名称;
    #查看所有数据库:
    SHOW DATABASES;
    #查看当前数据库
    SELECT DATABASE();
    

    如何创建表

    CREATE TABLE 表名 (
        列  类型  约束  属性,
        列  类型  约束  属性,
        列  类型  约束  属性
    );
    涉及到的约束:主键,DEFAULT,NOT NULL
    属性:自增->AUTO_INCREMENT
    
    SHOW TABLES;
    
    SHOW CREATE TABLE 表名 \G;
    
    DESC 表名 
    
    DESC 表名 列
    
    ALTER TABLE 表名 ADD 列  类型  约束
    ALTER TABLE 表名 ADD(列  类型  约束,....)
    
    ALTER TABLE 表名 MODIFY 列的名称 数据类型
    

    关于表的操作:

    CREATE TABLE tablename (
        列 类型 约束 属性
        ......
    )
    
    #添加新的列
    ALTER TABLE tablename ADD 列 类型 约束 ..
    ALTER TABLE tablename ADD(列 类型 约束 ..,列 类型 约束 ..)
    
    #修改列
    ALTER TABLE tablename MODIFY 列名 新的类型 新的约束
    
    #修改列名:
    ALTER TABLE tablename CHNAGE 列名 new列名 类型 约束 属性
    
    #删除列
    ALTER TABLE tablename DROP 列名
    
    #修改默认值:
    ALTER TABLE tablename ALTER 列名 SET DEFAULT value;
    #删除默认值:
    ALTER TABLE tablename ALTER 列明 DROP DEFAULT
    
    #修改表名
    ALTER TABLE oldtablename RENAME AS newtablename
    
    #修改表名:
    RENAME TABLE oldtablename TO newtablename
    
    #删除表
    DROP TABLE 表名
    
    #复制表(只会复制表的结构,不会复制表的数据)
    CREATE TABLE [IF NOT EXISTS] 表名 LIKE 要复制的表名
    

    DML:数据库操作语言:对于表中的数据做增,删,改

    #插入数据(全列插入)(值必须跟表中的列的顺序和类型保持一致)
    INSERT INTO 表名 VALUES (值,值,值....) 
    
    #插入数据(部分插入)(值必须跟前面要插入的列的顺序和类型保持一致)
    INSERT INTO 表名(列名,列名,....) VALUES (值,值,值....) 
    
    #多条插入:
    INSERT INTO 表名(列名,列名,....) VALUES (值,值,值....),(值,值,值....) ....
    
    #将一个表的数据插入到另一个表中
    INSERT INTO 表名(列名,列名,.....) SELECT 列名,列名,... from copy_表名;
    
    #删除数据
    DELETE FROM 表名 WHERE 条件;
    DELETE FROM 表名;
    
    #另一种方式删除表中的数据
    TRUNCATE TABLE 表名;
    
    区别:
    DELETE:即可以指定条件删除,也可以删除全部(不会删除表,只会删除表里面的数据)
    使用DELETE删除的数据,还可以找回
    
    TRUNCATE:只能删除全部,(先把表完全删除,然后在创建一个新的表)
    删除的数据,不能找回了
    
    #数据的更新
    UPDATE 表名 SET 列名=newvalue,[列名=newvalue,....] WHERE 条件 [and 条件 ....]
    

    SQL:数据库查询语言:

    SELECT * FROM 表名;
    SELECT 列名,列名,.. FROM 表名;
    SELECT 表.列,表.列,... FROM 数据库名.表名
    
    查询语句:
    #WHERE字句:
    # = 直等:
    SELECT * FROM 表名 WHERE 列明=value;
    
    # != 不等于
    SELECT * FROM 表名 WHERE 列明 != value;
    
    # <> 不等于
    SELECT * FROM 表名 WHERE 列名 <> value;
    
    # < 小于
    SELECT * FROM 表名 WHERE age < 30;
    
    # <= 小于等于
    SELECT * FROM 表名 WHERE age <= 30;
    
    # > 大于
    SELECT * FROM 表名 WHERE age > 30;
    
    # >= 大于等于
    SELECT * FROM 表名 WHERE age >= 30;
    
    # BETWEEN num AND num (返回符合某个范围的记录,左右闭合)
    SELECT * FROM 表名 WHERE age BETWEEN 20 AND 40;
    
    #检查空值
    SELECT * FROM 表名 WHERE 列名 IS NULL;
    
    #取反,查询出所有不为NULL值的记录
    SELECT * FROM 表名 WHERE 列名 IS NOT NULL;
    
    #AND 与(同时满足)
    SELECT * FROM 表名 WHERE 列名1=value AND 列名2=value;
    
    #OR 或 (满足其中一个即可)
    SELECT * FROM 表名 WHERE 列名1=value OR 列名2=value;
    
    #IN (范围查询)
    SELECT * FROM 表名 WHERE 列名 IN(值,值,...)
    
    #NOT (非,取反)
    
    SELECT * FROM 表名 WHERE 列名 NOT IN(值,值,...)
    

    AND和OR的组合使用(AND的优先级比or要高,所以在使用的时候要注意)

    例子:假如我们要找id大于等于2或则性别为男,并且薪资大于8000
    SELECT * FROM employee WHERE (id>=2 OR gender='男') AND salary > 8000
    如果不加():查找性别为男并且薪资大于8000,或则id大于等于2
    SELECT * FROM employee WHERE id>=2 OR gender='男' AND salary > 8000
    

    模糊查询(通配符查询) 跟LIKE 配合使用

    %:表示任意字符,出现任意次数.
    1.查询出姓名中包含李的的记录
    SELECT * FROM 表名 WHERE name LIKE '%李%';
    
    _:任意字符,有且只有一次.
    2.查询出姓为李并且姓名是由三个汉字组成的记录
    SELECT * FROM 表名 WHERE name LIKE '李_ _';
    
    3.查询出姓为李并且姓名至少由2个汉字组成的记录
    SELECT * FROM 表名 WHERE name LIKE '李_%'; 
    

    在mysql中如何使用正则(REGEXP)(mysql对一些简单的正则支持的比较好,复杂的正则,可能会有些问题)

    SELECT * FROM 表名 WHERE 列名 REGEXP '正则表达式'
    #排序 order by
    升序:ASC 
    降序:DESC
    SELECT * FROM 表名 ORDER BY 列名 方向;
    SELECT * FROM 表名 ORDER BY 列名 方向,列名 方向,列名 方向;
    
    #排序:
    升序:ASC (小->大,默认情况下不设置,就是升序)
    降序:DESC(大->小)
    
    #单个使用:
    #升序
    SELECT * FROM 表名 ORDER BY 列名 (ASC);
    
    #将序
    SELECT * FROM 表名 ORDER BY 列名 DESC;
    
    #组合使用:(无论是升序还是降序,都需要明确的指明方向)
    SELECT * FROM 表名 ORDER BY 列名1 DESC,列名2 ASC;
    
    #如果要使用中文排序(姓名)
    SELECT * FROM 表名 ORDER BY CONVERT(stu_name USING gbk)
    
    #LIMIT (限制查询)
    #offset:偏移量,从哪一条开始返回,不包含这一行
    #num:返回多少行数据
    SELECT * FROM 表名 LIMIT offset,num;
    
    #从第一行开始返回,返回指定行数的数据
    SELECT * FROM 表名 LIMIT num;
    
    #LIMIT和ORDER BY组合使用
    #可以查询最大,
    SELECT * FROM 表名 ORDER BY 列名 DESC LIMIT 1;
    
    # 最小值
    SELECT * FROM 表名 ORDER BY 列名 ASC LIMIT 1;
    
    #mysql常见的聚合函数
    MAX():最大
    MIN():最小
    AVG():平均值
    COUNT():总数行数
    SUM():求和(一列的和)
    
    单独使用聚合函数
    SELECT MAX(列) as 别名 FROM 表名;
    SELECT MIN(列) as 别名 FROM 表名;
    SELECT AVG(列) as 别名 FROM 表名;
    SELECT COUNT(1) as 别名 FROM 表名;
    SELECT SUM(列) as 别名 FROM 表名;
    
    综合使用:
    SELECT COUNT(1) as 别名, SUM(列) as 别名,AVG(列) as 别名 FROM 表名;
    

    相关文章

      网友评论

          本文标题:数据库第一周

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