一、DDL与DML操作
(1)DDL——数据定义语言
DDL用于定义数据库结构,包括创建、修改和删除数据库、表等对象
①数据库
数据库的基本操作:
-- 创建数据库
CREATE DATABASE IF NOT EXISTS mydb;
-- 查看所有数据库
SHOW DATABASES;
-- 选择数据库
USE mydb;
-- 修改数据库字符集
ALTER DATABASE mydb CHARACTER SET utf8mb4;
-- 删除数据库
DROP DATABASE IF EXISTS mydb;
IF NOT EXISTS: 用于避免创建已存在的数据库时报错,简单来说,无则创建,有则什么都不做
utf8mb4: 是一种字符集
IF EXISTS: 用于避免删除不存在的数据库时出错
②表
创建表
CREATE TABLE [IF NOT EXISTS] 表名 (
列名1 数据类型 [约束],
列名2 数据类型 [约束],
...
[表级约束]
);
在这里举例创建一个表
-- 创建学⽣表
CREATE TABLE IF NOT EXISTS students (
id INT,
name VARCHAR(50),
age INT,
gender VARCHAR(10),
birthday DATE
);
可以通过语句查看表结构
SELECT * FROM students
这时候眼尖的就会发现,数据类型怎么不一样,有什么区别吗?
好,接下来我来了解一下数据类型
数据类型
数据类型有很多很多,大致可以分为三类:①数字类型 ②字符串类型 ③日期类型
①数字类型:INT(整数类型)、TINYINT(小整数)、SMALLINT(小整数)、BIGINT(大整数)、FLOAT(单精度浮点数)、DOUBLE(双精度浮点数)、DECIMAL(M,D) :定点数,M是总位数,D是⼩数位数
②字符串类型:CHAR(n)(固定⻓度字符串,n最⼤为255)、VARCHAR(n)(可变⻓度字符串)、TEXT(⽂本类型)、LONGTEXT(⻓⽂本类型)、ENUM(枚举类型)
③日期类型:DATE(⽇期类型,格式为'YYYY-MM-DD')、TIME(时间类型,格式为'HH:MM:SS')、DATETIME(⽇期时间类型,格式为'YYYY-MM-DD HH:MM:SS')、YEAR(年份类型,格式为'YYYY')
表的其他操作
-- 查看表结构 DESCRIBE 表名; 或 DESC 表名;
DESC students;
-- 查看表创建语句 SHOW CREATE TABLE 表名;
SHOW CREATE TABLE students;
-- 删除表 DROP TABLE [IF EXISTS] 表名;
DROP TABLE IF EXISTS students;
修改表结构
-- 添加列 ALTER TABLE 表名 ADD 列名 数据类型 [约束];
ALTER TABLE students ADD email VARCHAR(100);
-- 修改列 ALTER TABLE 表名 MODIFY 列名 新数据类型 [新约束];
ALTER TABLE students MODIFY age TINYINT;
-- 重命名列 ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [约束];
ALTER TABLE students CHANGE email student_email VARCHAR(100);
-- 删除列 ALTER TABLE 表名 DROP 列名;
ALTER TABLE students DROP student_email;
-- 重命名表 ALTER TABLE 表名 RENAME TO 新表名;
ALTER TABLE students RENAME TO tb_students;
(2)DML——数据操纵语言
DML主要应用于操作数据库中的数据,包括插入。更新和删除数据
数据插入
①插入单行数据: INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);
②插入多行数据: INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), ...;
③插入查询结果: INSERT INTO 表名 (列1, 列2, ...) SELECT 列1, 列2, ... FROM 其他表;
-- 插⼊单⾏数据
INSERT INTO students (id, name, age, gender) VALUES (1, '张三', 20, '男');
-- 插⼊多⾏数据
INSERT INTO students (id, name, age, gender) VALUES
(2, '李四', 22, '男'),
(3, '王五', 21, '⼥');
-- 插⼊查询结果
INSERT INTO students_bak (id, name, age) SELECT id, name, age FROM student
s;
数据修改
更新数据: UPDATE 表名 SET 列1=值1, 列2=值2, ... [WHERE 条件];
这里需要注意的是,如果不加WHERE条件,将更新表中所有行
-- 更新单⾏数据
UPDATE students SET age=23 WHERE id=1;
-- 更新多⾏数据
UPDATE students SET age=age+1 WHERE gender='男';
-- 更新所有⾏
UPDATE students SET status=1;
数据删除
删除数据: DELETE FROM 表名 [WHERE 条件];
这里需要注意的是,如果不加WHERE条件,将删除表中所有行
截断表: TRUNCATE TABLE 表名; ,删除所有数据且⽆法回滚
这个与上面的区别简单来说,就是假如有一列数据是从1开始自增的,通过上面的删除方式删除后,再往表中添加数据,数据将会跟着上一次删除的尾部递增;而用下面这个删除方式,则会从1开始
-- 删除单⾏数据
DELETE FROM students WHERE id=1;
-- 删除多⾏数据
DELETE FROM students WHERE age > 22;
-- 删除所有数据
DELETE FROM students;
-- 截断表
TRUNCATE TABLE students;