1 数据库介绍
1.1 数据库概述
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来。用户可以对数据库中的数据进行增加,修改,删除及查询操作。
集合、文件、数据库,三者进行存储数据的对比:
1. 集合:数据存储在内存中;问题是,一旦程序执行完毕了,数据消失了,数据不能永久性的储存
2. 文件:数据储存在磁盘中,可以永久性储存;问题是,当文件储存数据量达到几个G时,文件的打开都成文件,数据的操作就更成问题了
3. 数据库:数据储存的磁盘中,可以永久性储存;当数据量很大时,数据操作起来也很流畅;合适数据的频繁的增删改查的操作
1.2 数据库管理系统
数据库管理系统(DataBase Management System,DBMS):指一种操作数据库、管理数据库的大型软件。
作用:用于数据库的建立、使用和维护数据库。
数据库管理系统的功能:实现了对多个数据库进行统一管理和控制,以保证数据库的安全性和完整性
1.3 Java类和数据表的对应关系
1.4 常见数据库
MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL.x版本也开始收费。
Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
SQLite:嵌入式的小型数据库,应用在手机端。
常用数据库:MYSQL
1.5 MySQL数据库安装(见装机必备专栏)
2 SQL语句
2.1 SQL 概述
结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
2.2 SQL语句分类
-
数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
-
数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。
-
数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
-
数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
2.3 SQL语句的语法规则
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写,以分号结尾。
使用/**/、 – 、# 的方式完成注释
/*
多行注释
*/
-- 单行注释
# 单行注释
SELECT * FROM user;
2.4 SQL中数据的常用数据类型
类型名称 | 说明 |
---|---|
int | 整数类型 |
double | 小数类型 |
decimal(m,d) | 指定整数位与小数位长度的小数类型 |
date | 日期类型,格式为yyyy-MM-dd,包含年月日,不包含时分秒 |
datetime | 日期类型,格式为 YYYY-MM-DD HH:MM:SS,包含年月日时分秒 |
timestamp | 日期类型,时间戳 |
varchar(M) | 文本类型, M为0~65535之间的整数, 变长 |
char(M) | 文本类型, M为0~65535之间的整数, 定长 |
3 Database数据库的SQL操作
/*
创建数据库
关键字 create database
格式: create database 数据库名字
删除数据
关键字 drop database
格式: drop database 数据库名字
*/
DROP DATABASE mydatabase;
SHOW DATABASES;
CREATE DATABASE mydatabase;
USE mydatabase;
4 Table表的SQL操作
4.1 创建表
创建数据表: 关键字 create table
格式:
create table 表名(
列名1 数据类型[长度] [约束],
列名2 数据类型[长度] [约束],
列名3 数据类型[长度] [约束]
);
细节: 可以使用关键字作为名字,但是为了规范,避开关键字
使用关键字作为名字,请你添加反引号 `` '' ""
/*
创建学生信息表
编号,姓名,年龄
*/
CREATE TABLE student(
id INT,
NAME VARCHAR(10),
age INT
);
#需求:创建雇员表,包含雇员的姓名,密码,性别, 生日信息。
CREATE TABLE employee(
NAME VARCHAR(50),
PASSWORD VARCHAR(50),
gender CHAR(1),
birthday DATE
);
4.2 查看表
-- 查看表结构
desc 表名;
-- 查看所有表, 格式: show tables
SHOW TABLES;
-- 查看指定表的建表结构, 格式: show create table 表名;
SHOW CREATE TABLE users;
4.3 修改表
/*
修改表结构
在已经创建好的数据表中,修改他的结构
操作具有风险性(数据丢失)
关键字 alter table
*/
# 数据表添加列 列名 desc 可变字符255
# alter table 表名 add 列名 数据类型[长度] [约束]
ALTER TABLE student ADD `desc` VARCHAR(255);
# 修改列的数据类型 desc列,修改为int
# alter table 表名 modify 列名 新数据类型[长度] [约束]
ALTER TABLE student MODIFY `desc` INT ;
# 修改列名 desc列名改为 description
# alter table 表明 change 旧列名 新列名 新数据类型[长度] [约束]
ALTER TABLE student CHANGE `desc` `description` INT;
# 修改表名 student 修改为 student_table
# rename TABLE 旧表名 to 新表明
RENAME TABLE student TO student_table
4.4 删除表
-- 删除表, 格式: drop table 表名;
DROP TABLE users;
5 表中记录的SQL操作
5.1 增(插入表记录)
/*
数据表添加数据
关键字 insert into values
*/
# 添加数据的格式1:
# insert [into] 表名(列名1,列名2,列名3)values(值1,值2,值3)
# 数据库中,值的引号问题,数字可以不写任何符号,其他数据类型加引号,单引号
INSERT INTO student(id,NAME,age,description)VALUES(1,'张三',20,'学习努力');
# 添加数据的格式2:
# insert [into]表名 values(全部的值)
INSERT INTO student VALUES(2,'李四',21,'不好好学习');
# 添加数据的格式3: 批量数据
# insert [into]表名 values(全部的值),(全部的值),(全部的值)
INSERT INTO student VALUES
(3,'王五',24,'还是可以'),
(4,'赵柳',30,'天天扫雷'),
(5,'冯琦',19,'天天空档接龙')
5.2 删(删除表记录
/*
删除数据
关键字 delete from
删除数据必须添加条件,否则全部删除
*/
# 删除编号是5的数据
DELETE FROM student WHERE id=5;
# 删除全部数据
DELETE FROM student ;
5.3 改(更新表记录)
/*
更新数据
对原有数据进行修改
没有确定,改了就是改了
关键字 update set where
注意:
修改数据一定要进行条件的筛选
没有条件筛选,表中的所有数据,都会修改
*/
# update 表名 set 列=值,列=值,列=值 where 条件
# 修改王五,名字,年龄,描述
UPDATE student SET NAME='王五五',age=25,description='一般般'
WHERE id=3;
5.4 查:较为复杂单独一章节
6 SQL约束(添加、删除)
约束, 其实就是一种限制条件, 让你不能超出这个控制范围.
而在数据库中的约束, 就是指 表中的数据内容 不能胡乱填写, 必须按照要求填写. 好保证数据的完整性与安全性.
6.1 主键约束
主键约束 primary key
主键约束的自定义名称规则:pk_列名
约束内容:
1 被设置为主键约束的列,数据在表中具有唯一性
2 这个主键列的数据,不能是空(null)
3 每个表只能设置一个主键,每个数据表都应该有一个主键
# 创建主键约束的方式1: 创建表的同时,直接创建,推荐使用
CREATE TABLE persons(
id INT PRIMARY KEY,
firstname VARCHAR(50),
lastname VARCHAR(50),
address VARCHAR(50)
);
# 创建主键约束的方式2: 在创建表的约束区域创建
# 关键字 constraint,可以指定约束的名字 约束字母缩写_列名
CREATE TABLE persons(
id INT ,
firstname VARCHAR(50),
lastname VARCHAR(50),
address VARCHAR(50),
CONSTRAINT PRIMARY KEY pk_id (id)
);
# 创建主键约束的方式3: 先建好表,修改alter table
CREATE TABLE persons(
id INT ,
firstname VARCHAR(50),
lastname VARCHAR(50),
address VARCHAR(50)
);
ALTER TABLE persons ADD CONSTRAINT PRIMARY KEY pk_id (id);
# 联合主键,多个列一起,实现一个主键
CREATE TABLE persons(
id INT ,
firstname VARCHAR(50),
lastname VARCHAR(50),
address VARCHAR(50),
CONSTRAINT PRIMARY KEY pk(firstname,lastname)
);
注意:推荐使用方式1和方式2,2的优势是可以设置主键的名称,默认的是主键的列名称
删除主键约束:
ALTER TABLE persons DROP PRIMARY KEY;
6.1.1 自动增长列(作用于主键的)
数据的自动增长列 (免维护)
设置为自动增长列:
必须是整数
必须是主键
关键字 : auto_increment
CREATE TABLE persons(
id INT PRIMARY KEY AUTO_INCREMENT,
firstname VARCHAR(50),
lastname VARCHAR(50),
address VARCHAR(50)
);
INSERT INTO persons(firstname,lastname,address)VALUES('刘','德华','香港');
INSERT INTO persons(firstname,lastname,address)VALUES('张','学友','香港');
# 添加语句,可以简化书写
# 主键列,写值是null,自动增长
INSERT INTO persons VALUES(NULL,'黎','明','香港');
注意:
问:针对auto_increment ,删除表中所有记录使用 delete from 表名 或使用 truncate table 表名,二者有什么区别?
删除过程:
delete: 表中记录一条一条删除, auto_increment 计数不会重置为1; 新记录添加时在原有计数基础上+1
truncate: 直接将表删除,重新创建新表, auto_increment 计数重置为1;
6.2 非空约束
非空约束:
约束的是这个列数据不能是 null
关键字 not null
# 创建非空约束的方式1: 创建表直接创建
CREATE TABLE persons (
id INT PRIMARY KEY AUTO_INCREMENT,
firstname VARCHAR(255) NOT NULL,
lastname VARCHAR(255),
address VARCHAR(255)
);
# 创建非空约束的方式2: 修改表结构 alter table
CREATE TABLE persons (
id INT PRIMARY KEY AUTO_INCREMENT,
firstname VARCHAR(255) ,
lastname VARCHAR(255),
address VARCHAR(255)
);
ALTER TABLE persons MODIFY firstname VARCHAR(255) NOT NULL;
删除非空约束
ALTER TABLE persons MODIFY firstname VARCHAR(255)
6.3 唯一约束
唯一约束:
设置唯一约束的这个列,数据必须唯一性
主键约束与唯一约束的区别
1. UNIQUE 和 PRIMARY KEY 约束均为列提供了唯一性的保证。PRIMARY KEY 是自动定义的 UNIQUE 约束。
2. 每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
3. UNIQUE 不限制 null 值 出现的次数
4. 从业务上来说:主键约束的数据不能是真实的业务数据
关键字 unique
# 创建唯一约束的方式1: 创建表的同时,直接创建 推荐方式
CREATE TABLE persons (
id INT PRIMARY KEY AUTO_INCREMENT,
firstname VARCHAR(255) UNIQUE,
lastname VARCHAR(255),
address VARCHAR(255)
);
# 创建唯一约束的方式2: constraint区域添加
CREATE TABLE persons (
id INT PRIMARY KEY AUTO_INCREMENT,
firstname VARCHAR(255) ,
lastname VARCHAR(255),
address VARCHAR(255),
CONSTRAINT UNIQUE qk_firstname(firstname)
);
# 创建唯一约束的方式3: 修改表结构 alter table
CREATE TABLE persons (
id INT PRIMARY KEY AUTO_INCREMENT,
firstname VARCHAR(255) ,
lastname VARCHAR(255),
address VARCHAR(255)
);
ALTER TABLE persons MODIFY firstname VARCHAR(255) UNIQUE;
删除唯一约束:
/*
添加唯一约束后: 数据库MySQL认为,这个列会经常被查询
会为这个列自动添加 索引(提高数据查询效率 )
删除的是这个索引
*/
ALTER TABLE persons DROP INDEX firstname;
6.4 默认约束
对一个列,数据默认
关键字 default
# 创建默认约束方式1: 创建表直接添加
CREATE TABLE persons (
id INT PRIMARY KEY AUTO_INCREMENT,
firstname VARCHAR(255),
lastname VARCHAR(255),
address VARCHAR(255) DEFAULT '北京市'
);
INSERT INTO persons VALUE(NULL,'张','三丰',NULL);
INSERT INTO persons(id,firstname,lastname) VALUE(NULL,'宋','无极');
# 创建默认约束方式2: 修改表结构
ALTER TABLE persons MODIFY address VARCHAR(255) DEFAULT '天津市';
删除默认约束:
ALTER TABLE persons MODIFY address VARCHAR(255);