登录MySQL数据库的命令:在windows命令窗口下输入:mysql -u root -p回车后再输入密码。
一、创建数据库
1、语法:create database [if not exists] db_name [character set] [collate];
2、相关解释:1)character set:指定数据库采用的字符集。
2)collate:指定数据库字符集的比较方式、规则,比如排序。
3、案例:
1)创建一个名称为mydb1的数据库。
create database if not exists mydb1;
2)创建一个使用utf8字符集的mydb2数据库。
create database if not exists mydb2 character set utf8;
3)创建一个使用utf8字符集,并带校对规则的mydb3数据库。
create database if not exists mydb3 character set utf8 collate utf8_general_ci;
二、查看、删除数据库
1、显示所有数据库:
show databases;
2、显示某个数据库的创建语句:
show create database db_name;
3、使用某一个数据库:
use db_name;
4、数据库删除语句:
drop database [if exists] db_name;
5、案例:
1)查看当前数据库服务器中的所有数据库。
show databases;
2)查看前面创建的mydb2数据库的定义信息。
show create database mydb2;
3)删除前面创建的mydb1数据库。
drop database if exists mydb1;
三、修改、备份、恢复数据库数据
1、修改数据库
1)语法:alter database db_name [character set] [collate];
2)注意:修改数据库只能修改数据库的编码和校对规则,不能修改数据库的名字。
2、备份数据库表中的数据
首先退到window命令行窗口,然后输入以下语句:
mysqldump -u 用户名 -p 数据库名 > D:\文件名.sql
3、恢复数据库
首先进入mysql控制台,输入以下命令:
source d:\文件名.sql
4、案例:
1)查看服务器中的数据库,并把其中mydb3库的字符集修改为utf8。
alter database mydb3 character set utf8;
2)备份mydb2数据库中的数据,并恢复。
1、退到Window命令行窗口输入:mysqldump -u root -p mydb2 > D:\mydb2.sql
2、进入MySQL数据库服务器:mysql -u root -p
3、执行恢复操作:source d:\mydb2.sql
四、创建表
1、注意:创建表前,要先使用use dbname语句使用库。
2、语法:
create table table_name (field1 datatype,field2 datatype,field3 datatype) character set 字符集 collate 校对规则;
3、解释:field:指定列名 datatype:指定列类型。
4、案例:
创建一个员工表,并指明字符集为utf8。包括以下字段和对应的数据类型:id:整型;name:字符型;sex:字符型;birthday:日期型;entry_date:日期型;job:字符型;salary:小数型;resume:大文本型。
create table employee (id int,name varchar(50),sex char(2),birthday date,entry_date datetime,job varchar(100),salary float,resume text) character set utf8;
5、显示表的所有字段和数据类型信息:desc table_name。
五、修改表
1、增加列:
alter table table_name add (column_name datatype);
2、修改列:
1)修改列的数据类型:alter table table_name modify (column_name datatype);
2)修改列的名称:alter table table_name change column 原列名 新列名 数据类型;
3、删除列:
alter table table_name drop column_name;
4、修改表的名称:
rename table 原表名 to 新表名
5、修改表的字符集:
alter table student character set utf8;
6、案例:
1)在员工表的基础上增加一个image列。
alter table employee add image varchar(20);
2)修改job列,使其长度为60。
alter table employee modify job varchar(60);
3)删除sex列。
alter table employee drop sex;
4)表名改为user。
rename table employee to user;
5)修改表的字符集为utf8。
alter table user character set utf8;
6)列名name修改为username。
alter table user change column name username varchar(20);
六、解决windows平台,中文正确输入和输出的方法
1、显示所有以character开头的变量:show variables like 'character%';
2、修改character_set_client为:set character_set_client=gbk;
3、修改character_set_results为:set character_set_results=gbk;
4、这样的修改只有在当前窗口中有效。
七、数据库的CRUD语句
1、insert语句
1)语法:insert into table_name(column_name) values(value);
2)注意:
a、字符和日期型数据应包含在单引号中。
b、插入空值,不指定或insert into table_name value(null);
c、如果要插入中文,先按上面第六步进行处理。
2、update语句
1)语法:update table_name set column_name=value where 条件
2)案例:
1、将所有员工薪水修改为5000。
update user set salary=5000;
2、将姓名为“张晓明”的员工薪水修改为6000元。
update user set salary=6000 where username='张晓明';
3、将“张晓明”的薪水在原有的基础上增加1000元。
update user set salary=salary+1000 where username='张晓明';
3、delete语句
1)语法:delete from table_name where 条件;
2)注意:使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
删除表中数据也可使用truncate table语句,它和delete语句有所不同。
3)案例:使用truncate删除表中记录。
truncate table user;
4、select语句
1)语法:select [distinct] * | {column1,column2,...} from table_name;
2)解释:distinct可选,指显示结果时,是否剔除重复数据。
3)案例:
1、查询表中所有学生的信息。
select * from student;
2、查询表中所有学生的姓名和对应的英语成绩。
select name,english from student;
3、过滤表中的重复数据。
select distinct * from student;
4)在select语句中课使用表达式对查询的列进行运算。
5)在select语句中可使用as语句。
select column_name as 别名 from 表名;
6)案例:
1、在所有学生基础上加10分特长分。
select name, chinese+10,english+10,math+10 from student;
2、统计每个学生的总分。
select name,chinese+english+math from student;
3、使用别名表示学生分数。
select name,chinese+english+math as 总分 from student;
7)模糊查询like的用法:
1、%代表零个或多个任意字符;
2、_代表一个字符
8)案例:
1、查询英语分数在80-90之间的学生。
select * from student where english between 80 and 90;
2、查询数学分数为89,90,91的同学。
select * from student where math in(89,90,91);
3、查询所有姓“李”的学生成绩。
select * from student where name like "李%";
4、查询数学分>80且语文分>80的同学。
select * from student where math>80 and chinese>80;
9)使用order by子句排序查询结果。
1、语法:select column1,column2,...from table_name order by column_name asc | desc;
2、order by指定排序的列,排序的列既可以是表中的列名,也可以是select子句后指定的列名。
3、asc:升序;desc:降序。
4、order by子句位于select语句的结尾。
5、案例:
(1)对数学成绩排序后输出。
select * from student order by math desc;
(2)对总分排序后输出。
select name,math+chinese+english as 总分 from student order by 总分 desc;
(3)对姓“李”的学生总分排序输出。
select name,chinese+math+english as 总分 from student where name like '李%' order by 总分 desc;
10)使用group by子句对列进行分组:
1、语法:select column1,column2,...from table_name group by column_name;
2、案例:
对订单表中商品归类后,显示每一类商品的总价。
select product ,sum(price) as 总价 from orders group by product;
11)使用having子句组过滤
1、语法:select column1,column2,...from table_name group by column_name having ...;
2、案例:
查询购买了几类商品,并且每类总价大于100的商品。
select product,sum(price) from orders group by product having sum(price)>100;
12)having和where均可实现过滤,但在having可以使用合计函数,having通常跟在group by后,它作用于组。
八、函数
1、合计函数count()
1)语法:select count(*) | count(列名) from table_name [where条件];
2)count(列名)返回某一列,行的总数,除null外。
3)案例:
a、统计一个班级共有多少学生?
select count(*) from student;
b、统计数学成绩大于80的学生有多少个?
select count(math) from student where math>80;
c、统计总分大于250的人数有多少个?
select count(*) from student where math+chinese+english>250;
2、合计函数sum()
1)语法:select sum(列名) {,sum(列名),...}from table_name where 条件。
2)sum函数返回满足where条件的行的总和。
3)sum仅对数值起作用;对多列求和,“,”不能少。
4)案例:
a、统计一个班级数学总成绩。
select sum(math) from student;
b、统计一个班级语文、数学、英语各科的总成绩。
select sum(chinese) as 语文总成绩,sum(math) as 数学总成绩,sum(english) as 英语总成绩 from student;
c、统计一个班级语文、数学、英语的成绩总和。
select sum(chinese+math+english) as 三门课成绩总和 from student;
d、统计一个班级语文成绩平均分。
select sum(chinese)/count(*) as 语文平均成绩 from student;
3、平均函数avg()
1)语法:select avg(列名){,avg(列名),...} from table_name where 条件;
2)avg()函数返回满足where条件一列的平均值。
3)案例:
a、求一个班级数学平均分。
select avg(math) as 数学平均分 from student;
b、求一个班级的总分平均分。
select avg(chinese+math+english) from student;
4、最大最小值函数max()/min()
1)语法:select max(列名) from table_name where 条件。
2)max/min函数满足where条件的一列的最大/最小值。
3)案例:
a、求班级最高分和最低分。
select max(math+english+chinese) as 最高分,min(chinese+math+english) from student;
九、定义表的约束
1、primary key:不允许为空,不允许重复。
删除主键:alter table table_name drop primary key;
2、定义主键自动增长
auto_increment(MySQL特有/UUID类生成)。
3、定义唯一约束:unique
4、定义非空约束:not null
5、定义外键约束:
constraint ordersid_FK foreign key(ordersid) references orders(id);