mysql的一些方法和例子
程序员文章站
2024-01-31 08:34:28
...
mysql增,删,改查
数据库的增删改查
程序员必备技能
创建数据库
create database 你要创建的数据库名称;
create database if not exists 数据库名 CHARSET utf8 COLLATE utf8_general_ci;
创建数据库 如果不存在 数据库名 并设置数据库编码格式为utf8
数据库查询
指定数据库
use 数据库名;
数据库的删除
drop database 数据库名
数据库改
表的增删改查
创建表
create table if not exists 表名(
`id` int UNSIGNED key AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL
)default charset 'utf-8';
表中插入数据
!! 插入数据应注意字段约束,字符串需要加''引号
插入两条数据
INSERT 表名 VALUES
(字段对应数据1,字段对应数据2,字段对应数据3,字段对应数据4), //第一条数据和第二条之间使用,分割
(字段对应数据1,字段对应数据2,字段对应数据3,字段对应数据4);//最后一条数据后面应该加;
-- 如果有不知道的信息 NULL(注意字段约束是否允许)
INSERT 表名 VALUES
(字段对应数据1, 字段对应数据2, NULL, NULL, NULL);
指定插入的字段
INSERT 表名(`字段1`, `字段2`) VALUES
('字段1对应数据', 字段2对应数据);
删除表
drop table 表名;
drop table if exists 表名;
删除限定的使用
-- 删除所有工资高于2W的人 from 从...
DELETE FROM 表名 WHERE 薪资字段名>20000;
修改表
修改表名
rename table 旧表名 to 新表名;
字段的修改
USE psd1711;
DROP TABLE IF EXISTS test;
CREATE TABLE IF NOT EXISTS test(
`name` VARCHAR(255),
age TINYINT UNSIGNED
);
DESC test;
-- 添加新字段 add增加
ALTER TABLE test ADD gender TINYINT UNSIGNED;
-- 位置 after 在...后面
-- 新增 favor字段, 添加在 age 字段的后面
ALTER TABLE test ADD favor VARCHAR(255) AFTER age;
-- first 第一
ALTER TABLE test add id int KEY auto_increment FIRST;
DESC test;
-- 删
ALTER TABLE test DROP age;
DESC test;
-- 改: 不改字段名 modify 修改
ALTER TABLE test MODIFY name VARCHAR(50) NOT NULL
AFTER gender;
-- 改字段名 change 修改 类型是必填项
ALTER TABLE test CHANGE favor favorite VARCHAR(255);
DESC test;
修改表的编码格式为utf-8
alter table 表名 default character set utf8;
修改表数据
-- php程序员 改为 php软件工程师
UPDATE 表名 SET 部门字段名='php软件工程师' WHERE 部门字段名='php程序员';
-- 把 XX 的年龄改为29岁, 薪资改为9000
UPDATE 表名 SET 年龄字段名=29, 薪资字段名=9000 WHERE `名字字段名`='XX';
查表
查看所有的表
use 数据库名;
show tables;
查看表结构
desc 表名;
查看表的所有项目
select * from 表名
查 where的使用
SELECT * FROM 表名 WHERE 字段='条件';
查询出不符合此条件的所有数据
SELECT * FROM 表名 WHERE 字段 !='条件';
大于 小于 适合用于 数字类型
SELECT * FROM 表名 WHERE 数字类型字段 < 条件;
查 or and的使用
or 或者 满足其中之一就可以
SELECT * FROM 表名 WHERE 字段=条件1 OR 字段=条件2;
and 并且 需要同时满足两个条件
SELECT * FROM 表名 WHERE 字段=条件 AND 字段=条件;
查 in的使用
in 等于多个 or
SELECT * FROM 表名 WHERE 字段 in (条件1, 条件2);
查 like 的使用
like模糊查找 例 :查找某个字段为好开头的数据
SELECT * FROM 表名 WHERE 题目 LIKE '好%';
查 like 的使用
like模糊查找 例 :查找某个字段为条件开头的数据
SELECT * FROM 表名 WHERE 题目 LIKE '条件%';
like模糊查找 例 :查找某个字段为包含的数据
SELECT * FROM 表名 WHERE 题目 LIKE '%条件%';
搜索名字是两个字的员工
SELECT * FROM 表名 WHERE 名字 LIKE '__';
搜索名字是三个字的员工
SELECT * FROM 表名 WHERE 名字 LIKE '___';
搜索题目 最少6个字数据
SELECT * FROM 表名 WHERE 字段 LIKE '______%';
模糊查找 limit 的使用
只显示前10条数据
-- limit 序号, 数量 1页
SELECT * FROM 表名 LIMIT 0, 10;
2页
SELECT * FROM 表名 LIMIT 10, 10;
3页
SELECT * FROM 表名 LIMIT 20, 10;
分组查询 group by的使用
分组的第一个用法是数据去重
查询出 表中的所有新闻作者, group by 按...分组
SELECT 作者名 FROM 表名 GROUP BY 作者名;
配合聚合函数使用
查询出每个作者的新闻数量
SELECT 作者名字段, COUNT(*) FROM 表名 GROUP BY 作者名字段;
分组查询 group by 配合聚合函数使用
-- 查询出表中, 每个部门的平均薪资
SELECT 部门字段名, AVG(薪资字段名) FROM 表名 GROUP BY 部门字段名;
-- 每个部门的最小年龄
SELECT 部门字段名, MIN(年龄字段名)FROM 表名 GROUP BY 部门字段名;
-- 每个部门的最大薪资
SELECT 部门字段名, max(薪资字段名) FROM 表名 GROUP BY 部门字段名;
-- 每个部门的总薪资
SELECT 部门字段名, sum(薪资字段名) FROM 表名 GROUP BY部门字段名;
-- 每个部门的员工数量
SELECT 部门字段名, count(*) FROM 表名 GROUP BY 部门字段名;
分组查询 group by 配合 where使用
先写 where 再写 group by
例:
查询出每个部门中, 年龄大于25岁的人的平均薪资
SELECT 部门字段名, AVG(薪资字段名) FROM 表名
WHERE 年龄字段名>25
GROUP BY 部门字段名
查询出每个部门中, 年龄大于25岁的人并且平均薪资>1000的人
HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。
HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。
select 部门字段名,avg(薪资字段名) from 表名 where 年龄字段名>25
group by 部门字段名 HAVING AVG(薪资字段名)>10000;
条件可以使用() 括起来, 组成一个条件
SELECT * FROM 表名 WHERE (字段名 BETWEEN 条件 AND条件 AND
字段名>条件) OR 字段名>条件;
排序查询
排序 order by 默认升序 从小到大
SELECT * FROM 表名 ORDER BY 字段;
-- 从大到小, 添加 DESC 关键词, 降序
SELECT * FROM 表名 ORDER BY 字段名 DESC;
-- 查询出每个部门的平均年龄, 从小到大排序
SELECT 部门字段名, AVG(年龄字段名) FROM 表名
GROUP BY 部门字段名
ORDER BY AVG(年龄字段);
-- 查询出每个诗人的作品数量, 从大到小排列
SELECT COUNT(*), 诗人字段名 FROM 表名
GROUP BY 诗人字段名
ORDER BY COUNT(*) DESC;
-- 查询出每个诗人的作品数量, 只有题目超过5个字的
-- 才计算在内, 只显示数量大于10个的诗人. 按照数量
-- 从大到小排序
SELECT 诗人字段名, COUNT(*) FROM 表名
WHERE 题目字段名 like '_____%'
GROUP BY 诗人字段名
HAVING COUNT(*)>10
ORDER BY COUNT(*) DESC;
子查询的使用
-- 查询出薪资比 XX高的人
SELECT * FROM 表名 WHERE 字段名>(
SELECT 薪资字段 FROM 表名 WHERE `名字字段`='XX'
);
-- 查询出XX的同事
SELECT * FROM 表名 WHERE 部门字段=(
SELECT 部门字段 FROM 表名 WHERE `名字字段`='XX'
) and `名字字段` != 'XX';
有点绕,可以理解为,搜索XX的部门,显示名字不是XX的同事
-- 查询出李强的同事的平均薪资
SELECT AVG(薪资) FROM 表名 WHERE 部门字段=(
SELECT 部门字段 FROM 表名 WHERE `名字字段`='李强'
) and `名字字段` != '李强';
-- 查询出比美工部门平均薪资高的其他部门的人
SELECT * FROM employee WHERE
salary>(
SELECT AVG(salary) FROM employee where job='美工'
) AND job != '美工';
-- 查询出平均薪资比行政人员平均薪资高的部门
-- 用 group by job
SELECT job FROM employee
GROUP BY job
HAVING AVG(salary)> (
SELECT AVG(salary) FROM employee WHERE job='行政人员'
);
-- 查询出每个诗人的作品数量, 只有题目超过5个字的
-- 才计算在内, 只显示数量大于10个的诗人. 按照数量
-- 从大到小排序
SELECT d_authorin, COUNT(*) FROM t_shi
WHERE D_TITLE like '_____%'
GROUP BY D_AUTHORIN
HAVING COUNT(*)>10
ORDER BY COUNT(*) DESC;
-- 查询出比每个部门平均薪资都要高的人 all全部
select * from employee where salary>all(
select avg(salary) from employee group by job
);
-- 查询出与任意部门最低年龄相等的人 in 配合相等操作, 与任意一个查询结果相等
select * from employee where age in (
select min(age) from employee group by job
);
mysql 字段约束
- – UNSIGNED无符号, 无符号符号约束必须直接写在类型的后面
age TINYINT UNSIGNED
- – 不填写此值, 默认是2, 插入null不会触发默认值设定, 会是null
字段名字 TINYINT UNSIGNED DEFAULT 2
- – 非空约束 not null
favor VARCHAR(255) NOT NULL DEFAULT '未知',
- – 唯一性约束 UNIQUE
phone VARCHAR(255) UNIQUE,
- – 主键: 用来给每条数据添加一个唯一标识
-- PRIMARY KEY 主键
, 作用是唯一性 - – auto_increment 如果是null, 则自动分配一个数字作为值
id INT UNSIGNED PRIMARY KEY auto_increment
后续想到什么还会继续补充…
上一篇: Android: Fragment (Trying to instantiate a class that is not a Fragment)
下一篇: AIX如何管理LPP及强制删除LPP
推荐阅读
-
mysql的一些方法和例子
-
实现基于php和MySQL的动态树型菜单
-
MySQL忘记root密码的解决方法_MySQL
-
mysql数据库中的information_schema和mysql可以删除吗?_MySQL
-
php程序随机记录mysql rand()造成CPU 100%的解决方法
-
使用Java设置字型和颜色的方法详解
-
mysql中int、bigint、smallint和tinyint的区别与长度_MySQL
-
MariaDB与MySQL并存时的分别登陆方法
-
PHP函数addslashes和mysql_real_escape_string的区别_PHP教程
-
MySQL存储引擎中的MyISAM和InnoDB区别详解_MySQL