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 '陈%';

相关推荐
月光水岸New2 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6752 小时前
数据库基础1
数据库
我爱松子鱼2 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo2 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser3 小时前
【SQL】多表查询案例
数据库·sql
Galeoto3 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)4 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231114 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白4 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码4 小时前
【SQL实验】触发器
数据库·笔记·sql