Mysql数据库(一)

什么是关系型数据库?

  1. 关系数据库:是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。简单说来就是关系型数据库用了选择、投影、连接、并、交、差、除、增删查改等
    数学方法来实现对数据的存储和查询。可以用SQL语句方便的在一个表及其多个表之间做非常复杂的数据查询。安全性高。
  2. 非关系型数据库:简称NOSQL,是基于键值对的对应关系,并且不需要经过SQL层的解析,所以性能非常高。但是不适合用在多表联合查询和一些较复杂的查询中。NoSQL用于超大规模数据的存储。

目录

Chapter 1Chapter 2Chapter 3Chapter 4
启动MySQLMySQL基本操作MySQL面试常问知识点other

内容

启动MySQL

MySQL是一种关联数据库管理系统 由于其体积小、速度快、总体拥有成本低、MySQL软件采用了双授权政策,分为社区版和企业版。

  • 以下内容都是基于centos6系统的,和其它系统可能存在不同

    • 安装MySQL:

        	- yum install mysql-server  //安装MySQL服务器
        	
        	- yum install mysql-client  //安装MySQL客户端,通过这个才能访问数据库
      
    • 使用MySQL:

        	- /etc/init.d/mysqld start  //启动MySQL服务
        	
        	- mysql -uroot  //以root用户登录
      
    • 修改密码:

        	- mysql> set password=password("123456");
      
    • 查看数据库:

        	- mysql> show databases;
      
    • 退出:

        	- mysql> quit
        	- mysql> exit
      

MySQL基本操作

  • DDL、DML

  • CURD
    增(create)、删(delete)、改(update)、查(Retrieve)操作。

    1.管理数据库语句:

    • 使用数据库:

        			use test;
      
    • 添加数据库:

        			create database 数据库名;
      
        			create database test;
      
    • 修改数据库:

        			alter database 数据库名;
      
        			alter database test;
      
    • 删除数据库:

        			drop database 数据库名;
      
        			drop database test;
      
    • 查看所有数据库:

        			show databases;
      

    2.管理表语句:

    • 添加数据表:

        			create table 表名(
      
        			  列名 数据类型 数据约束,
      
        			  列名 数据类型 数据约束
      
        			);
        			create table student(
      
        			  name varchar(20) not null,
      
        			  age int(4)
      
        			)
      
    • 修改数据表:

        			alter table 表名;
      
        					1)在表中增加新字段
      
        					alter table student add colunm name varchar(20);
      
        					2)删除表中的字段
      
        					alter table student drop name;
      
        					3)修改表中字段的类型
      
        					alter table student modify name varchar(10);
      
    • 删除数据表:

        			drop table 表名;
      
        			drop table student;
      
    • 查看所有表:

        			show tables;
      

    ** DML **
    3.管理数据语句:

    • 插入数据:

        			insert into 表名 (列1,列2...)  values (值1,值2...);
      
        			insert into student (name,age) values ('张三',20);
      
    • 更新数据:

        			update 表名 set 列=修改值 where 条件;
      
        			update student set  name='李四' where name='张三';
      
    • 删除数据:

        			delete from 表名 where 条件;
      
        			delete from student where name='李四';
      
    • 查询数据:

        			selete * from 表名 where 条件;
      
        			selete * from student where name='张三';
      

    4.各种查询语句:

    • 查询时指定别名:

        			1) selete id AS '编号',name AS '姓名' from student;
      
        			2) selete id '编号',name '姓名' from student;(AS可以省略)
      
    • 查询时合并列:

        			需求:查询每个学生的总分
      
        			selete name AS '姓名',(servlet+mysql) AS '总成绩' from student;
      
        			注意:合并列的字段必须是数值类型的字段
      
    • 查询时去除重复(distinct):

        			需求:查询有哪些地区的学生
      
        			selete DISTINCT address from student;
      
        			另一种语法
      
        			selete DISTINCT(address) from student;
      
    • 条件查询:

      • 逻辑条件: and or

          				需求:查询学生的id为1,且姓名为张三的学生
        
          				selete * from student where id=1 and name='张三';(交集)
        
          				需求:查询学生的id为2,或姓名为张三的学生
        
          				selete * from student where id=2 or name='张三';(并集)
        
      • 比较条件: > < >= <= = <> (between and–在…之间 包前包后)

          				需求:查询servlet分数大于80分的学生
        
          				selete * from student where servlet>80;
        
          				需求:查询mysql分数小于或等于85分的学生
        
          				selete * from student where mysql<=85;
        
          				需求:查询servlet分数大于或等于80分,且小于或等于85分的学生
        
          				selete * from student where servlet>=80 AND servlet<=85;
        
          				代替上面语句的语法
        
          				selete * from student where servlet BETWEEN 80 AND 85;
        
          				需求:查询年龄不等于30的学生
        
          				selete * from student where age<>30;
        
      • 判空条件: is null, is not null, =’’, <>’’

          				**Null:表示没有数据**
        
          				**空字符:表示有数据**
        
          				需求:查询没有性别数据的学生(数据‘男’或‘女’)
        
          				selete* from student where gender IS NULL OR gender='';
        
          				需求:查询有性别数据的学生
        
          				selete * from student where gender IS NOT NULL AND gender<>'';
        
      • 模糊条件: like

          				模糊替代符号:
        
          				**%:替代任意个字符**
        
          				**_:替代一个字符**
        
          				需求:查询姓“李”的学生
        
          				SELECT * FROM student WHERE NAME LIKE '李%';
        
          				需求:查询姓名中包含‘四’字的学生
        
          				SELECT * FROM student WHERE NAME LIKE '%四%';
        
          				需求:查询姓‘李’,全名只有两个字的学生
        
          				SELECT * FROM student WHERE NAME LIKE '李_';
        
      • 聚合函数查询(用于统计结果)

          		Max()取最大值  min()取最小值  avg()取平均值  count()统计标的记录数量 sum()求和
        
          		需求:查询servlet的最高分
        
          		SELECT MAX(servlet) FROM student;
        
          		需求:查询mysql的最低分
        
          		SELECT MIN(mysql) FROM student;
        
          		需求:查询servlet的平均分
        
          		SELECT AVG(servlet) FROM student;
        
          		需求:查询当前有几个学生
        
          		SELECT COUNT(*) FROM student;
        
          		需求:查询servlet成绩的总和
        
          		SELETE SUM(servlet) from student;
        
      • 分页查询(limit)

          		**Limit起始行数,查询的行数**
        
          		**起始行数从0开始**
        
          		需求:查询第1,2条数据
        
          		SELECT * FROM student LIMIT 0,2;
        
          		分页查询需知道:当前页码,每页显示条数
        
          		结论分页查询当前页数据:select * from student limit (当前页码-1)*每页显示条数,每页显示条数;
        
          		需求:学生共20条数据,每页显示5条,共4页
        
          		查询第3页(第11到15条)的学生数据:select * from student limit 10,5;
        
      • 查询后排序(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;
        
      • 分组查询(group by)

          		需求:查询每个地区有多少人
        
          		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;
        
      • 分组后筛选(having)

          需求:查询哪些地区的人数是大于2个的地区
        
          查询哪些地区多少人 2)筛选人数大于2的地区
        
          注意:having使用在group by分组之后,对分组后的条件进行筛选
        
          SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>2;
        

      5.数据约束(给表添加数据约束,从而约束用户操作表数据的行为)

      1)默认值约束(default)

        			create table test(
      
        			  name varchar(20),
      
        			  gender varchar(20) default ‘男’
      
        			)
      
        			需求:当不插入gender的时候,分配一个‘男’的默认值
      
        			注意:1)当没有插入gender字段的时候,分配一个默认值
      

      2)非空约束(not null)

        			create table test(
      
        			  name varchar(20) not null,
      
        			  gender varchar(20)
      
        			)
      
        			需求;name字段一定要有值(不能不插入数据,不能是null),这是给name添加非空约束
      
        			1)非空约束,不能不插入值
      
        			Insert into test(gender) values(‘男’);
      
        			2)非空约束,不能插入null
      
        			Insert into test(name,gender) values(null,’男’);
      

      3)唯一约束(unique)

        			create table test(
      
        			  Id int unique,
      
        			  name varchar(20)
      
        			)
      
        			需求:id的值不能出现重复。这时就要给id添加一个唯一约束
      
        			1)不能插入重复的值
      
        			2)唯一约束,可以插入多个null。所以唯一约束不能约束null
      
        			Insert into test(id,name) values(1,’张三’);
      

      4)主键约束(primary key)(唯一+非空)

        			注意;
      
        			1)通常情况下,我们会给每张表都设置一个主键字段,用来标记记录的唯一性
      
        			2)但是不建议把业务含义字段作为主键,因为随着业务的变化,业务字段可能出现重复
      
        			3)建议给每张表都独立添加一个叫id的字段,把这个id字段设置成主键,用来作为记录的唯一性
      
        			create table test(
      
        			  Id int primary key,
      
        			  name varchar(20)
      
        			)
      
        			4)唯一性
      
        			5)非空性
      

      5)自增长约束(auto_increment)

        			create table test(
      
        			  Id int primary key auto_increment,
      
        			  name varchar(20)
      
        			)
      
        			自增长约束:初始值为0,每次递增1
      
        			使用truncate table 删除数据的时候,可以把自增长的初始值置为0
      

      6)外键约束(原来制约两张表的关系)

        			员工表(副表:被别的表约束的表,外键设置在副表)
      
        			Create table employee(
      
        			  Id int primary key auto_increment,
      
        			  name varchar(20),
      
        			  deptId int,
      
        			  添加外键约束(foreign key)
      
        			  Constraint employee_dept_fk foreign key(deptId) references dept(id)
      
        			                外键名                                    外键字段                
      
        			)
      
        			部门表(主表:约束别人的表)
      
        			Create table dept(
      
        			  Id int primary key auto_increment,
      
        			  Name varchar(20)
      
        			)
      
      • 外键约束在什么情况下会起作用?

          				插入数据:当往副表插入了主表中不存在的数据时,外键起作用
        
          				修改数据:当往副表中修改主表中不存在的数据时,外键起作用
        
          				删除数据:副表中有关联主表数据的情况下,当删除主表数据时,外键起作用
        
      • 当有了外键之后,应该如何管理数据呢?

          				插入数据:先插入主表的数据,再插入副表数据
        
          				修改数据:先修改主表数据,再修改副表数据
        
          				删除数据:先删除副表数据,再删除主表数据
        

      7)级联技术(cascade)

        			级联:当有了外键的时候,我们希望修改或删除数据的时候,修改或删除主表数据时,同时能够影响副表的数据,这时就可以使用级联
      
        			Create table employee(
      
        			  Id int primary key auto_increment,
      
        			  name varchar(20),
      
        			  deptId int,
      
        			  添加外键约束(foreign key)
      
        			  添加级联修改:on update cascade
      
        			  添加级联修改:on delete cascade
      
        			  Constraint employee_dept_fk foreign key(deptId) references dept(id) on update cascade on delete cascade
      
        			                 外键名                               外键字段 
      
        			);
      
        			部门表(主表:约束别人的表)
      
        			Create table dept(
      
        			Id int primary key auto_increment,
      
        			Name varchar(20)
      
        			);
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值