目录
一、使用命令行窗口连接MySQL数据库
1. 使用管理员身份打开cmd,输入:cd /D D:\mysql\mysql-5.7.19-winx64\bin 切到该目录
2. 启动mysql服务,指令:net start mysql 停止mysql服务指令:net stop mysql
3. 登录保证服务启动,并且输入指令:mysql -h 主机名 -P 端口 -u 用户名 -p密码
4. 退出指令:quit 刷新权限指令:flush privileges;
操作示意图
二、数据库三层结构
1.所谓安装Mysql数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库,DBMS(database manage system)
2.一个数据库中可以创建多个表,以保存数据(信息)
3.数据库管理系统(DBMS),数据库和表的关系如下
三、数据在数据库中的存储方式
四、SQL语句分类
- DDL:数据定义语句【create 表,库...】
- DML:数据操作语句【增加 insert,修改 update,删除 delete】
- DQL:数据查询语句【select】
- DCL:数据控制语句【管理数据库,比如用户权限 grant,revoke】
五、创建数据库
指令:CREATE DATABASE[IF NOT EXISTS] db_name
1. CHARACTER SET:指定数据库采用的字符集,如果不指定字符集,默认utf8
2. COLLATE:指定数据库字符集的校对规则(常用的utf8_bin[区分大小写]、utf8_general_ci[不区分大小写],默认是utf8_general_ci)
#演示数据库的操作
#创建一个名称为ggm_db01的数据库[图形化和指令]
#使用指令创建数据库
CREATE DATABASE ggm_db01
#删除数据库指令
DROP DATABASE ggm_db01
#创建一个使用utf8字符集的ggm_db02数据库
CREATE DATABASE ggm_db02 CHARACTER SET utf8
#创建一个使用utf8字符集,并带校对规则的ggm_db03数据库
CREATE DATABASE ggm_db03 CHARACTER SET utf8 COLLATE utf8_bin
#校对规则 utf8_bin:区分大小写 默认校对规则utf8_general_ci:不区分大小写
#下面是一条查询的sql语句
#select表示查询 *表示所有字段 from表示从哪个表
#where表示从哪个字段查
SELECT * FROM t1 WHERE NAME = 'tom'
六、查看、删除数据库
显示当前数据库服务器中的所有数据库语句:SHOW DATABASES
显示数据库创建时定义信息语句:SHOW CREATE DATABASE db_name
删除数据库语句[慎用]:DROP DATABASE [IF EXISTS] db_name
#演示删除和查询数据库
#查看当前数据库服务器中的所有数据库
SHOW DATABASES
#查看前面创建的ggm_db01数据库的定义信息
SHOW CREATE DATABASE ggm_db01
#说明:在创建数据库、表的时候,为了规避关键字,可以使用反引号解决
#删除前面创建的ggm_db01数据库
DROP DATABASE ggm_db01
七、备份恢复数据库
备份数据库(注意:要在DOS执行)命令行
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql
提示:-B表示后面都是数据库而不是表,想得到某个库的某个表就不能写-B
恢复数据库(注意:需要先进入Mysql命令行再执行)
source 文件名.sql
#练习:database03.sql 备份ggm_db02和ggm_db03库中的数据,并恢复
#备份,要在Dos下执行mysqldump指令
#这个备份的文件,就是对应的sql语句
mysqldump -u root -p -B ggm_db02 ggm_db03 > d:\\bak.sql
#删除数据库
DROP DATABASE ggm_db03;
#恢复数据库(注意:要先进入mysql命令行再执行)
source d:\\bak.sql
#第二种恢复方法,直接将bak.sql的内容放到查询编辑器中,执行
八、创建表
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype)
character set 字符集 collate 校对规则 engine 存储引擎
field:指定列名
datatype:指定列类型(字段类型)
character set:如不指定则为所在数据库字符集
collate:如不指定则为所在数据库校对规则
engine:引擎
指令创建表
#注意:hsp_db02 创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。例:user
#id 整形 [图形化,指令]
#name 字符串
#password 字符串
#birthday 日期
CREATE TABLE `user`(
id INT,
`name` VARCHAR(255),
`password` VARCHAR(255),
`birthday` DATE)
CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;
九、Mysql常用数据类型(列类型)
9.1 数值型(整数)的基本使用
使用规范:在能够满足需求的情况下, 尽量选择占用空间小的
#演示整形的使用
#使用tinyint来演示范围(-128~127),如果没有符号(0~255)
#说明:表的字符集,校验规则,存储引擎,使用默认
#1.如果没有指定unsigned,则tinyint就是有符号的
#2.如果指定unsigned,则tinyint就是无符号的(0~255)
CREATE TABLE t2 (
id TINYINT);
CREATE TABLE t3 (
id TINYINT UNSIGNED);
INSERT INTO t2 VALUES(127);#这是一个简单的添加语句
SELECT * FROM t3
INSERT INTO t3 VALUES(255);
9.2 如何定义一个无符号的整数
create table t10(id tinyint); //默认是有符号的
create table t11(id tinyint unsigned); //无符号的
9.3 数值型(bit)的使用
1. 基本使用
mysql > create table t05(num bit(8));
mysql > insert into t05(1,3);
mysql > insert into t05 values(2,65);
2. 细节说明
- bit字段显示时,按照位的方式显示
- 查询的时候仍然可以用使用添加的数值
- 如果一个值只有0,1可以考虑使用bit(1),这样可以节约空间
- 位类型。M指定位数,默认值是1,范围是1-64
- 实际开发中使用不多
#演示bit类型的使用
#说明
#1.bit(m) m范围在1~64
#2.添加数据 范围按照给定的位数来确定的,比如m=8,表示1个字节(0~255)
#3.显示是按照bit
#4.查询时,仍然可以按照数来查询
CREATE TABLE t4(num BIT(8));
INSERT INTO t4 VALUES(255);
SELECT * FROM t4;
SELECT * FROM t4 WHERE num = 1;
9.4 数值型(小数)的基本使用
1. FLOAT:单精度 / DOUBLE:双精度
2. DECIMAL[M, D] [UNSIGNED]
- 可以支持更加精确的小数位。M是小数位数(精度)的总数,D是小数点(标度)后面的位数
- 如果D是0,则值没有小数点或分数部分
- M最大65,D最大是30。如果D被省略,默认是0,如果M被省略,默认是10
- 建议:如果希望小数的精度高,推荐使用decimal
#演示float、double、decimal类型的使用
#创建表
CREATE TABLE t5(
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(30,20));
#添加数据
INSERT INTO t5 VALUES(88.12345678912345, 88.12345678912345, 88.12345678912345);
SELECT * FROM t5;
#decimal可以存放很大的数
CREATE TABLE t6(
num DECIMAL(65));
INSERT INTO t6 VALUES(8999999999945623111111111111111113333222222222288888888);
SELECT * FROM t6;
CREATE TABLE t7(
num BIGINT UNSIGNED);
INSERT INTO t7 VALUES(8999999999945623111111111111111113333222222222288888888);
SELECT * FROM t7;
9.5 字符串的基本使用
1. CHAR(size) 固定长度字符串 最大255字符
2. VARCHAR(size) 0~65535 可变长度字符串 最大65532字节
【utf8编码最大21844字符,1~3个字节用于记录大小(存储数据的大小不确定,所以是1~3)】
- 如果表的编码是utf8 varchar(size) size = (65535-3) / 3 = 21844
- 如果表的编码是gbk varchar(size) size = (65535-3) / 3 = 21844
#演示字符串类型使用 char varchar
#注释的快捷键 shift+ctrl+c , 注销注释 shift+ctrl+r
-- char(size)
-- 固定长度字符串,最大255字符
--
-- varchar(size) 0~65535字节
-- 可变长度字符串,最大65532字节 【utf8 编码最大21844字符 字符1-3个字节用于记录大小】
-- 如果表的编码是 utf8 varchar(size) size = (65535-3) / 3 = 21844
-- 如果表的编码是 gbk varchar(size) size = (65535-3) / 2 = 32766
CREATE TABLE t8(
`name` CHAR(255));
CREATE TABLE t9(
`name` VARCHAR(21844));
CREATE TABLE t10(
`name` VARCHAR(32766)) CHARSET gbk;
9.6 字符串使用细节
细节1
char(4) //这个4表示字符数(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算
varchar(4) //这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据
不管是中文还是英文字母,都是最多存放4个,是按照字符来存放的
细节2
char(4) 是定长(固定的大小),就是说即使插入'aa',也会占用分配的4个字符的空间
varchar(4) 是变长(变化的大小),就是说如果插入了'aa',实际占用空间大小并不是4个字符,而是按照实际占用空间来分配【说明:varchar本身还需要占用1-3个字节来记录存放内容长度】 L(实际数据大小) + (1-3)字节
细节3
什么时候使用char,什么时候使用varchar
1. 如果数据是定长,推荐使用char,比如md5的密码、右边、手机号、身份证号码等等
2.如果一个字段的长度是不确定的,推荐使用varchar,比如留言、文章等等
查询速度:char > varchar
细节4
在存放文本时,也可以使用Text数据类型,可以将TEXT列是为VARCHAR列,注意Text不能有默认值。大小为0~2^16字节
如果希望存放更多字符,可以选择 MEDIUMTEXT(0~2^24) 或者 LONGTEXT(0~2^32)
#演示字符串类型的使用细节
#char(4)和varchar(4) 这个4表示的是字符,而不是字节,不区分字符是汉字还是字母
CREATE TABLE t11(
`name` CHAR(4));
INSERT INTO t11 VALUES('咕咕猫好');
SELECT * FROM t11;
CREATE TABLE t12(
`name` VARCHAR(4));
INSERT INTO t12 VALUES('咕咕猫好');
INSERT INTO t12 VALUES('ab南京');
SELECT * FROM t12;
#如果varchar不够用,可以考虑直接使用mediumtext或者longtext
#如果想简单点,可以直接使用text
CREATE TABLE t13( content1 TEXT, content2 MEDIUMTEXT, content3 LONGTEXT);
INSERT INTO t13 VALUES('咕咕猫你好', '咕咕猫你好100', '咕咕猫你好1000~~');
SELECT * FROM t13;
9.7 日期类型的基本使用
CREATE TABLE birthday (
t1 DATE,
t2 DATETIME,
t3 TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);
- 日期类型的细节说明
TimeStamp在Insert和update时,会自动更新
#演示时间相关的类型
#创建一张表,date, datetime, timestamp
CREATE TABLE t14(
birthday DATE, -- 生日
jobtime DATETIME, -- 记录年月日 时分秒
login_time TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP); -- 登录时间,如果希望login_time列自动更新,需要配置
SELECT * FROM t14;
INSERT INTO t14(birthday, jobtime)
VALUES('2022-11-11', '2022-11-11 10:10:10');
-- 如果我们更新t14表的某条记录,login_time列会自动的以当前时间进行更新
创建表的练习
#创建表的课堂练习
-- 字段属性
-- Id 整形
-- name 字符型
-- sex 字符型
-- brithday 日期型(date)
-- entry_date 日期型 (date)
-- job 字符型
-- Salary 小数型
-- resume 文本型
CREATE TABLE t15(
id INT,
`name` VARCHAR(32),
sex CHAR(1),
brithday DATE,
entry_day DATETIME,
job VARCHAR(32),
salary DOUBLE,
`resume` TEXT) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;
SELECT * FROM t15;
INSERT INTO t15 VALUES(100,'咕咕猫', '男', '2000-11-11', '2019-10-10 18:00:09', '会吃', 5000, '晚上吃什么');
十、修改表
使用ALTER TABLE语句追加,修改或删除列的语法
- 添加列
ALTER TABLE tablename
ADD 列名 类型
- 修改列
ALTER TABLE tablename
MODIFY 列名 类型
- 删除列
ALTER TABLE tablename
DROP 列名
- 其它
查看表的结构:desc 表名; //可以查看表的列
修改表名:Rename table 表名 to 新表名
修改表字符集:alter talbe 表名 character set 字符集
#修改表的练习
-- 员工表 emp 的上增加一个 image 列,varchar 类型(要求在 resume 后面)
ALTER TABLE t15
ADD image VARCHAR(32) NOT NULL DEFAULT ''
AFTER RESUME
-- 修改 job 列,使其长度为 60。
ALTER TABLE t15
MODIFY job VARCHAR(60) NOT NULL DEFAULT ''
-- 删除 sex 列。
ALTER TABLE t15
DROP sex
-- 表名改为 employee。
RENAME TABLE t15 TO employee
-- 修改表的字符集为 utf8
ALTER TABLE employee CHARACTER SET utf8
-- 列名 name 修改为 user_name
ALTER TABLE employee
CHANGE `name` user_name VARCHAR(64)NOT NULL DEFAULT''
DESC employee -- 显示表结构,可以查看表的所有列