自己的MySQL入门学习

数据库的创建备份等基本操作(1)
登陆数据库  mysql -uroot -p
创建数据库mydb1  create database mydb1;
查看数据库  show databases;
创建一个使用utf-8字符集的mydb2的数据库  create database mydb2 character set utf8;
创建一个使用utf-8字符集的mydb3的数据库,并带校对规则(一般默认utf8_general_ci不改)  
 create database mydb3 character set utf8 collate utf8_general_ci;
查看库的创建信息  show create database mydb3;
删除前面创建的数据库mydb1  drop database mydb1;
查看服务器中的数据库,并把其中某一个库的字符集改为gb2312  
 alter database mydb2 character set gb2312; 
 show create database mydb2;
备份库中的数据,并恢复(中间文件为脚本文件)
 a.备份库:1,准备库的数据
   create database mydb1;
   use mydb1;
   create table test
   (
    id int
   );
   insert into test(id) values(1);
   2.备份mydb1(windows命令)
   mysqldump -uroot -p mydb1>c:\test1.sql
   3.恢复库(mysql命令)
   create database mydb1;
   use mydb1;
   source c:\test1.sql(没有分号)
 以上为第一种方式,以执行脚本文件的方式
 b.(windows命令)
  create database mydb1;(还是要先在数据库里创建库mydb1)
  mysql -uroot -p mydb1<c:\test1.sql
  
数据库的使用(2)
1.创建表-->创建一个员工表
   id   整形
   name  字符形
   gender  字符形
   birthday 日期形
   Entry_date 日期形
   job   字符形
   salary  小数形
   resume  大文本形
  use mydb1; 进入库
  create table employ
  (
   id int,
   name varchar(20),
   gender varchar(4),
   birthday date,
   entry_date date,
   job varchar(40),
   salary double,
   resume text
  )character set utf8 collate utf8_general_ci;
  
2.修改表(add,modify,drop)
 alter table table_name add (column datatype...); 增加一列
 alter table table_name modify (column datatype...); 修改列名或者列的数据类型
 alter table table_name drop (column);    删除一列
 rename table 原来的表名 to 新表名;    修改表名
 alter table table_name character set gb2312; 修改表的字符集
 查看表的创建细节:  show create table employ;
 查看标的结构:desc employ;
 alter table user change column name username varchar(20);  修改列的名称和数据类型

数据库的增删改查1(3)#####################
3.数据库CRUD语句
 insert(增加)  update(更新)  delete(删除)  select(查找)
 1.插入
 insert into table(column,column...) values (value,value....);//字符和日期型数据应包含在单引号中
 插入空值,不指定或者insert into table value(null)
  insert into employee(id,username,birthday,entry_date,job,salary,resume)
   values(1,'aaa','1980-02-03','1989-02-06','bbb',1000,'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
  insert into employee(id,username,birthday,entry_date,job,salary,resume)
   values(2,'小李','1980-02-03','1989-02-06','bbb',1000,'bbbbbbbbbb');
   //出错,它要的是utf8,但写入的是gb2312。
   正确的如下:显式告诉他我插入的是gb2312,然后他就会转成utf8存入
   show variables like 'chara%';//character_set_client:utf8客户端是以utf8存入的,要改成gb2312
   set character_set_client=gb2312; //插入失败后的解决方案
   set character_set_results=gb2312; //显示失败后的执行方案
   insert into employee(id,username,birthday,entry_date,job,salary,resume)
    values(2,'小李','1980-02-03','1989-02-06','bbb',1000,'bbbbbbbbbb');
 2.更新
 update table_name set column1_mane=expr1 [,column2_mane=expr2] [where where_definition]
 set指示要修改哪些列和要给与哪些值,where指定更新哪些行,如果没有where,则更新所有的行
  1,将所有员工的薪水改为5000
   update employee set salary=5000;
  2,将姓名为aaa的员工的薪水改为3000
   update employee set salary=3000 where username='aaa';
  3,将姓名为aaa的员工的薪水改为4000,job改为ccc
   update employee set salary=4000,job='ccc' where username='aaa';
  4,将wu的薪水在原因的基础上增加1000
   update employee set salary=salary+1000;
   
 3.删除
 delete from table_name [where where_defination];
  1.删除表中某一条记录
   delete from employee where username='aaa';
  2.删除表中所有记录
   delete from employee;    //一条一条删除
  3.使用truncate删除表中所有记录
   truncate table employee; //一次性将表全部摧毁
 4.查询
 (1)单纯的显示
 select [distinct] *{cloumn1,column2,column3...} from table_name;
 有distinct就过滤掉所有的数据(数据在c:\student.sql)
  练习:
  1.查询表中所有的学生的信息
   select id,name,chinese,english,math from student;==select * from student;
  2.查询表中所有的姓名和对应的英语成绩
   select name,english from student;
  3.过滤表中重复数据
   select distinct english from student;
   
 (2)在select语句中使用表达式对查询的列进行运算
 select *|{column1|expression,column2|expression,...} from table_name;
  练习:(查询列)
  1.在所有学生的英语分上加10分特长分(只是查询,没有改变数据库里面的值)
   select name,english+10 from student;
  2.统计每个学生的总分
   select name,(english+chinese+math) from student;
   
 (3)在select语句中可使用as语句
 select column as 别名 from 表名;
  练习:(查询列)
  3.使用别名表示学生分数
   select name as 姓名,(english+chinese+math) as 总分 from student;
   //或者:select name 姓名,(english+chinese+math) 总分 from student;
  练习:(查询行)
  1.查询姓名为'王五'的学生的成绩
   select * from student where name='王五';
  2.查询英语成绩大于90分的同学
   select * from student where english>90;
  3.查询总分大于200分的所有同学
   select * from student where (english+chinese+math)>200;
   
数据库的增删改查2(4)#####################
 (4)在where语句中经常使用的运算符
  比较:> < >= <= = <>  
     between...and...
     in(num1,num2)
     like '张pattern'(模糊查询) :pattren为%代表0或多个任意字符,_代表一个字符;
     is null
  逻辑:and  or  not
  练习:
  1.查询英语分数在80-90之间的同学
   select * from student where english>80 and english<90;
   select * from student where english between 80 and 90;
  2.查询数学分数为89,90,91的同学
   select * from student where math=89 or math=90 or math=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;
 
 (5)使用order by子句排序查询结果
  select column1,column2,column3...from table_name order by column asc|desc
  练习:
  1.对数学成绩排序后输出
   select name,math from student order by math;
  2.对总分排序后输出,然后再按从高到低的顺序输出
   select name,(math+english+chinese) from student order by (math+english+chinese) desc;
  3.对姓李的学生成绩排序后输出
   select name,(math+english+chinese) from student where name like '李%' order by (math+english+chinese) desc;
  
 (6)合计函数-count,sum,avg,max/min
  count:
  select count(*) |count(列名) from table_name [where where_definition]
  练习:
  1.统计一个班共有多少学生
   select count(*) from student;//根据行数统计
   select count(name) from student;//根据姓名进行统计,如果有空则少算一行,所以最好用count(*)
  2.统计数学成绩大于90的学生有多少个
   select count(*) from student where math>90;
  3.统计总分大于250的人数有多少
   select count(*) from student where (math+english+chinese)>250;
  sum:
  select sum(列名)[,sum(列名)...] from table_name [where where_definition]
  练习:
  1.统计一个班的数学总成绩
   select sum(math) from student;
  2.统计一个班语文、英语、数学各科的总成绩
   select sum(math),sum(english),sum(chinese) from student;
  3.统计一个班语文、英语、数学的成绩总和
   select sum(math+english+chinese) from student;
  4.统计一个班语文成绩平均分
   select sum(chinese)/count(chinese) from student;
  avg:
  select avg(列名)[,avg(列名)...] from table_name [where where_definition]
  练习:
  1.求一个班级数学平均分
   select avg(math) from student;
  2.求一个班级总分平均分
   select avg(math+english+chinese) from student;
  max/min:
  select max(列名) from table_name [where where_definition]
  练习:
  1.求班级最高分和最低分(数值范围在统计中特别有用)
   select max(chinese+english+math),min(chinese+math+english) from student;
 
 (7)其他语句
 使用group by子句对列进行分组
 select column1,column2... from table_name group by column;
 练习:
  1.对订单中商品归类后,显示每一类商品的价格(有同样的商品买了多次)
   select product,sum(price) from orderer group by product;
 使用having子句过滤(类似where,只是having可以跟在group by 后面)
 select column1,column2... from table_name having column;
 练习:
  1.查询购买了几类商品,并且每类总价大于100的商品
   select product,sum(price) from orderer group by product having sum(price)>100;
 
 (8)时间日期相关函数
  示例:
   select addtime('02:30:30',01:01:01);
   select current_date();
 (9)字符串相关函数
 (10)数字相关函数
 
定义表的约束(5)为了阻止非法数据的录入,约束越严格越好
 1.定义主键约束:
  primary key:不允许为空,不允许重复
   id int primary key;//定义id为主键
   删除主键:alter table table_name drop primary key;
 2.定义主键自动增长//最好不要用,因为有可能我的Id还有自己用,所以最好用uuid算法自己维护
  auto_increment
   id int primary key auto_increment;
 3.定义唯一约束
  unique
   name varchar(20) unique
 4.定义非空约束
  not null
   name varchar(20) unique not null;
 5.定义外键约束//多表使用
  constraint ordersid_FK foreign key(ordersid) references orders(id);
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值