共计 3090 个字符,预计需要花费 8 分钟才能阅读完成。
开发中存在着各种数据,比方用户的个人信息、商品详情、购买记录,这些数据都要以肯定的形式贮存,如果以文本的模式贮存,每一次获取都要读取文件,如果信息有批改则须要间接批改文本,大量的数据会须要保留大量的文件,这样不仅不便于操作、保护,还给服务器带来微小的累赘,什么样的形式可能贮存大量的数据并且便于批改?答案就是数据库。
关系型数据库以二维数组组成的表构造来贮存数据,各表之间能够设置一对一,一对多,多对多的关系,比方用户个人信息的表中 id 为 1 的用户,她在 xx 商品购买记录的表中存在着一条购买商品的数据,通过各种对应关系,可能从不同的维度保留数据,当须要应用的时候,间接依据某些条件下操作数据。
而非关系型数据库,它的存储更为自在,应用 key-value 这样的模式去保留数据,比方在登陆状态后,保留某个用户的姓名、手机号、身份等信息,获取和写入都比拟的简略。
关系型数据库包含 mysql、oracle、sql server 等,非关系型数据库包含 MongoDB、Redis 等,这里来聊聊 mysql。
mysql 的语句大抵能够分为四类,别离是
DDL(Data Definition Language):数据定义语言,用来对数据库或者表进行:创立、删除、批改等操作,
DML(Data Manipulation Language):数据操作语言,用来对表进行:增加、删除、批改等操作,
DQL(Data Query Language):数据查询语言,用来从数据库中查问记录,
DCL(Data Control Language):数据管制语言 对数据库、表格的权限进行相干访问控制操作。
首先来看对数据库操作,这里有一个编写习惯,通常把 sql 语句局部大写,数据库名、表名、字段名小写
// 1、展现所有的数据库,即便没有创立任何一个数据库,零碎默认也会有四个数据库
SHOW DATABASES;
// 2、抉择数据库 mysql
USE mysql;
// 3、显示以后所抉择的数据库
SELECT DATABASE();
// 4、如果不存在数据库 studySql 则创立
CREATE DATABASE IF NOT EXISTS `studySql`;
// 5、如果存在数据库 studySql 则删除
DROP DATABASE IF EXISTS `studySql`;
再来看看对表的操作,比方在我的项目里,咱们须要保留用户的个人资料,那么此时要创立一个用户表,表外面存储着用户的姓名、手机号码、出生年月,以上的这三种字段对应的是不同的类型,姓名须要字符串类型,手机号码须要数字类型,而出生年月须要应用日期类型,通过数据类型来对保留的数据进行限度,那么常见的数据类型有以下几种。
1、字符串类型
char 定义固定长度的字符串,长度在 0 -255 之间,varchar 定义可变长的字符串,长度在 0 到 65535 之间的值,text 可存储更大的字符串
2、数字类型
数字分为整数、浮点数、准确到小数点的数
整数类型:INT,浮点类型:FLOAT,DOUBLE,准确数字:DECIMAL,NUMERIC
3、日期类型
(1) YEAR,格局如 YYYY,只有年份,范畴从 1901 到 2155,和 0000
(2) DATE,格局如 YYYY-MM-DD,有年月日,范畴从 '1000-01-01' 到 '9999-12-31'
(3) DATATIME,格局如 YYYY-MM-DD hh:mm:ss,有年月日时分秒,范畴从 '1970-01-01 00:00:01' 到 '2038-01-19 03:14:07'
(4) DATASTAMP / TIMESTAMP,比 DATATIME 还要准确 6 位,格局如 YYYY-MM-DD hh:mm:ss.xxxxxx,范畴从 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'
以上的数据类型用于创立表时对字段进行补充,除了补充之外,还应该对字段有限度,比方用户的手机号码不可反复,用户要增加一个惟一的 id 值来示意其“身份”,这些限度就是表束缚,咱们通常有以下几种形式来对表进行束缚
1、主键
主键代表惟一的值,如 id,主键不可反复,也不能够为空,用字段 PRIMARY KEY 来示意
2、惟一键
不可反复,但容许为空,比方手机号码,用字段 UNIQUE 来示意
3、AUTO_INCREMENT
当咱们没有给某一字段设置值的时候,心愿它主动增长,须要数据类型为数字类型
4、NOT NULL
不容许为空
5、DEFAULT
设置默认值
6、外键在下一篇对于 DQL 的总结中具体阐明~
有了以上的概念,咱们就能够在数据库中创立一张“用户表”了
CREATE TABLE IF NOT EXISTS `person` (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) ,
telephone VARCHAR(20) UNIQUE NOT NULL,
birth TIMESTAMP
)
在这张表里插入、删除、批改一些数据
// 给每一个字段一一对应设置值
INSERT INTO `person` VALUES (9, 'judy', '18877776666', '1998-08-08');
INSERT INTO `person` VALUES (10, 'kiki', '18012345678', '2000-08-10');
// id 可自增、birth 设置默认参数
INSERT INTO `person` (name, telephone) VALUES ('alice', '15600000000');
// 批改数据
UPDATE `person` SET NAME = 'xiaoming' WHERE id = 10;
// 删除元素
DELETE FROM `person` WHERE id = 9;
// 清空表所有内容
DELETE FROM `person`
// 查问表里所有数据
SELECT * FROM `person`
// 删除表
DROP TABLE IF EXISTS `person`
局部 sql 语句执行的后果如下图所示
以上 sql 语句操作的是表中的数据,如果对于表字段要进行操作,那么能够应用以下形式
// 批改表名(将表名 person 改为 users)ALTER TABLE `person` RENAME TO `users`;
// 批改表字段(将 telephone 批改为 phone,数据类型为 varchar)ALTER TABLE `users` CHANGE telephone phone VARCHAR(20);
// 批改表数据类型(将 birth 的类型批改为 Data,默认值为以后工夫)ALTER TABLE `users` MODIFY DATATIME DEFAULT CURRENT_TIMESTAMP;
// 减少列 gender
ALTER TABLE `users` ADD gender varchar(10);
ALTER TABLE `user` ADD updateTime TIMESTAMP;
// 删除列
ALTER TABLE `user` DELETE updateTime;
// 查看表构造
DESC `users`
还有一些 sql 有可能也会被用到
// 依据表构造创立另外一个表 (复制)
CREATE TABLE `user1` LIKE `users`
// 依据另外一个表中的所有内容 (不包含表构造), 创立新的表
CREATE TABLE `user3` AS (SELECT * FROM `user`)
// 查看创立表的 sql 语句
SHOW CREATE TABLE `users`
以上就是 mysql 的基本概念以及基本操作,对于 DQL(Data Query Language),数据查问的局部总结在下一篇文章中~