MySQL数据库1-mysql数据库基础

常见的数据库软件

数据库软件,存储和管理数据的仓库。
1、Oracle: 是甲骨文公司的产品。满足中大型应用。和java语言兼容性非常好的。
2、SQL Server: 是微软公司的产品。和net平台(c#语言)兼容最好。
3、DB2: 是IBM的产品。
4、mysql:开源的数据库产品。和java语言兼容非常好。满足中小型应用。
5、mangoDB: noSQL数据库
注:mysql:满足中小型应用
  oracle:满足中大小应用

sql语句分类

1、数据库定义语句(DDL):create、alter、drop
2、数据库操作语句(DML):insert、update、delete、truncate
3、数据库查询语句(DQL):select、show

MySQL数据库基本使用

连接MySQL:mysql -u root -p

管理数据库

1、查看所有数据库:show databases;
2、创建新的数据库:create database day14;
   指定字符集:create database day15 default character set gbk;
3、修改数据库(修复数据库的字符集):alter database day15 default character set utf8;
4、删除数据库:drop database day15;

管理表

操作表之前,需要切换数据库:  use 数据库名称     例如  use day14;
1、创建新的表(create table):create table 表名(字段名称 字段类型,字段名称 字段类型.....);
  create table student(
    id int,
    name varchar(20),
    age int
  );
2、修改表(alter table)
  添加字段:alter table student add column gender varchar(1);
  修改字段类型:alter table student modify column gender varchar(2);
  修改字段名称:alter table student change column gender sex varchar(2);
  删除字段:alter table student drop column age;
  修改表名称:alter table student rename to teacher;
3、查看表:desc student;
  查看当前数据库的所有表:show tables;
4、删除表:drop table teacher;  

管理数据

1、插入数据(insert into)
  往学生表插入数据:INSERT INTO student VALUES(1,'张三',20);
  插入部分字段:INSERT INTO student(id,NAME) VALUES(2,'李四');
2、修改数据(update)
  批量操作(不建议经常使用这种):UPDATE student SET NAME='张三';
  按条件修改,修改一个字段:修改id为2的学生姓名:UPDATE student SET NAME='李四' WHERE id=2;
  修改多个字段:修改id为1的学生姓名和年龄:UPDATE student SET NAME='王五',age=40 WHERE id=1;
3、删除数据(delete from)
  全表数据删除:DELETE FROM student;
  按条件删除数据:DELETE FROM student WHERE id=2;
  truncate table也可以删除全表数据:TRUNCATE TABLE student;
  注:delete from 和 truncate table 的区别?
    1)delete from删除全部,也可以按条件删除,但是truncate table只能全表删除,不能按条件删除
    2)delete from删除的数据可以回滚,truncate table删除的数据不能回滚。
    3)delete from不可以把自增长约束(auto_increment)重置,truncate table可以把自增长约束(auto_increment)重置
4、查询数据(select)
  1)查询所有字段:SELECT * FROM student;
  2)查询指定的字段:SELECT id,NAME FROM student;
  3)查询时指定别名:SELECT id AS '编号',NAME AS '姓名' FROM student;
    as可以省略:SELECT id '编号',NAME '姓名' FROM student;
  4)查询时添加常量列
    临时使用的列可以通过查询时动态添加进去
    查询学生数据时添加一个"班级"列。值为“java就业班”:SELECT id AS '编号',NAME AS '姓名','java就业班' AS '班级' FROM student;
  5)查询时合并列:查询每个学生的总分:SELECT NAME AS '姓名',(servlet+mysql) AS '总成绩' FROM student;
    注:合并列的字段必须是数值类型的字段。非数值类型合并没有效果:SELECT NAME AS '姓名',(servlet+NAME) FROM student;
  6)查询去除重复记录(distinct):查询有哪些的地区学生:SELECT DISTINCT address FROM student;
  7)条件查询(where)
    (1)逻辑条件: and(与)     or(或)
      查询学生的id为1,且姓名为张三的学生:
        SELECT * FROM student WHERE id=1 AND NAME='张三'; -- (交集,结果数小于或等于任何一个条件的结果数)
      查询学生的id为2,或姓名为张三的学生:
        SELECT * FROM student WHERE id=2 OR NAME='张三';  -- (并集,结果数一定会大于或等于任何一个条件的结果数)
     (2)比较条件: >  <  >=   <=  =  <>  (between and)
      查询servlet分数大于80分的学生:
        SELECT * FROM student WHERE servlet>80;
      查询mysql分数小于或等于85分的学生:
        SELECT * FROM student WHERE mysql<=85;
        SELECT * FROM student WHERE mysql<85 OR mysql=85;
      查询servlet分数大于或等于80分,且小于或等于85分的学生:
        SELECT * FROM student WHERE servlet>=80 AND servlet<=85;
        上面sql代替的语法:SELECT * FROM student WHERE servlet BETWEEN 80 AND 85; -- 在..。之间(包前包后)
      查询年龄不等于30岁的学生:
        SELECT * FROM student WHERE age<>30;
    (3)判空条件: is null , is not null, ='' , <>''
      查询没有性别数据的学生(数据‘男’或‘女’):
        SELECT * FROM student WHERE gender IS NULL OR gender='';
      查询有性别数据的学生:
        SELECT * FROM student WHERE gender IS NOT NULL AND gender<>'';
    (4)模糊条件: like
      模糊替代符号:
      %: 替代任意个字符
      _: 替代一个字符
     查询姓‘李’的学生:SELECT * FROM student WHERE NAME LIKE '李%';
     查询姓名中包含‘四’字的学生:SELECT * FROM student WHERE NAME LIKE '%四%';
     查询姓‘李’,全名只有两个字的学生:SELECT * FROM student WHERE NAME LIKE '李_';
  8)聚合查询
    查询所有学生servlet的总分 (SUM: 求和函数):SELECT SUM(servlet) FROM student;
    查询所有学生servlet的平均分(AVG; 平均函数):SELECT AVG(servlet) FROM student;
    查询最高的servlet分数(MAX:最大值函数):SELECT MAX(servlet) FROM student;
    查询最低的servlet分数(MIN:最小值函数):SELECT MIN(servlet) FROM student;
    查询学生数量(COUNT: 统计数量函数):
      SELECT COUNT(*) FROM student;
      SELECT COUNT(id) FROM student; -- 效率会比count(*)效率稍高
  注意:聚合函数,会排除null值的数据
  9)分页查询(limit)
    limit 起始行数,查询的行数(起始行数从0开始)
    学生共20条数据,每页显示5条,共4页
    看第3页(第11到15条)的学生数据sql:select * from student limit 10,5;
    看第4页(第16到20条)的学生数据sql: select * from student limit 15,5;
      结论:分页查询当前页数据的sql: select * from student limit (当前页码-1)*每页显示条数,每页显示条数;
    查询第1,2条数据:SELECT * FROM student LIMIT 0,2;
    查询第3,4条数据:SELECT * FROM student LIMIT 2,2;
  10)查询后排序(order by)
    desc: 降序。数值从大到小,字母z-a
    asc: 升序。数值从小到大,字母a-z
    按照id的升序排序:SELECT * FROM student ORDER BY id ASC;
    按照servlet成绩降序排序:SELECT * FROM student ORDER BY servlet DESC;
  注:多个排序条件的情况:先按照前面的条件排序,当出现重复记录,再按照后面的条件排序
    按照age升序,按照servlet成绩升序排序:SELECT * FROM student ORDER BY age ASC,servlet ASC;
  11)分组查询(group by)
    查询每个地区有多少人
    (1)对地区进行分组  
    (2)在分组的基础可以进行统计,统计的是每组的数据
      SELECT address,COUNT(*) FROM student GROUP BY address;
    统计男女的人数:注:where条件必须放在group by分组之前
      SELECT gender,COUNT(*) FROM student  WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender;
  12)分组查询后筛选(group by + having(条件))
    查询哪些地区的人数大于2个的地区
    注:having使用在group by分组之后的,对分组后的条件进行筛选
    SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>2 ;

MySQL字段类型

1、char(20): 固定长度的字符串。不管实际存储的数据的大小,一定占用20个字符空间
2、varchar(20): 可变长度的字符串。占用的空间大小就是实际存储的数据大小。
3、int: 默认最多11位,长度根据实际存储的数值的长度
4、int(4):固定的数组长度
  CREATE TABLE test(
    id1 INT,
    id2 INT(4) ZEROFILL -- zerofill: 零填充
  )
  结果:id1:1
             id2:0001
5、float/double:浮点数。
7、date: 日期
7、datetime: 日期+时间
8、timestamp: 时间戳,用于记录当前数据的插入或更新的时间,会自动进行时区的转换
9、time: 时间
10、year: 年份
11、blob:二进制数据
12、text:字符数据
 
 

猜你喜欢

转载自www.cnblogs.com/sunny-sml/p/12081353.html
今日推荐