登录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);