mysql(一)

一、数据库三层结构

1.所谓安装mysql数据库,就是在客户端安装一个数据库管理系统(DBMS),这个程序可以管理多个数据库。

2.一个数据库可以创建多个表,以存储信息。

3.mysql数据库,普通表的本质仍是文件。

4.数据在数据库中的存储方式:表的一行称为记录,在java程序中,条记录往往用一个对象表示。

5.sql语句分类:

1)DDL:数据定义语句(如create 表 库)

2)DML:数据操作语句(如insert(插入)、update(更新)、delete(删除))

3)DQL:查询语句(select)

4)DCL:数据控制语句(管理数据库,比如用户权限grant、revoke)

二、数据库操作

1.创建数据库

#演示数据库的操作

#创建一个名为myDb01的数据库
create database myDb01;
#删除数据库指令
drop database myDb01;

#创建一个使用utf-8字符集的数据库myDb02
#character set指定数据库采用的字符集,如果不指定,默认是utf8
create database myDb02 character set utf8;

#创建一个使用 utf8 字符集,并带校对规则的 hsp_db03 数据库
#collate 指定数据库字符集的校对规则,utf8_bin区分大小写,utf8_general_ci不区分大小写,默认是#utf8_general_ci
create database myDb02 character set utf8 collate utf8_bin;

#下面是一条查询的 sql , select 查询 * 表示所有字段 from从哪个表 where从哪个字段
select*from table01
where name='tom';

2.查看、删除数据库

#演示删除和查询数据库
#查看当前数据库服务器中的所有数据库
show database;

#查看前面创建的 myDb01 数据库的定义信息
show create database `myDb01`;
#在创建数据库,表的时候,为了规避关键字,可以使用反引号解决
#删除前面创建的 myDb01 数据库
drop database myDb01;

3.备份恢复数据库

sql 复制代码
#备份 myDb01 和 myDb02 库中的数据,并恢复

#备份数据库(在Dos执行)命令行
mysqldump -u root -p -B myDb01 myDb02>d:\\fold.sql;

#恢复数据库(注意:进入 Mysql 命令行再执行)
source d:\\fold.sql;

#备份数据库中的表
mysqldump -u root -p -B myDb01 表1 表2 表n>d:\\文件名.sql;

4.创建表

create table 表名(

field1 datatype,

field1 datatype,

field1 datatype

)character set 字符集 collate 校对规则 engine 存储引擎;

分类 数据类型及其说明
数值类型 BIT(M):位类型,M指定位数,默认值为1,范围是1-64 TINYINT[UNSIGNED]:占一个字节,带符号的范围是-128-127,无符号0-225,默认是有符号 SMALLINT[UNSIGNED] :2个字节,带符号的范围是-2^15-2^15-1,无符号0-2^16-1 MEDIUMINT[UNSIGNED]: 3个字节,带符号的范围是-2^23-2^23-1,无符号0-2^24-1 INT[UNSIGNED]:4个字节,带符号的范围是-2^31-2^31-1,无符号0-2^32-1 BIGINT[UNSIGNED] :8个字节,带符号的范围是-2^63-2^63-1,无符号0-2^64-1 FLOAT[UNSIGNED]:占用空间四个字节 DOUBLE[UNSIGNED]:表示比FLOAT精度更大的小数,占用8个字节 DECIMAL(M,D)[UNSIGNED]:定点数M指定长度,D表示小数点的位数
文本、二进制类型 char(size):固定长度字符串,最大长度为225 varchar(size):可变长度字符串,长度最大为2^16-1 BLOB LONGBLOB:BLOB二进制数据0-2^16-1,LONGBLOB二进制数据0-2^32-1 TEXT LONGTEXT:文本TEXT 0-2^16-1,LONGTEXT 0-2^32-1
时间、日期 DATE/DATETIME/TimeStamp:日期类型(YYYY-MM-DD)(YYYY-MM-DD HH:MM:SS),TimeStamp表示时间戳,它可以自动记录insert、update操作的时间
[mysql常用数据类型]

使用规范:在满足需求的情况下,尽量选用占用空间小的。

5.修改表

使用ALTER TABLE语句追加、修改或删除的语法

|-----|-------------------------------------------------------------------------------------------|
| 添加列 | alter table tablename add(column datatype [default expr] [,column datatype ]... ); |
| 修改列 | alter table tablename modify(column datatype [default expr] [,column datatype ]... ); |
| 删除列 | alter table tablename drop(column datatype [default expr] [,column datatype ]... ); |
[修改表-基本介绍]

修改表名:rename table 表名 to 新表名

修改表字符集:alter table 表名 character set 字符集;

sql 复制代码
#创建一个表 Student
create table Student(
name varchar(10),
age int,
gender varchar(10),
id varchar(10)
)charset utf8 collate utf8_bin engine innodb;
-- 在表Student上添加一个grade列(在gender之后)
alter table Student
add grade int not null default ''
after gender;
-- 删除age列
alter table Student
modify age int not null default '';
-- 表名改为Stu
rename table Student to Stu;
-- 修改表的字符集为utf8
alter table Stu character set utf8;
-- 列名name修改为stu_name
alter table Stu
change `name` `stu_name` varchar(10) not null deafult''
-- 显示表结构,可以查看表的所有列
desc Stu

6.Insert语句

sql 复制代码
#向Student中插入一条记录
-- 在values中列出的数据位置必须与被加入的列的排列位置相对应
-- 字符和日期数据必须包括在单引号中
-- 列可以插入空值,前提是该字段允许为空
-- 如果是给所有字段添加数据,可以不写前面字段名称
-- 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
-- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给 null 
-- 如果我们希望指定某个列的默认值,可以在创建表时指定
insert into `Student`(stu_name,gender,grade,id)
values('小明','boy',100,'0423898');

7.update语句

#update语句的使用
-- 将所有学生的成绩修改为100
update Stu set grade=100;
-- 将名为小明的学生id修改为01
update Stu set id=0
where stu_name='小明';
-- update语法可以用新值更新原有表行中的各列
-- set子句提示要修改哪些列和给予哪些值
-- where子句指定要更新哪些行,若没有where子句,则更新所有的行
-- 如果需要修改多个字段,可以通过 set 字段1=值1,字段2=值2...

8.delete语句

-- 删除表中名称为'小明'的记录
delete from Stu
where name='小明';
-- 删除表中所有记录
delete from Stu;
-- delete不能删除某一列的值,可以用update设为null
-- 删除这个表
drop table Stu;

9.select语句

-- 查询表中所有学生信息
select*from Stu
-- 查询表中所有学生的姓名和对应的成绩。
select `name`,grade FROM student;
-- 过滤表中重复数据,要查询的数据每个字段都相同,才会去重
select distinct grade from Stu;


#向学生中添加成绩
alter table Stu
add grade1 int;
alter table Stu
add grade2 int;

#在select语句中可以使用as语句
selec column_name as 别名 from 表名
-- 统计每个学生的总分
select stu_name as name,(grade+grade1+grade2) as total_grade 
from Stu;

在where子句中经常使用的运算符

比较运算符:

  • > < <= >= = <> !=
  • between...and... 显示在某一区间的值
  • in(set) 显示在in中的值,例:in(100,200)
  • like '张...' not like ' '模糊查询
  • is null 判断是否为空

逻辑运算符:

  • and:多个条件同时成立

  • or:多个条件任一成立

  • not:不成立,例:where not(grade>90)

    -- 查询grade为98,87,65的学生
    selectfrom Stu
    where grade in(98,87,65);
    select
    from Stu
    where grade=98 or grade=87 or grade=65;
    -- 查询所有姓陈的学生成绩
    select*from Stu
    where name like '陈%';

相关推荐
奶糖趣多多31 分钟前
Redis知识点
数据库·redis·缓存
CoderIsArt2 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧4 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis5 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林5 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享6 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil276 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk7 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境7 小时前
第02章 MySQL环境搭建
数据库·mysql