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