美文网首页
day02 表 字符串 数值 日期

day02 表 字符串 数值 日期

作者: yuxiaohu | 来源:发表于2017-11-28 12:02 被阅读0次

    1 表操作(增删查改)

    1, 创建表 :CREATE TABLE person(NAME VARCHAR(20),sex CHAR(2),age INT);
    2, 查看库下面的所有表: show  tables;
    3, 删除表: drop table 表名;
    4, 修改表名: alter table 表名 rename [to] 新表名;
    5, 清空表数据: truncate 表名;
    6,查看表结构:desc 表名;
    
    //清除创建新表
    TRUNCATE TABLE account;
    
    truncate  与  delete
    truncate相当于删表再重建一张同样结构的表,操作后得到一张全新表.
    而delete是从删除所有的层面来操作的.
    Trucate相当于把旧的表扔了重画一张,
    Delete相当于用橡皮把学籍表的数据库擦掉.
    如果决定全清空的下,truncate速度更快一些.
    
    注意:
    1.创建库、表名是不要使用mysql关键字或者保留字; 
    2.使用mysql时出现中文乱码,创表时加入character set utf8; 
    3.一般不推荐使用中文数据库; 
    

    将数据装入表中

    1, insert 插入表内容
    1.1 不指定字段,必须指定全部字段的值
    INSERT INTO employees VALUES 
    (12, 'Mary', 18, '男', '2017-10-11', '2017-11-11', 'job', 5500, '备注');
    
    1.2 插入指定字段的数据
    INSERT INTO employees (id, NAME, age, sex)
    VALUES(14, '李五', NULL , '女');
    
    1.3一次插入多条数据
    INSERT INTO employees (id, NAME, age, sex)
    VALUES(15, '李五', 19 , '女'),(16, '李六', 20 , '男');
    
    2, 加载文本文件内容到表中
    
    文本文件内容要按照表定义的类型填写,每行包含一个记录,
    用定位符(tab)把值分开,可以使用NULL值。为了在文本文件中表示这些内容,使用\N(反斜线,字母N)。
    
    mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
    请注意如果用Windows中的编辑器(使用\r\n做为行的结束符)创建文件,应使用:
    
    mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
        -> LINES TERMINATED BY '\r\n';
    

    修改表头 alter用法

    1:删除列
    ALTER TABLE 【表名】 DROP 【列名】
    
    2:增加列
    ALTER TABLE 【表名】 ADD 【列名】 INT NOT NULL  COMMENT '注释说明'
    
    ★★★ 插入列  在已有列后面插入新列
    ALTER TABLE 【表名】 ADD 【插入新列】 INT AFTER 【已有列名】;
    
    3:修改列的类型信息
    ALTER TABLE 【表名】 CHANGE 【列名】【新列名(这里可以用和原来列同名即可)】 BIGINT NOT NULL  COMMENT '注释说明'
    
    4:重命名列
    ALTER TABLE 【表名】 CHANGE 【列名】【新列名】 BIGINT NOT NULL  COMMENT '注释说明'
    
    5:重命名表
    ALTER TABLE 【表名】 RENAME 【表新名】
    
    6:删除表中主键
    Alter TABLE 【表名】 drop primary key
    
    7:添加主键
    ALTER TABLE 【表名】 ADD CONSTRAINT PK_SJ_RESOURCE_CHARGES PRIMARY KEY (resid,resfromid)
    
    8: 添加索引
    ALTER TABLE 【表名】 add index INDEX_NAME (name);
    
    9: 添加唯一限制条件索引
    ALTER TABLE 【表名】 add unique emp_name2(cardnumber);
    
    10: 删除索引
    alter table 【表名】 drop index emp_name;
    

    查看 show

    1: 查看创建表的语句
    show create table temp
    2: 查看表
    show tables;
    

    查询 select

    1: 查询所有字段内容
    SELECT * FROM temp;
    
    2: 查询指定字段内容
    SELECT id, NAME FROM temp;
    
    3: 去除重复
    SELECT DISTINCT job FROM temp;
    
    只改变查询内容,不改变原来表中的数据
    4: 查询运算 
    SELECT salary*10 FROM temp;
    
    5: 取别名
    SELECT NAME AS '名字' FROM temp;
    SELECT salary + 1000 , salary AS '工资' FROM temp;
    

    条件查询 where

    1: 使用where 进行 条件查询
    SELECT NAME FROM temp WHERE NAME = '李四';
    SELECT NAME,salary FROM  temp WHERE salary > 500;
    
    2: 不等于
    SELECT id,NAME,salary FROM  temp WHERE id != 500;
    SELECT id,NAME,salary FROM  temp WHERE id <> 500;
    
    3: 区间查询
    SELECT id, NAME FROM book WHERE id BETWEEN 3 AND 7; //查询id在 3 至 7之间的内容
    
    4: 显示多个信息
    SELECT id, NAME FROM temp WHERE id IN(2,4);
    
    5: 模糊查询
    SELECT id, NAME FROM temp WHERE NAME LIKE '%李%'; //一个或多个字符
    SELECT id, NAME FROM temp WHERE NAME LIKE '_李_'; //一个字符
    
    6: 判断是否为空 null比较特殊,不能使用 =  != 来判断
    SELECT id, NAME FROM temp WHERE NAME IS NOT NULL;
    
    7: 多个条件同时成立 与
    SELECT id, NAME, salary FROM temp WHERE NAME IS NOT NULL AND salary = 200;
    
    8: 多个条件任一成立 或
    SELECT id, NAME, salary FROM temp WHERE NAME IS NOT NULL OR salary = 200;
    
    9: 多个条件不成立 非
    SELECT id, NAME, salary FROM temp WHERE NOT(salary = 200);
    

    排序 ORDER BY

    1: 使用 ORDER BY 对查询结果进行排序,asc升序,desc降序,默认asc升序
    SELECT id,NAME,sex,salary FROM temp ORDER BY salary DESC;
    
    2: 排序的列名,可以是select语句指定的别名 (字符串去掉引号)
    SELECT id,NAME AS 姓名,sex,salary FROM temp ORDER BY 姓名 DESC;
    
    3: 还可以用where条件选择排序内容 ORDER BY 要放后面
    SELECT id,NAME AS 姓名,sex,salary FROM temp WHERE id >= 3 ORDER BY 姓名 DESC;
    

    更新表中的内容 updata 修改表数据

    1: 使用updata语句修改表中的数据
    UPDATE temp SET salary = 500; //无条件
    UPDATE temp SET salary = 400 WHERE NAME = '李四'; //带条件
    

    删除表内容 delete 修改表数据

    1: 删除指定记录 如果没有where条件就全删了
    DELETE FROM temp WHERE id = 5;
    

    函数 COUNT,SUM,AVG, MAX, MIN, GROUP BY, HAVING

    1: 统计所有员工id数 COUNT
    SELECT COUNT(id) FROM temp;
    
    2: 统计符合条件的员工id数
    SELECT COUNT(id) FROM temp WHERE sex = '男';
    
    3: 字段内容为null不纳入统计
    SELECT COUNT(id) FROM temp;
    SELECT COUNT(NAME) FROM temp;
    
    4: 求和 SUM
    SELECT SUM(salary) AS '所有员工工资总和' FROM temp;
    SELECT SUM() FROM temp; //0
    
    5: 求平均值 AVG (null不参与计算)
    SELECT AVG(salary) FROM temp;
    SELECT AVG(salary) FROM temp WHERE sex = '男';
    
    6: 求最大值 MAX
    SELECT MAX(salary) FROM temp;
    SELECT MAX(salary) FROM temp WHERE sex = '男';
    
    7: 求最小值 MIN
    SELECT MIN(salary) FROM temp;
    SELECT MIN(salary) FROM temp WHERE sex = '女';
    
    8: 分组 GROUP BY 求男女平均工资
    SELECT sex AS '性别', AVG(salary) AS '平均工资' FROM temp GROUP BY sex;
    
    9: 分组 GROUP BY 求男女员工个数
    SELECT sex AS '性别', COUNT(sex) AS '员工个数' FROM temp GROUP BY sex;
    
    10: 分组过滤 GROUP BY ... HAVING 平均售价低于60的图书类别
    SELECT class AS '图书类别', AVG(price) AS '平均售价' FROM book GROUP BY class HAVING AVG(price) < 60;
    

    字符串函数

    1: 连接字符串
    SELECT CONCAT(id,NAME,author) FROM book;
    
    2: 连接字符串 加分隔符
    SELECT CONCAT_WS(' # ',id,NAME,author) FROM book;
    
    3: 统计字符串长度 (根据字节数)
    SELECT NAME, LENGTH(NAME) FROM book;
    
    4: 统计字符串长度 (根据字符数)
    SELECT NAME, CHAR_LENGTH(NAME) FROM book;
    
    5: 字母转换小写
    SELECT NAME, LCASE(NAME) FROM book;
    
    6: 字母转换大写
    SELECT NAME, UPPER(NAME) FROM book;
    
    7: 去空格以及自定义过滤
    SELECT TRIM(' abc ');  //去首尾空格
    SELECT TRIM(BOTH 'x' FROM 'xxxxabcxxxx');  //自定义过滤 去掉首尾
    SELECT TRIM(LEADING 'x' FROM 'xxxxabcxxxx');  //自定义过滤 去掉前面
    SELECT TRIM(TRAILING 'x' FROM 'xxxxabcxxxx');  //自定义过滤 去掉后面
    
    8: 截取字符串
    SELECT LEFT('abcdefg',5); //左截取 abcde
    SELECT RIGHT('abcdefg',3); //右截取 efg
    SELECT SUBSTRING('abcdefg',2,3); //中间截取 bcd
    
    9: 替换字符串
    SELECT INSERT('abcdefg',2,3,'123'); //替换 a123efg
    

    数值方法

    1:四舍五入
    SELECT ROUND(3.14159, 4);  //3.1416
    SELECT ROUND(3.54159, 0);  //4
    SELECT ROUND(163.456, -2);  //200
    
    2:截取
    SELECT TRUNCATE(3.14159, 4);  //3.1415
    SELECT TRUNCATE(123.456, -2);  //100
    
    3:取余
    SELECT MOD(11, 3);  //2
    
    4:向下取整
    SELECT FLOOR(44.2); //44
    
    5:向上取整
    SELECT CEIL(44.1); //45
    

    日期

    1: 日期格式转换
    SELECT DATE_FORMAT('1997-10-04 22:23:00','%H %K %I %r %T %S'); // 22 K 10 10:23:00 PM 22:23:00 00
    SELECT STR_TO_DATE('04/31/2004', '%m /%d /%Y'); //2004-04-31
    
    2: 当前时间
    SELECT NOW(); //2017-11-28 17:08:15
    
    3: 当前日期
    SELECT CURDATE(); //2017-11-28
    
    4: 当前时间
    SELECT CURTIME(); //17:08:58
    
    5: 当前月最后一天
    SELECT LAST_DAY(NOW()); //2017-11-30
    
    6:返回日期/时间单独部分
    SELECT EXTRACT(YEAR FROM NOW()); //2017
    SELECT EXTRACT(MONTH FROM NOW()); //11
    SELECT EXTRACT(DAY FROM NOW()); //28
    
    7: 指定日期/时间 增减
    SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR); //增加1年 2018-11-28 17:13:58
    SELECT DATE_SUB(NOW(),INTERVAL 1 YEAR); //减少1年 2016-11-28 17:14:52
    
    8:两个日期相隔天数
    SELECT DATEDIFF(NOW(),'1988-08-28'); //10684
    

    空值

    1:空值函数
    SELECT IFNULL(1/0, 'yes');//yes
    2:相当于三目运算
    SELECT IF(1>2 ,2 ,3);// 3
    

    流程控制

    1:相当于 java 里的 switch
    SELECT
    CASE 11
    WHEN 1 THEN 'one'
    WHEN 2 THEN 'two'
    WHEN 11 THEN '666'
    ELSE 'more'
    END;
    
    2:相当于 java 里的 IF ELSE
    SELECT
    CASE
    WHEN 1 < 0
    THEN '正数'
    WHEN 0 = 0
    THEN 'is 0'
    ELSE '负数'
    END;
    

    系统信息函数

    1:获取 MySQL 版本号
    SELECT VERSION();
    
    2:服务器的连接次数
    SELECT CONNECTION_ID();
    
    3:当前数据库名
    SELECT DATABASE();
    
    4:获取用户名的函数 几种方法结果一样
    SELECT USER(); 
    SELECT SYSTEM_USER(); 
    SELECT SESSION_USER(); 
    SELECT CURRENT_USER(); 
    
    5:获取字符集
    SELECT CHARSET(NAME) FROM book; //utf8
    

    加密函数

    1: 对用户的密码进行加密,该函数是不可逆的。
    SELECT PASSWORD('abc'); //\*0D3CED9BEC10A777AEC23CCC353A8C08A633045E;
    
    2: 对普通字符串进行加密,该函数是不可逆的
    SELECT PASSWORD('abc'); //\*0D3CED9BEC10A777AEC23CCC353A8C08A633045E
    
    3: 加密函数ENCODE(str, pswd_str) 
    使用pswd_str作为密码,加密str。使用DECODE()解密结果,结果是一个和str长度相同的字符串。
    SELECT ENCODE('yuxiaohu', 'cry'),LENGTH(ENCODE('yuxiaohu','cry'));// ���Z>  8
    
    4: 解密函数DECODE(crypt_str,pswd_str) 
    使用pswd_str作为密码,解密加密字符串crypt_str,crypt_str是由ENCODE()返回的字符串。
    SELECT DECODE(ENCODE('yuxiaohu','cry'), 'cry');//yuxiaohu
    

    相关文章

      网友评论

          本文标题:day02 表 字符串 数值 日期

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