一、MySQL数据库(单表)(1)

本文详细介绍了SQL的基础知识,包括数据库的概念、SQL语句的分类及其语法规范,并深入讲解了数据库、表的操作方法,以及如何对表中的记录进行增删改查等关键技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值