文章目录
数据库介绍
数据库概述
什么是数据库
1、是一个存储数据的仓库。
2、本质上是⼀个文件系统,还是以文件的方式存在服务器的电脑上的。
3、 所有的关系型数据库都可以使⽤通⽤的SQL语句进⾏管理的DBMS (DataBase Management System)。
数据库管理系统
数据库管理系统(DataBase Management System,DBMS)
指⼀种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统⼀管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
SQL
SQL的全称是:Structured Query Language,结构化查询语⾔。
作用
1、 是⼀种所有关系型数据库的查询规范,不同的数据库都支持。
2、 通用的数据库操作语言,可以用在不同的数据库中。
3、 不同的数据库 SQL 语句有⼀些区别(方言)。
分类
1、Data Definition Language (DDL 数据定义语言), 如:建库,建表。
2、Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改。
3、Data Query Language(DQL 数据查询语言),如:对表中的查询操作。
4、Data Control Language(DCL 数据控制语言),如:对用户权限的设置。
语法
1、每条语句以分号结尾。
2、 SQL 中不区分大小写,关键字中认为大写和小写是⼀样的。(但是字符串中是区分大小写的)
3、三种注释方式:
注释使用方法 | 说明 |
---|---|
- - 注释内容 | - - 后面必须加空格 |
/* 注释内容 */ | 多行注释 |
# 注释内容 | 这是MySQL独有的注释方式 |
数据库操作
DDL
操作库
创建数据库
创建数据库:
CREATE DATABASE 数据库名;
判断数据库是否已经存在,不存在则创建数据库:
CREATE DATABASE IF NOT EXISTS 数据库名;
创建数据库并指定字符集:
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
如:
-- 直接创建数据库
create database db1;
-- 判断是否存在,如果不存在则创建数据库
create database if not exists db2;
-- 创建数据库并指定字符集为 gbk
create database db3 default character set gbk;
查看数据库
查看所有的数据库
show databases;
查看某个数据库的定义信息
show create database db3;
show create database db1;
修改数据库
修改数据库默认的字符集
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
具体操作:
-- 将db3数据库的字符集改成utf8
alter database db3 character set utf8;
删除数据库
删除数据库的语法:
DROP DATABASE 数据库名;
具体操作:
-- 删除db2数据库
drop database db2;
使用数据库
查看正在使⽤的数据库
SELECT DATABASE(); # 使⽤的⼀个mysql中的全局函数
使⽤/切换数据库
USE 数据库名;
具体操作:
-- 查看正在使⽤的数据库
select database();
-- 改变要使⽤的数据库
use db4;
操作表
前提:先使用某个数据库.
创建表
创建表的格式:
CREATE TABLE 表名 (
字段名 1 字段类型 1,
字段名 2 字段类型 2
);
关键字说明:
关键字 | 说明 |
---|---|
create | 创建 |
table | 表 |
具体操作:
-- 创建student表包含id,name,birthday字段
create table student (
id int, -- 整数
name varchar(20), -- 字符串
birthday date -- ⽣⽇,最后没有逗号
);
MySQL数据类型:
查看表
查看某个数据库中的所有表:
SHOW TABLES;
查看表结构:
DESC 表名;
查看创建表的SQL语句:
SHOW CREATE TABLE 表名;
具体操作:
-- 查看day21数据库中的所有表
use day21;
show tables;
-- 查看student表的结构
desc student;
修改表
添加表列 ADD:
ALTER TABLE 表名 ADD 列名 类型;
具体操作:
-- 为学⽣表添加⼀个新的字段remark,类型为varchar(20)
alter table student add remark varchar(20);
修改列类型 MODIFY:
ALTER TABLE 表名 MODIFY 列名 新的类型;
具体操作:
-- 将student表中的remark字段的改成varchar(100)
alter table student modify remark varchar(100);
修改列名 CHANGE:
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
具体操作:
-- 将student表中的remark字段名改成intro,类型varchar(30)
alter table student change remark intro varchar(30);
删除列 DROP:
ALTER TABLE 表名 DROP 列名;
具体操作:
-- 删除student表中的字段intro
alter table student change remark intro varchar(30);
修改表名:
RENAME TABLE 表名 TO 新表名;
具体操作:
-- 将学⽣表student改名成student2
rename table student to student2;
修改字符集 character set:
ALTER TABLE 表名 character set 字符集;
具体操作:
-- 将student2表的编码修改成gbk
alter table student2 character set gbk;
复制表
创建一张同样的表
语法:
CREATE TABLE 新表名 LIKE 旧表名;
具体操作:
-- 创建s1表,s1表结构和student表结构相同
create table s1 like student;
desc s1;
将⼀张已经存在的表中的数据复制到另一张表中
将表名2中的所有的列复制到表名1中:
INSERT INTO 表名 1 SELECT * FROM 表名 2;
只复制部分列:
INSERT INTO 表名 1(列 1, 列 2) SELECT 列 1, 列 2 FROM student;
具体操作:
-- 创建 student2 表,student2 结构和 student 表结构⼀样
drop table student2;
create table student2 like student;
-- 将 student 表中的数据添加到 student2 表中
insert into student2 select * from student;
-- 如果只想复制 student 表中 name,age 字段数据到 student2 表中,两张表都写出相应
的列名
insert into student2 (name,age) select name,age from student;
select * from student2;
更新表
UPDATE 表名 SET 列名=值 [WHERE 条件表达式]
# UPDATE: 需要更新的表名
# SET: 修改的列值
# WHERE: 符合条件的记录才更新
# 你可以同时更新⼀个或多个字段。
# 你可以在 WHERE ⼦句中指定任何条件。
不带条件修改数据:
UPDATE 表名 SET 字段名=值; -- 修改所有的⾏
带条件修改数据:
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
具体操作:
-- 不带条件修改数据,将所有的性别改成⼥
update student set sex = '⼥';
-- 带条件修改数据,将 id 号为 2 的学⽣性别改成男
update student set sex='男' where id=2;
-- ⼀次修改多个列,把 id 为 3 的学⽣,年龄改成 26 岁,address 改成北京
update student set age=26, address='北京' where id=3;
注意:如果update和delete不能执行,需要修改数据库安全模式
SET SQL_SAFE_UPDATES = 0;
删除表
直接删除表:
DROP TABLE 表名;
判断表是否存在,如果存在则删除表:
DROP TABLE IF EXISTS 表名;
具体操作:
-- 直接删除表 s1 表
drop table s1;
-- 判断表是否存在并删除 s1 表
drop table if exists `create`;
区别:
与直接删除的区别:如果表不存在,不删除,存在则删除。
DML
用于对表中的记录进行增删改操作。
插入记录
INSERT [INTO] 表名 [字段名] VALUES (字段值);
# INSERT INTO 表名:表示往哪张表中添加数据
# (字段名 1, 字段名 2, ...):要给哪些字段设置值
# VALUES (值 1, 值 2, ...):设置具体的值
插入全部字段
-- 所有的字段名都写出来
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3...) VALUES (值 1, 值 2, 值 3);
-- 不写字段名
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3...);
插入部分数据
INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
注意:没有添加数据的字段会使用 NULL。
更新记录
具体操作:
向学生表中,插入部分列:
insert into student (id,name,age,sex) values (1, '孙悟空', 20, '男');
insert into student (id,name,age,sex) values (2, '孙悟天', 16, '男');
向表中插入所有字段:
-- 插⼊所有列
insert into student values (3, '孙悟饭', 18, '男', '⻳仙⼈洞中');
-- 如果只插⼊部分列,必须写列名
insert into student values (3, '孙悟饭', 18, '男');
select * from student;
删除记录
DELETE FROM 表名 [WHERE 条件表达式]
# 如果没有指定 WHERE ⼦句,MySQL 表中的所有记录将被删除。
# 你可以在 WHERE ⼦句中指定任何条件
不带条件删除数据:
DELETE FROM 表名;
带条件删除数据:
DELETE FROM 表名 WHERE 字段名=值;
使⽤ truncate 删除表中所有记录:
TRUNCATE TABLE 表名;
truncate 和 delete 的区别:
truncate 相当于删除表的结构,再创建⼀张表。
具体操作:
-- 带条件删除数据,删除 id 为 1 的记录
delete from student where id=1;
-- 不带条件删除数据,删除表中的所有数据
delete from student;
DQL
以后填坑。
填坑:【数据库基础笔记】2、DQL查询