数据库,就是存放数据的仓库
数据库(DataBase,简称DB)是⻓期存储在计算机内部有结构的、⼤量的、共享的数据集合。
关系型数据库:关系型数据库,采⽤了关系模型来组织数据的存储,以⾏和列的形式存储数据并记录数据与数据之间的关系 —— 将数据存储在表格中,可以通过建⽴表格与表格之间的关联来维护数据与数据之间的关系。
学⽣信息---- 学⽣表
班级信息---- 班级表
非关系型数据库:⾮关系型数据库,采⽤键值对的模型来存储数据,只完成数据的记录,不会记录数据与数据之间的关系。
在⾮关系型数据库中基于其特定的存储结构来解决⼀些⼤数据应⽤的难题。
NoSQL(Not only SQL)数据库来指代⾮关系型数据库。
根据SQL指令完成的数据库操作的不同,可以将SQL指令分为四类
⽤于完成对数据库对象(数据库、数据表、视图、索引等)的创建、删除、修改
⽤于完成对数据表中的数据的添加、删除、修改操作添加:将数据存储到数据表
删除:将数据从数据表移除
修改:对数据表中的数据进⾏修改
⽤于将数据表中的数据查询出来
⽤于完成事务管理等控制性操作
在MySQL Command Line Client 或者navicat等⼯具中都可以编写SQL指令
SQL指令不区分⼤⼩写
每条SQL表达式结束之后都以 ; 结束
SQL关键字之间以 空格进⾏分隔
SQL之间可以不限制换⾏(可以有空格的地⽅就可以有换⾏)
使⽤DDL语句可以创建数据库、查询数据库、修改数据库、删除数据库
## 显示当前mysql中的数据库列表 show databases; ## 显示指定名称的数据的创建的SQL指令 show create database <dbName>;
## 创建数据库 dbName表示创建的数据库名称,可以⾃定义 create database <dbName>; ## 创建数据库,当指定名称的数据库不存在时执⾏创建 create database if not exists <dbName>; ## 在创建数据库的同时指定数据库的字符集(字符集:数据存储在数据库中采⽤的编码格式utf8 gbk) create database <dbName> character set utf8;
## 修改数据库的字符集 alter database <dbName> character set utf8; # utf8 gbk
删除数据库时会删除当前数据库中所有的数据表以及数据表中的数据
## 删除数据库 drop database <dbName>; ## 如果数据库存在则删除数据库 drop database is exists <dbName>;
use <dbName>
数据表实际就是⼀个⼆维的表格,⼀个表格是由多列组成,表格中的每⼀类称之为表格
的⼀个字段
char代表长度不可变字符串,varchar代表长度可变字符串。
create table students(stu_num char(8) not null unique, stu_name varchar(20) not null, stu_gender char(2) not null, stu_age int not null, stu_tel char(11) not null unique, stu_qq varchar(11) unique );
show tables;
desc <tableName>
## 删除数据表 drop table <tableName>; ## 当数据表存在时删除数据表 drop table if exists <tableName>;
## 修改表名 alter table <tableName> rename to <newTableName>; ## 数据表也是有字符集的,默认字符集和数据库⼀致 alter table <tableName> character set utf8; ## 添加列(字段) alter table <tableName> add <columnName> varchar(200); ## 修改列(字段)的列表和类型 alter table <tableName> change <oldColumnName> <newCloumnName> <type>; ## 只修改列(字段)类型 alter table <tableName> modify <columnName> <newType>; ## 删除列(字段) alter table stus drop <columnName>;
数据类型,指的是数据表中的列中⽀持存放的数据的类型。
在mysql中有多种数据类型可以存放数值,不同的类型存放的数值的范围或者形式是不同的
存储字符序列的类型
在MySQL数据库中,我们可以使⽤字符串来存储时间,但是如果我们需要基于时间字段
进⾏查询操作(查询在某个时间段内的数据)就不便于查询实现
在创建数据表的时候,指定的对数据表的列的数据限制性的要求(对表的列中的数据进
⾏限制)
为什么要给表中的列添加约束呢?
1.保证数据的有效性
2.保证数据的完整性
3.保证数据的正确性
字段常⻅的约束有哪些呢?
1.⾮空约束(not null):限制此列的值必须提供,不能为null
2.唯⼀约束(unique):在表中的多条数据,此列的值不能重复
3.主键约束(primary key):⾮空+唯⼀,能够唯⼀标识数据表中的⼀条数据
4.外键约束(foreign key):建⽴不同表之间的关联关系
主键——就是数据表中记录的唯⼀标识,在⼀张表中只能有⼀个主键(主键可以是⼀个列,也可以是多个列的组合)
当⼀个字段声明为主键之后,添加数据时:
1.此字段数据不能为null
2.此字段数据不能重复
create table books( book_isbn char(4) primary key, book_name varchar(10) not null, book_author varchar(6) );
或者
create table books( book_isbn char(4), book_name varchar(10) not null, book_author varchar(6), primary key(book_isbn) );
alter table books drop primary key;
## 创建表时没有添加主键约束 create table books( book_isbn char(4), book_name varchar(10) not null, book_author varchar(6) ); ## 创建表之后添加主键约束 alter table books modify book_isbn char(4) primary key; 123456789
在我们创建⼀张数据表时,如果数据表中有列可以作为主键(例如:学⽣表的学号、图书表的isbn)我们可以直接这是这个列为主键;
当有些数据表中没有合适的列作为主键时,我们可以额外定义⼀个与记录本身⽆关的列(ID)作为主键,此列数据⽆具体的含义主要⽤于标识⼀条记录,在mysql中我们可以将此列定义为int,同时设置为 ⾃动增⻓ ,当我们向数据表中新增⼀条记录时,⽆需提供ID列的值,它会⾃动⽣成。
create table types( type_id int primary key auto_increment, type_name varchar(20) not null, type_remark varchar(100) )
注意:⾃动增⻓从1开始,每添加⼀条记录,⾃动的增⻓的列会⾃定+1,当我们把某条记录删除之后再添加数据,⾃动增⻓的数据也不会重复⽣成(⾃动增⻓只保证唯⼀性、不保证连续性)
联合组件——将数据表中的多列组合在⼀起设置为表的主键
create table grades( stu_num char(8), course_id int, score int, primary key(stu_num,course_id) );
注意:在实际企业项⽬的数据库设计中,联合主键使⽤频率并不⾼;当⼀个张数据表中没有明确的字段可以作为主键时,我们可以额外添加⼀个ID字段作为主键。