Mysql数据库基础(1)
一、数据库的历史
1、简介
数据库技术,是之前60年代开始兴起的一门信息管理自动化的新兴学科,是计算机科学中的一个重要分支。随着计算机应用的不断发展,数据处理越来越占主导地位,数据库技术的应用也越来越广泛。数据管理是数据库的核心任务,内容包括对数据的分类、组织、编码、存储、检索和维护,数据库是以一定方式储存在一起,能与多个用户共享,具有尽可能小的冗余度,与应用程序彼此独立的数据集合。
2、发展阶段
从数据管理的角度看,数据库技术到目前共经历了以下几个阶段:
- 人工管理阶段
- 文件系统阶段
- 数据库(管理)系统阶段
(1)人工管理阶段
这个时期的计算机主要用于科学计算。
从硬件看,没有磁盘等直接存取的存储设备。
从软件看,没有操作系统和管理数据的软件。
特点:
-
数据不保存
-
没有对数据进行管理的软件
-
没有文件的概念
-
一组数据对应一个程序,数据是面向应用的
(2)文件系统阶段
这个时期计算机不仅用于科学计算,而且还大量用于管理数据的阶段(从50年代后期到60年代中期)。
在软件方面,操作系统中已经有了专门用于管理数据的软件,称为文件系统。
特点:
-
数据需要长期保存在外存上供反复使用
-
程序之间有了一定的独立性
-
文件的形式已经多样化
-
数据的存取基本上已记录为单位
(3)数据库(管理)系统阶段
特点:
-
采用复杂的结构化数据模型
-
较高的数据独立性
-
最低的冗余度
-
数据控制功能
3、数据库的主要特点
(1)实现数据共享
(2)减少数据的冗余度
-
-
完整性控制:保证数据的正确性、有效性和相容性;
-
并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用;
-
(1)关系型数据库
-
-
Mysql
-
PostgreSql
-
DB2
-
Microsoft SQL server
-
MicroSoft Access
(2)非关系型数据库
-
Redis
-
Mongodb
-
Big Table
二、MYSQL数据库的安装
由于后续我们需要用到Django,所以python、mysql、Django三者有版本兼容性的问题在这里先列出来以供参考。
具体的对应关系如下:
-
Python和Django 版本对应关系图
- Mysql数据库和python关系图
-
Django:(3.0以上)
-
python:(3.6以上)
-
mysql:8.0
1、mysql8.0的安装
(1)访问地址:http://www.mysql.com
(2)点击:DOWNLOADS
(3)进入,Downloads 向下滑动,到最低层,找到MySQLcommunity (GPL) Downloads,单击进入(社区版对于大部分开发者就足够使用了)
(4)找到MySQL,Community server点击进入
(5)点击 Go to Download Page 进入
(6)看到 MSI,单击本机版,431.7M 大的,进入
(7)点击No thanks, just start my download(下载时不需要登录)
(8)等待安装包下载完成后,点击安装包进行安装
(9)选择安装方式这里,按照如下图片的提示操作即可。
到这里基本就结束了,接下来我们验证是否安装成功。
(10)验证是否安装成功
- 以管理员的方式进入cmd命令行,然后输入mysql -u root -p,出现如下界面,那是因为我们还没有配置环境变量。
- 点击环境变量
这里会有一个提示,点击是就可以了
CREATE DATABASE 数据库名;
在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失。
语法如下:
drop database 数据库名;
可以使用SQL命令来选择指定的数据库:
use 数据库名;
MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
-
表名
-
表字段
-
定义每个表字段
语法:
CREATE TABLE table_name (column_name column_type);
CREATE TABLE book_tbl(
book_id INT AUTO_INCREMENT,
book_title VARCHAR(100) NOT NULL,
book_author VARCHAR(40) NOT NULL,
book_date DATE,
PRIMARY KEY ( book_id )
)CHARSET=utf8;
实例解析:
-
如果你希望字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
-
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
-
PRIMARY KEY关键字用于定义列为主键。 可以使用多列来定义主键,列间以逗号分隔。
-
CHARSET是设置编码。
成功创建表之后,可以通过命令行查看表结构:
show tables; //查看所有的表
desc book_tbl; //查看book_tbl的结构
6、mysql删除数据表
语法:以下为删除mysql数据表的通用语法
DROP TABLE 表名;
执行成功后,可以尝试查看表,会发现查询不到。
7、mysql插入数据
MySQL 表中使用 INSERT INTO 语句来插入数据。
INSERT INTO 表名 ( 字段1, 字段2,...字段N ) VALUES ( 值1, 值2,...值N );
例如:
INSERT INTO book_tbl
(book_id, book_title, book_author, book_date)
VALUE
(1, 'python零基础', '乔治', NOW());
添加完成之后,可以通过查询语句进行查询:
select * from book_tbl;
8、mysql更新数据
语法:以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法
UPDATE 表名 SET 字段1=new-value1, 字段2=new-value2 [WHERE 条件];
将修改表中book_id=1的book_author字段值
UPDATE book_tbl SET book_author='路飞' WHERE book_id=1;
可以看出字段book_author中的张三被改成了路飞,效果如下:
9、mysql删除数据
你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录。
语法:以下是 SQL DELETE 语句从 MySQL 数据表中删除数据的通用语法
DELETE FROM 表名 [WHERE 条件];
实例:
DELETE FROM book_tbl WHERE book_id=1;
删除整个表:
DELETE FROM book_tbl;
10、mysql查询数据
MySQL 数据库使用SQL SELECT语句来查询数据。
语法:在MySQL数据库中查询数据通用的 SELECT 语法
SELECT 字段1,字段2,……,字段n FROM table_name [WHERE 条件] [LIMIT N]
-
-
SELECT 命令可以读取一条或者多条记录。
-
可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
-
可以使用 WHERE 语句来包含条件。
-
可以使用 LIMIT 属性来设定返回的记录数。
实例:返回数据表 book_tbl 的所有记录
select * from book_tbl;
五、约束
主键、唯一键、自增长、外键、非空
1、主键
主键一般为非业务数据。
(1)增加主键
SQL操作中有多种方式可以给表增加主键:
方案一:在创建表的时候,直接在字段之后,跟primary key关键字(主键本身不允许为空)
CREATE TABLE my_pril(
number INT(10) PRIMARY KEY,
NAME VARCHAR(20) NOT NULL
);
方案二:在创建表的时候,在所有的字段之后,使用primary key(主键字段列表)来创建主键
CREATE TABLE my_pril(
number INT(10),
NAME VARCHAR(20) NOT NULL,
PRIMARY KEY(number)
);
(2)主键约束
创建约束的目的就是保证数据的完整性和一致性。
主键对应的字段中的数据必须唯一,且不能为NULL, 一旦重复,数据操作失败(增和改)
建议主键使用数字类型,因为数字的检索速度非常快,并且主键如果是数字类型,还可以设置自动增长。
主键的原理其实就是一个计数器。
(3)更新主键与删除主键
没有办法更新主键:主键必须先删除,才能增加。
语法:
Alter table 表名 drop primary key;
2、自动增长
自增长的字段必须定义为主键,默认起始值是1而不是0。
(1)自增长使用
语法:
CREATE TABLE my_pril(
number INT(10) PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL
);
(2)删除自增长
语法:
Alter table 表名 modify 字段 类型;
// 示例
ALTER TABLE my_pril MODIFY number INT;
3、唯一键
一张表往往有很多字段需要具有唯一性,数据不能重复:但是一张表中只能有一个主键:唯一键(unique)就可以解决表中有多个字段需要唯一性约束的问题。
(1)增加唯一键
方案一:在创建表的时候,字段之后直接跟unique/ unique key
CREATE TABLE my_pril2(
number INT(10) PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
phone INT(11) UNIQUE
);
方案二:在所有的字段之后增加unique key(字段列表)
CREATE TABLE my_pril2(
number INT(10) PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
phone INT(11),
UNIQUE key(phone)
);
(2)唯一键约束
唯一键与主键本质相同:唯一的区别就是唯一键默认允许为空,而且是多个为空。
(3)删除唯一键
语法:
Alter table 表名 drop index 索引名字; -- 唯一键默认的使用字段名作为索引名字
4、外键
举个例子来看一下,假如我们有两张表
- 员工表
姓名 | 年龄 | 部门id(外键)(关联到部门表的主键) | |
---|---|---|---|
1 | 张三 | 22 | 1 |
2 | 李四 | 26 | 2 |
3 | 王五 | 23 |
- 部门表
部门名称 | 部门地址 | |
---|---|---|
1 | 技术部 | 长沙 |
2 | 销售部 | 广州 |
3 | 行政部 |
外键:foreign key,外面的键(不在自己表中):如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称之为外键。
(1)增加外键
那么一张表可以有多个外键。
创建表的时候增加外键: 在所有的表字段之后,使用foreign key(外键字段) references 外部表(主键字段)
设置外键需要有多张表(其实就是表与表之间的关联)
首先创建一个主表(部门表):
CREATE TABLE department(
department_id INT PRIMARY KEY AUTO_INCREMENT,
department_name VARCHAR(50) NOT NULL UNIQUE,
department_address VARCHAR(50)
);
添加相应内容:
创建一个从表(员工表)(设置外键):
CREATE TABLE employee(
employee_id INT PRIMARY KEY AUTO_INCREMENT,
employee_name VARCHAR(50) NOT NULL UNIQUE,
employee_age VARCHAR(50),
employee_deparment_id INT,
FOREIGN KEY(employee_deparment_id) REFERENCES department(department_id)
);
添加相对应的信息:
这样就可以将员工部门id关联到部门表中的id了,从架构设计器中也可以看出员工部门id关联到部门表中的id的指向,如图:
(2)修改外键、删除外键
外键不能修改,只能先删除后新增。
Alter table 表名 drop foreign key 外键名; -- 一张表中可以有多个外键,但是名字不能相同
(3)外键作用
外键默认的作用有两点:一个对父表,一个对子表(外键字段所在的表)
-
对子表约束:
子表数据进行写操作(增和改)的时候,如果对应的外键字段在父表找不到对应的匹配:那么操作会失败。
例如:增加一个员工,给员工一个部门的id,但是如果部门表里面没有这个id,那么就添加失败。
-
对父表约束:
父表数据进行写操作(删和改: 都必须涉及到主键本身),如果对应的主键在子表中已经被数据所引用,那么就不允许操作
例如:删除一个部门,那么当这个部门还有员工的时候,就删不掉。
(4)外键条件
-
-
外键字段的字段类型(列类型)必须与父表的主键类型完全一致。
-
一张表中的外键名字不能重复。
-