数据库
来源:互联网 发布:同花顺软件开发怎么样 编辑:程序博客网 时间:2024/05/19 06:37
1. 数据库操作
(1) 创建
~创建一个名称为mydb1的数据库。 create database mydb1; ~创建一个使用gbk字符集的mydb2数据库。 create database mydb2 character set gbk; ~创建一个使用utf8字符集,并带校对规则的mydb3数据库。 create database mydb3 character set utf-8 collate utf8_bin;
(2) 查看
~查看当前数据库服务器中的所有数据库 show databases;~查看前面创建的mydb2数据库的定义信息 show create database mydb3;
(3) 修改
~查看服务器中的数据库,并把其中mydb2字符集修改为utf8 alter database mydb2 character set utf8;
(4) 删除
~删除前面创建的mydb1数据库 drop database mydb1; drop database mydb1;
(5) 选择
进入数据库: use db_name;查看当前所选的数据库: select database();
2. 表
(1) 创建
~创建一个员工表employee create table employee( id int primary key auto_increment, name varchar(20) unique, gender bit not null, birthday date, entry_date date, job varchar(40), salary double, resume text );
(2) 查看
~查看当前数据库中所有表: show tables ~显示employee表的信息 show table status like 'employee' \G;
(3) 修改
~在上面员工表的基本上增加一个image列。 alter table employee add image blob; ~修改job列,使其长度为60。 alter table employee modify job varchar(60); ~删除gender列。 alter table employee drop gender; ~表名改为user。 rename table employee to user; ~修改表的字符集为gbk alter table user character set gbk; ~列名name修改为username alter table user change name username varchar(20);
(4) 删除
~删除user表 drop table user;
3. 表记录
(1) 插入 insert
~使用insert语句向表中插入三个员工的信息 insert into employee (id,name,gender,birthday,entry_date,job,salary,resume)values (null,'张飞',1,'1999-09-09','1999-10-01','打手',998.0,'老大的三弟,真的很能打'); insert into employee values (null,'关羽',1,'1998-08-08','1998-10-`这里写代码片`01','财神爷',9999999.00,'老大的二弟,公司挣钱都指着他了'); insert into employee values (null,'刘备',0,'1990-01-01','1991-01-01','ceo',100000.0,'公司的老大'),(null,'赵云',1,'2000-01-01','2001-01-01','保镖',1000.0,'老大贴身人');
(2) 修改 update
~将所有员工薪水修改为5000元。 update employee set salary = 5000;~将姓名为’张飞’的员工薪水修改为3000元。 update employee set salary = 3000 where name='张飞';~将姓名为’关羽’的员工薪水修改为4000元,job改为ccc。 update employee set salary=4000,job='ccc' where name='关羽';~将刘备的薪水在原有基础上增加1000元。 update employee set salary=salary+1000 where name='刘备';
(3) 删除 delete
如果不使用where子句,将删除表中所有数据。
~删除表中名称为’张飞’的记录。 delete from employee where name='张飞'; ~删除表中所有记录。 delete from employee; ~使用truncate删除表中记录。 truncate table employee;
(4) 基本查询 select
~1. 基本查询
~查询表中所有学生的信息。 select * from exam; ~查询表中所有学生的姓名和对应的英语成绩。 select name,english from exam; ~过滤表中重复数据 select distinct english from exam; ~在所有学生分数上加10分特长分显示。 select name , math+10,english+10,chinese+10 from exam; ~统计每个学生的总分。 select name ,english+math+chinese from exam; 使用别名表示学生总分。 select name as 姓名 ,english+math+chinese as 总成绩 from exam; select name 姓名 ,english+math+chinese 总成绩 from exam; select name english from exam;
~2. 使用where进行过滤查询
~查询姓名为张飞的学生成绩 select * from exam where name='张飞'; ~查询英语成绩大于90分的同学 select * from exam where english > 90; ~查询总分大于230分的所有同学 select name 姓名,math+english+chinese 总分 from exam where math+english+chinese>230; ~查询英语分数在 80-100之间的同学。 select * from exam where english between 80 and 100; ~查询数学分数为75,76,77的同学。 select * from exam where math in(75,76,77); ~ 查询所有姓张的学生成绩。 ~ %:表示任意0个或多个字符。 ~ _: 表示任意单个字符。 select * from exam where name like '张%'; select * from exam where name like '张__'; ~查询数学分>70,语文分>80的同学。 select * from exam where math>70 and chinese>80;
~3.使用order by关键字对查询结果进行排序操作
asc 升序 – 默认就是升序
desc 降序
~对语文成绩排序后输出。 select name,chinese from exam order by chinese desc; ~对总分排序按从高到低的顺序输出 select name ,chinese+math+english 总成绩 from exam order by 总成绩 desc;~对姓张的学生成绩排序输出 select name 姓名,chinese+math+english 总成绩 from exam where name like '张%' order by 总成绩 desc;
~4.聚合函数
(1)Count – 用来统计符合条件的行的个数
~统计一个班级共有多少学生? select count(*) from exam;~统计数学成绩大于90的学生有多少个? select count(*) from exam where math>70;~统计总分大于230的人数有多少? select count(*)from exam where math+english+chinese > 230;
(2)SUM – 用来将符合条件的记录的指定列进行求和操作
~统计一个班级数学总成绩? select sum(math) from exam;~统计一个班级语文、英语、数学各科的总成绩 select sum(math),sum(english),sum(chinese) from exam; ~统计一个班级语文、英语、数学的成绩总和 select sum(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0))
~统计一个班级语文成绩平均分 select sum(chinese)/count(*) from exam;
(3)AVG – 用来计算符合条件的记录的指定列的值的平均值
~求一个班级数学平均分? select avg(math) from exam;~求一个班级总分平均分? select avg(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;
~5.分组查询
~对订单表中商品归类后,显示每一类商品的总价 select product,sum(price) from orders group by product;~询购买了几类商品,并且每类总价大于100的商品 select product 商品名,sum(price)商品总价 from orders group by product having sum(price)>100;
where子句和having子句的区别:
where子句在分组之前进行过滤,having子句在分组之后进行过滤having子句中可以使用聚合函数,where子句中不能使用很多情况下使用where子句的地方可以使用having子句进行替代
~查询单价小于100而总价大于150的商品的名称 select product from orders where price<100 group by product having sum(price)>150; ~sql语句书写顺序: select from where groupby having orderby~sql语句执行顺序: from where select group by having order by
~~备份恢复数据库备份: 在cmd窗口下 mysqldump -u root -p dbName>c:/1.sql恢复: 方式1:在cmd窗口下 mysql -u root -p dbName<c:/1.sql 方式2:在mysql命令下, source c:/1.sql 要注意恢复数据只能恢复数据本身,数据库没法恢复,需要先自己创建出数据后才能进行恢复.
(6) replace语句
INSERT和REPLACE语句的功能都是向表中插入新的数据。这两条语句的语法类似。
它们的主要区别是如何处理重复的数据。
我们在使用数据库时可能会经常遇到这种情况。如果一个表在一个字段上建立了唯一索引,当我们再向这个表中使用已经存在的键值插入一条记录,那将会抛出一个主键冲突的错误。当然,我们可能想用新记录的值来覆盖原来的记录值。如果使用传统的做法,必须先使用 DELETE语句删除原先的记录,然后再使用INSERT插入新的记录。
而在MySQL中为我们提供了一种新的解决方案,这就是REPLACE语句。使用 REPLACE插入一条记录时,如果不重复,REPLACE就和INSERT的功能一样,如果有重复记录,REPLACE就使用新记录的值来替换原来的记录值。
使用REPLACE的最大好处就是可以将DELETE和INSERT合二为一,形成一个原子操作。这样就可以不必考虑在同时使用DELETE和INSERT时添加事务等复杂操作了。
在使用REPLACE时,表中必须有唯一索引,而且这个索引所在的字段不能允许空值,否则REPLACE就和INSERT完全一样的。在执行REPLACE后,系统返回了所影响的行数。
如果返回1,说明在表中并没有重复的记录。
如果返回2,说明有一条重复记录,系统自动先调用了DELETE删除这条记录,然后再记录用INSERT来插入这条记录。
如果返回的值大于2,那说明有多个唯一索引,有多条记录被删除和插入。