1.操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name ~创建一个名称为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 显示数据库创建语句: SHOW CREATE DATABASE db_name ~查看当前数据库服务器中的所有数据库 show databases; ~查看前面创建的mydb2数据库的定义信息 show create database mydb3; (3)修改数据库 ALTER DATABASE [IF NOT EXISTS] db_name [alter_specification [, alter_specification] ...] alter_specification: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name ~查看服务器中的数据库,并把其中mydb2字符集修改为utf8 alter database mydb2 character set utf8; (4)删除数据库 DROP DATABASE [IF EXISTS] db_name ~删除前面创建的mydb1数据库 drop database mydb1; drop database mydb1; (5)选择数据库 进入数据库:use db_name; 查看当前所选的数据库: select database();2.操作表 (1)创建表 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype, )[character set 字符集] [collate 校对规则] field:指定列名 datatype:指定列类型 ~创建一个员工表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)查看表 查看表结构:desc tabName 查看当前数据库中所有表:show tables 查看当前数据库表建表语句 show create table tabName; (3)修改表 ALTER TABLE table ADD/MODIFY/DROP/CHARACTER SET/CHANGE (column datatype [DEFAULT expr][, column datatype]...); *修改表的名称:rename table 表名 to 新表名; ~在上面员工表的基本上增加一个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)删除表 DROP TABLE tab_name; ~删除user表 drop table user;3.操作表记录CRUD (1)INSERT INSERT INTO table [(column [, column...])] VALUES (value [, value...]); 插入的数据应与字段的数据类型相同。 数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。 在values中列出的数据位置必须与被加入的列的排列位置相对应。 字符和日期型数据应包含在单引号中。 插入空值:不指定或insert into table value(null) 如果要插入所有字段可以省写列列表,直接按表中字段顺序写值列表 ~使用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 UPDATE tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] UPDATE语法可以用新值更新原有表行中的各列。 SET子句指示要修改哪些列和要给予哪些值。 WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行 ~将所有员工薪水修改为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语句不能删除某一列的值(可使用update) 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。 同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。 外键约束 删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。 delete from tbl_name [WHERE where_definition] ~删除表中名称为’张飞’的记录。 delete from employee where name='张飞'; ~删除表中所有记录。 delete from employee; ~使用truncate删除表中记录。 truncate table employee; (4)SELECT ~1.基本查询 SELECT [DISTINCT] *|{column1, column2. column3..} FROM table; ~查询表中所有学生的信息。 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); ~查询所有姓张的学生成绩。 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关键字对查询结果进行排序操作 SELECT column1, column2. column3.. FROM table where... order by column asc|desc; 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)) from exam; 在执行计算时,只要有null参与计算,整个计算的结构都是null 此时可以用ifnull函数进行处理 ~统计一个班级语文成绩平均分 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; (4)MAX/MIN -- 用来获取符合条件的所有记录指定列的最大值和最小值 ~求班级最高分和最低分 select max(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam; select min(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