-
对数据库的操作
创建
Create database mydb1;
Create database mydb2 character set gbk;
Create database mydb3 character set gbk COLLATE gbk_chinese_ci;
查询数据库
查看当前数据库服务器中的所有数据库
Show databases;
查看前面创建的mydb2数据库的定义信息
Show create database mydb2;
删除前面创建的mydb3数据库
Drop database mydb3;
修改
查看服务器中的数据库,并把mydb2的字符集修改为utf8;
alter database mydb2 character set utf8;
查看当前使用的数据库
Select database();
切换数据库
Use mydb2;
查看数据库编码的具体信息
Show variables like ‘character%’;
临时更改客户端和服务器结果集的编码
Set character_set_client=gbk;
Set character_set_results=gbk;
-
作数据表
当前数据库中的所有表
SHOW TABLES;
查看表的字段信息
DESC employee;
在上面员工表的基本上增加一个image列。
ALTER TABLE empyee ADD image blob;
修改job列,使其长度为60。
ALTER TABLE employee MODIFY job varchar(60);
删除image列,一次只能删一列。
ALTER TABLE employee DROP image;
表名改为user。
RENAME TABLE employee TO user;
查看表格的创建细节
SHOW CREATE TABLE user;
修改表的字符集为gbk
ALTER TABLE user CHARACTER SET gbk;
列名name修改为username
ALTER TABLE user CHANGE name username varchar(100);
删除表
DROP TABLE user ;
-
插入操作Insert
INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
例句:
INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume)
VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5-','good girl');
-
Update修改
UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值
例句:
将姓名为’aaa’的员工薪水修改为4000元,job改为ccc。
UPDATE emp SET salary=4000,gender='female' WHERE name='lisi';
-
Delete删除
语法 : DELETE 表名 【WHERE 列名=值】
删除表中名称为’zs’的记录。
DELETE FROM emp WHERE name=‘zs’;
-
Select查询
查询关键字:SELECT
语法:
SELECT 列名
FROM 表名
【WHERE --> BROUP BY -->HAVING--> ORDER BY】
1、排序:
通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。
格式:
SELECT * FROM 表名 ORDER BY 字段ASC;
- ASC 升序 (默认)
- DESC 降序
例句:
1.查询所有的商品,按金额进行排序.(asc-升序,desc-降序)
select * from zhangwu order by money asc;
2、聚合
五个聚合函数:
- count:统计指定列不为NULL的记录行数;
- sum:计算指定列的数值和,如果指定列;
- max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串类型不是数值类型,那么计算结果为0排0序运算;
- min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
5.avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
例如:
1. 统计账务表中共有多少条记录
SELECT COUNT(*) FROM zhangwu;
2. 统计账务表中金额大于3000的有多少条记录
SELECT COUNT(*) FROM zhangwu WHERE money>3000;
3. 统计有多少收入的账务信息
SELECT SUM(money) FROM zhangwu WHERE name like '%收入%';
4. 统计出记录中支出的平均值
SELECT AVG(money) FROM zhangwu where name like '%支出%';
5. 统计出商品表中收入的最大与最小值
SELECT MAX(money),MIN(money) FROM zhangwu;
3、分组
分组查询是指使用group by字句对查询信息进行分组
- 格式:SELECT 字段1,字段2… FROM 表名 GROUP BY 字段 HAVING 条件;
例如:
1. 对账务分种类统计,求出每个种类的账务总金额
SELECT parent,SUM(money) FROM zhangwu GROUP BY parent;
2. 对账务分种类统计,求出每个种类的账务总金额,金额要大于500才显示
SELECT parent,SUM(money) FROM zhangwu GROUP BY parent HAVING SUM(money)>500;
内连接,左外连接,右外连接
- 内连接 [INNER] JOIN ON
- 外连接 OUTER JOIN ON
- 左外连接 LEFT [OUTER] JOIN
- 右外连接 RIGHT [OUTER] JOIN
- 全外连接(MySQL不支持)FULL JOIN
内连接:
内连接的特点:查询结果必须满足条件
SELECT * FROM
emp e
INNER JOIN
dept d
ON e.deptno=d.deptno;
左外连接:
左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。
SELECT * FROM
emp e
LEFT OUTER JOIN
dept d
ON e.deptno=d.deptno;
右外连接:
右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL
SELECT * FROM
emp e
RIGHT OUTER JOIN
dept d
ON e.deptno=d.deptno;
触发器
触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行。
CREATE <触发器名>
< BEFORE | AFTER > <INSERT | UPDATE | DELETE > ON <表名> FOR EACH Row
<触发器主体>
例句:
Create trigger trig_insert_stu
After insert on clazz for each row
Insert into clazz values(1,”4ban”,new.id);
存储过程
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
优点
存储过程可封装,并隐藏复杂的商业逻辑。存储过程可以回传值,并可以接受参数。存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。存储过程可以用在数据检验,强制实行商业逻辑等。
缺点
存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。存储过程的性能调校与撰写,受限于各种数据库系统。
注意:
DELIMITER | :这是将sql的结尾设置为“|”符号
例句:
DELIMITER | --------------将结束符该为“|”
Create procedure getCount(in id int,out count int) --------------in是输入,out是输出
Begin --------------执行开始
Select count(*) into count from clazz where sid=id; --------------执行查询
End; | --------------执行开始
调用的时候:
Call getCount(10,@count); |
Select @count; |