数据库基础1

数据库简介

  1. 数据库
    数据库就是存储数据的仓库。为了方便管理数据的存储和管理,将数据按照特定的规律存储在磁盘上。通过数据库管理系统,有效地组织和管理存储在数据库中的数据
  2. 数据库系统
    数据库系统和数据库不是一个概念,数据库系统(DBS)比数据库大很多,由数据库、数据库管理系统、应用开发工具构成。
  3. 数据库管理系统
    数据库管理系统(Database Management System,简称DBMS),是用来定义数据、管理和维护数据的软件。他是数据库系统的一种重要的组成部分。

常见的数据库系统

  • 甲骨文Oracle数据库
  • BM的DB2
  • 微软SQL Server、Access
  • PostgreSql
  • MySQL

MySQL数据库

  • MySQL是开放源代码的数据库
  • MySQL的跨平台性
  • 开源免费
  • 功能强大使用方便

SQL

SQL:Structured Query Language简称SQL,结构化查询语言,数据库管理系统通过SQL语言来管理数据库中的数据

SQL语言的组成部分

  • DDL(Data Defination Language):数据定义语言,主要用于定义数据库、表、视图、索引和触发器等。像DROP、CREATE、ALTER等语句
  • DML(Data Manipulation Language):主要包括对数据的增删改。INSERT插入数据、UPDATE更新数据、DELETE删除数据
  • DQL(Data Query Language):数据检索语句,用来从表中获得数据,确定数据怎样在应用程序中给出,像SELECT查询数据
  • DCL(Data Control Language):数据控制语言,主要用于控制用户的访问权限。像GRANT、REVOKE、COMMIT、ROLLBACK等语句

数据库的安装及配置

MySQL目录

  • bin目录,存储可执行文件
  • data目录,存储数据文件
  • include目录,存储包含的头文件
  • lib目录,存储库文件
  • docs目录,文档
  • share目录,错误消息和字符集文件
  • my.ini文件,MySQL的配置文件
    设置字符集
    客户端字符集[mysql]
    default-character-set=utf8
    服务器端字符集[mysqld]
    character-set-server=utf8

开启和关闭MySQL服务

方法一

net start mysql
net stop mysql

方法二
右键计算机–管理–服务和应用程序–服务–找到MySQL–点击启动或关闭

登录MySQL

mysql -uroot -p

常用参数

  • -u 用户名
  • -p 密码
  • -h 服务器名称
  • -P 端口号
  • -D 打开指定数据库
  • –prompt=name,设置命令提示符
  • –delimiter=name,指定分隔符
  • -V,–version,输出版本信息并且退出
mysql -hlocalhost -uroot -p -P3306 --prompt=sql

退出

  • exit
  • quit
  • \q

SQL语句规范

修改命令提示符

  • 连接客户端时通过参数指定
    mysql -uroot -proot --prompt 提示符
  • 连接上客户端后,通过prompt命令修改
    prompt 提示符
  • 命令提示符常用参数
    \D:完整的日期
    \d:当前数据库
    \h:服务器名称
    \u:当前用户名
prompt \h~\u~\D~\d

5.MySQL常用命令

SELECT VERSION(); 显示当前版本
SELECT NOW(); 显示当前日期时间
SELECT USER(); 显示当前用户
\c 取消命令
DELIMITER 更改分隔符
\T 接路径,开始输出日志
\t 结束输出日程

6.MySQL语句的规范

  • 关键字与函数名称全部大写
  • 数据库名称、表名称、字段名称等全部小写
  • SQL语句必须以分隔符结尾
  • SQL语句支持折行操作,只要不把单词、标记或引号字符串分割为两部分,可以在下一行继续写
  • 数据库名称、表名称、字段名称等尽量不要使用MySQL的保留字,如果需要使用的时候需要使用反引号(``)将名称括起来

数据库操作(DDL)

创建数据库

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET [=] charset_name]
{}必须
[]可选
SHOW WARNINGS 查看上一次操作产生的警告信息

注意
数据库名称在一个目录名允许的任何字符,除斜线或点等特殊字符,也不要起中文,最大长度64
创建一个数据库,相当于在data目录中创建一个目录
当已经存在数据库时再创建相同的数据库会提示error,可加上IF NOT EXISTS判断是否存在后再创建,这时语句可以执行,但是会提示存在warning,用SHOW WARNINGS可以查看上一次操作产生的警告信息

查看当前服务器下的数据库列表

SHOW {DATABASES|SCHEMAS}

其中information_schema,performance_schema,mysql这三个库是不可以删除的

查看指定数据库的定义

SHOW CREATE {DATABASE|SCHEMA} db_name

能查看到编码方式

修改指定数据库的编码方式

ALTER {DATABASE|SCHEMA} db_name [DEFAULT] CHARACTER SET [=] charset_name

打开指定数据库

USE db_name
SELECT DATABASE(); 可以得到当前打开数据库的名称

删除指定数据库

DROP {DATABASE|SCHEMA} [IF EXISTS] db_name

MySQL中支持的数据类型简介

数据表相关操作

什么是表:
数据表是数据库最重要的组成部分之一,是其它对象的基础
数据表是存储数据的数据结构
数据表是包含了特定实体类型的数据
数据表由行(row)和列(column)构成的二维网络
数据表一定先有表结构,再有数据
数据表至少有一列,可以没有行或者多行
数据表名称要求唯一,而且不要包含特殊字符

如何创建数据表:

CREATE TABLE [IF NOT EXISTS] tbl_name(
字段名称 字段类型 [完整性约束条件]
...
)ENGINE=引擎名称 CHARSET='编码方式';

完整性约束条件

  • PRIMARY KEY主键
  • AUTO_INCREMENT自增长
  • FOREIGN KEY外键
  • NOT NULL非空
  • UNIQUE KEY唯一
  • DEFAULT默认值

查看帮助手册

help tinyint
help CREATE DATABASE
? INT
\h INT

数据类型

  • 整数类型
    TINYIINT
    SMALLINT
    MEDIUMINT
    INT
    BIGINT
    BOOL, BOOLEAN 等价于TINYINT(1)
  • 浮点类型
    FLOAT[(M,D)]
    DOUBLE[(M,D)]
    DECIMAL[(M,D)]
  • 字符串类型
    CHAR(M)
    VARCHAR(M)
    TINYTEXT
    TEXT
    MEDIUMTEXT
    LONGTEXT
    ENUM(‘value1’,‘value2’,…)
    SET(‘value1’,‘value2’,…)
  • 日期时间类型
    TIME
    DATE
    DATETIME
    TIMESTAMP
    YEAR
  • 二进制类型

如何选择合适的数据类型
整数类型和浮点数类型
如果要表示小数只能用浮点数类型,整数类型不能表示小数
浮点类型DOUBLE精度比FLOAT类型高,如果需要精确到10位以上,就应该选择DOUBLE类型。

MySQL中的存储引擎

存储引擎

存储引擎就是指表的类型。数据库的存储类型决定了表在计算机中的存储方式。用户可以根据不同的存储方式、是否进行事务处理等来选择合适的存储引擎。

如何查看MySQL的存储引擎?

查看MySQL支持的存储引擎:SHOW ENGINES
查看显示支持的存储引擎信息:SHOW VARIABLES LIKE ‘have%’
查看默认的存储引擎:SHOW VARIABLES LIKE ‘storage_engine’

MySQL常用存储引擎

  • InnoDB存储引擎
    提供事物处理(回滚,修复,多版本并发控制)
    支持外键
    读写效率低,占用空间大
  • MyISAM存储引擎
    插入快,空间存储低
  • MEMORY存储引擎
    数据存储在内存中,处理快

MySQL数据表的创建

创建数据表

CREATE TABLE [IF NOT EXISTS] tbl_name(
字段名称 字段类型 [完整性约束条件]
...
)ENGINE=引擎名称 CHARSET='编码方式';

完整性约束条件

  • PRIMARY KEY主键
  • AUTO_INCREMENT自增长
  • FOREIGN KEY外键
  • NOT NULL非空
  • UNIQUE KEY唯一
  • DEFAULT默认值

需要输入中文时,需要临时转换客户端编码方式:SET NAME GBK;
字段注释,通过COMMENT 注释内容 给字段添加注释

-- 创建学员表(user)
-- 编号id
-- 用户名username
-- 年龄age
-- 性别sex
-- 邮箱email
-- 地址addr
-- 生日birth
-- 薪水salary
-- 电话tel
-- 婚姻状况married

CREATE TABLE IF NOT EXISTS user(
id SMALLINT,
username VARCHAR(20),
age TINYINT,
sex ENUM('男','女','保密'),
email VARCHAR(50),
addr VARCHAR(200),
birth YEAR,
salary FLOAT(8,2),
tel INT,
married TINYINT(1) COMMENT '0代表未婚,非0代表已婚'
)ENGINE= INNODB CHARSET=UTF8;
-- 创建课程表course
-- 编号cid
-- 课程名称courseName
-- 课程描述 courseDesc

CREATE TABLE IF NOT EXISTS course(
cid TINYINT,
courseName VARCHAR(50),
courseDesc VARCHAR(200)
);

查看数据库中的数据表以及表结构

查看数据库下的数据表

SHOW TABLES

查看指定表的表结构

DESC tbl_name
DESCRIBE tbl_name
SHOW COLUMNS FROM tbl_name

测试数据类型

测试整型

CREATE TABLE TEST1(
NUM1 TINYINT,
NUM2 SMALLINT,
NUM3 MEDIUMINT,
NUM4 INT,
NUM5 BIGINT
);

DESC TEST1;

-- 向表中插入记录INSERT TBL_NAME VALUE|VALUES(值,...);
INSERT TEST1 VALUES(-128, -32768, -8388608, -2147483648, -9223372036854775808);
-- 查询表中所有记录SELECT * FROM TBL_NAME;
SELECT * FROM TEST1;

-- INSERT TEST1 VALUES(-129, -32768, -8388608, -2147483648, -9223372036854775808);
-- 报错Out of range value for column 'NUM1' at row 1

测试无符号UNSIGNED

CREATE TABLE TEST2(
NUM1 TINYINT UNSIGNED,
NUM2 TINYINT
);

DESC TEST2;

在这里插入图片描述

-- 向表中插入记录INSERT TBL_NAME VALUE|VALUES(值,...);
INSERT TEST2 VALUES(0, -12);
-- 查询表中所有记录SELECT * FROM TBL_NAME;
SELECT * FROM TEST2;

-- INSERT TEST2 VALUES(-10, -12);
-- 报错Out of range value for column 'NUM1' at row 1

测试零填充ZEROFILL
显示美观,长度一致

CREATE TABLE TEST3(
NUM1 TINYINT ZEROFILL,
NUM2 SMALLINT ZEROFILL,
NUM3 MEDIUMINT ZEROFILL,
NUM4 INT ZEROFILL,
NUM5 BIGINT ZEROFILL
);

DESC TEST3;

在这里插入图片描述

-- 向表中插入记录INSERT TBL_NAME VALUE|VALUES(值,...);
INSERT TEST3 VALUES(1,1,1,1,1);
-- 查询表中所有记录SELECT * FROM TBL_NAME;
SELECT * FROM TEST3;

测试浮点类型

CREATE TABLE TEST4(
NUM1 FLOAT(6,2),
NUM2 DOUBLE(6,2),
NUM3 DECIMAL(6,2)
);

DESC TEST4;

-- 向表中插入记录INSERT TBL_NAME VALUE|VALUES(值,...);
INSERT TEST4 VALUES(3.1415,3.1415,3.1415);
INSERT TEST4 VALUES(3.2495,3.2495,3.2495);
-- 查询表中所有记录SELECT * FROM TBL_NAME;
SELECT * FROM TEST4;

在这里插入图片描述

SELECT * FROM TEST4 WHERE NUM1 = 3.14;
SELECT * FROM TEST4 WHERE NUM2 = 3.14;
SELECT * FROM TEST4 WHERE NUM3 = 3.14;
SELECT * FROM TEST4 WHERE NUM1 = '3.14';

在这里插入图片描述

SELECT * FROM TEST4 WHERE NUM3 = '3.14';

在这里插入图片描述
decimal精度较高,内部以字符串形式存储,不涉及四舍五入

测试字符串类型

CREATE TABLE IF NOT EXISTS test5(
str1 CHAR(5),
str2 VARCHAR(5)
);
INSERT test5 VALUES('1','1');
INSERT test5 VALUES('12345','12345');
SELECT * FROM test5;

在这里插入图片描述
长度超过无法插入

INSERT test5 VALUES('123456','123456');
-- Data too long for column 'str1' at row 1
INSERT test5 VALUES('1  ','1  ');
INSERT test5 VALUES('  a','  a');

SELECT * from test5;

在这里插入图片描述

CHAR类型和VARCHAR类型和TEXT类型
  • CHAR定长字符串,占用空间大,速度快
  • VARCHAR变长字符串,占用空间小,速度慢
  • TEXT类型是一种特殊的字符串类型。只能保存字符数据,而且不能
  • 它们3个存储和检索数据的方式都不一样,数据检索的效率CHAR>VARCHAR>TEXT
  • CHAR在保存的时候,后面会用空格填充到指定的长度,在检索的时候后面的空格会去掉
  • VARCHAR在保存的时候,不进行填充。当值保存和检索时尾部的空格仍保留
测试枚举类型
CREATE TABLE IF NOT EXISTS test6(
sex ENUM('男','女','保密 ')
);

INSERT test6 VALUES('男');
INSERT test6 VALUES('女');
INSERT test6 VALUES('保密');

SELECT * FROM test6;

在这里插入图片描述

INSERT test6 VALUES('保密1');
--[Err] 1265 - Data truncated for column 'sex' at row 1
INSERT test6 VALUES(2);
SELECT * FROM test6;

在这里插入图片描述

INSERT test6 VALUES(0);
--[Err] 1265 - Data truncated for column 'sex' at row 1
INSERT test6 VALUES(NULL);
SELECT * FROM test6;

在这里插入图片描述

INSERT test6 VALUES('');
--[Err] 1265 - Data truncated for column 'sex' at row 1
测试集合类型
CREATE TABLE IF NOT EXISTS test7(
fav SET('A','B','C','D')
);

INSERT test7 VALUES('A,C,D');
INSERT test7 VALUES('D,B,A');

SELECT * FROM test7;

在这里插入图片描述
集合类型是以二进制形式来保存的

INSERT test7 VALUES(3);
INSERT test7 VALUES(15);

SELECT * FROM test7;

在这里插入图片描述

测试日期时间类型

测试YEAR
CREATE TABLE IF NOT EXISTS test8(
birth YEAR
);

INSERT test8 VALUES(1901);
INSERT test8 VALUES(2155);

SELECT * FROM test8;

在这里插入图片描述
超过范围的值

INSERT test8 VALUES(2156);
-- [Err] 1264 - Out of range value for column 'birth' at row 1

字符串也可以插入;
00-69转换为2000-2069,70-99转换为1970-1999;
插入数字0转换为0000,插入字符串0转换为2000;

INSERT test8 VALUES('1988');
INSERT test8 VALUES(12);
INSERT test8 VALUES('79');
INSERT test8 VALUES(0);
INSERT test8 VALUES('0');

SELECT * FROM test8;

在这里插入图片描述

测试TIME
CREATE TABLE IF NOT EXISTS test9(
test TIME
);

INSERT test9 VALUES('1 12:12:12');
INSERT test9 VALUES('11:11');
INSERT test9 VALUES(1234);
INSERT test9 VALUES(12);
INSERT test9 VALUES('0');
INSERT test9 VALUES(0);

SELECT * FROM test9;

在这里插入图片描述
超过范围

INSERT test9 VALUES(66);
-- [Err] 1292 - Incorrect time value: '66' for column 'test' at row 1
测试DATE
CREATE TABLE IF NOT EXISTS test10(
test DATE
);

INSERT test10 VALUES('12-6-7');
INSERT test10 VALUES('12/6/7');
INSERT test10 VALUES('120607');
INSERT test10 VALUES('12@6/7');

SELECT * FROM test10;

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值