数据库基础
软件:DataGrip与Mysql
sql语句
根据 SQL 语句的功能,可以将其分为如下4类:
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:数据库,表,列等。
注意:DDL并涉及表中记录(数据)的操作!
DML (Data Manipulation Language):数据操作语言,用来对数据库中的表记录进行增、删、改。
DQL** (Data Query Language):数据查询语言,用来查询数据库中表的记录。【重点学习】
DCL (Data Control Language):数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。
SQL通用语法:
1)一条SQL语句可以单行或多行书写,以分号;结尾
2)MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
3)可以使用/* */、–、#的方式完成注释
DataGrip快速注释/取消注释的快捷键:ctrl + /
4)可使用空格和缩进来增强语句的可读性
DataGrip软件sql格式化快捷键: ctrl + alt + l
DCL(数据控制语言)
-- =================================== 用户权限操作 ===================================
-- 1.创建用户
CREATE USER 'user_t1'@'localhost' IDENTIFIED BY '123456';
-- 2.赋予权限
GRANT ALL PRIVILEGES ON *.* TO 'user_t1'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 3.删除权限
DROP USER 'user_t1'@'localhost';
FLUSH PRIVILEGES;
DDL(数据定义语言)
数据库操作
-
-- 创建数据库语法 CREATE DATABASE 数据库名;
-
-- 数据库不存在才创建数据库 CREATE DATABASE IF NOT EXISTS 数据库名;
-
-- 创建数据库并指定 utf8 编码字符集 方式1:CREATE DATABASE 数据库名 CHARACTER SET utf8; 方式2:CREATE DATABASE 数据库名 CHARSET=utf8; CREATE DATABASE IF NOT EXISTS 数据库名 CHARSET utf8;
-
-- 查看、使用数据库 -- 查看数据库语法 SHOW DATABASES ; -- 使用数据库语法 USE 数据库名; -- 查看当前使用的是哪个数据库 SELECT database();
-
-- 删除数据库语法【一定要慎重!!!】 DROP DATABASE 数据库名;
表操作(未涉及表的内容)
-- 创建表语法
CREATE TABLE 表名(
字段名1 数据类型(长度) 约束,
字段名2 数据类型(长度) 约束
...
);
如果直接在代码中 创建表语法部分 修改表的名字,则会多加入一个新表。
字符类型与约束
用数据类型如下:
整数:tinyint、smallint、 mediumint、int、bigint
参考文档:[https://dev.mysql.com/doc/refman/8.0/en/integer-types.html]
小数:decimal,double,float
decimal(M, N),如decimal(5,2)表示共存5位数,小数占2位,存储小数要求没有误差时使用,比如:金钱
字符串:varchar,char,text
char表示固定长度的字符串,如char(3),如果填充’ab’时会补一个空格为’ab ‘,3表示字符数
varchar表示可变长度的字符串,如varchar(3),填充’ab’时就会存储’ab’,3表示字符数
日期时间:date, time, datetime
约束 | 特点 | |
---|---|---|
主键约束 | primary key | 非空且唯一 |
非空约束 | not null | 非空 |
唯一约束 | unqiue | 唯一但可以为空 |
默认值 | default | 添加数据时,如果不指定,就使用默认值 |
非空约束NOT NULL有什么特点?
列值不能为NULL
唯一约束UNIQUE有什么特点?
列值的必须唯一,但可以为NULL
默认值DEFAULT有什么特点?
插入数据时,如果不设置值,则使用默认值;如果设置值,则以设置的为准。
-- 加主键方法:
-- 1.创建表时添加主键约束
# 在创建数据表时添加
CREATE TABLE person(
id INT PRIMARY KEY, -- id就是这个表主键
last_name VARCHAR(100),
first_name VARCHAR(100),
address VARCHAR(100),
city VARCHAR(100)
);
-- 2.创建表后添加主键约束
# 在创建后添加约束(了解)
CREATE TABLE person1(
id INT,
last_name VARCHAR(100),
first_name VARCHAR(100),
address VARCHAR(100),
city VARCHAR(100)
);
# 创建表后,使用ALTER TABLE关键字添加主键
ALTER TABLE person1 ADD PRIMARY KEY (id);
-- 删除主键约束
ALTER TABLE person1 DROP PRIMARY KEY;
-- 主键自动增长设置
# 在创建表时添加自动增长
CREATE TABLE person2(
id INT PRIMARY KEY AUTO_INCREMENT, # PRIMARY KEY 是约束:强制 id 唯一且非空。
last_name VARCHAR(255), AUTO_INCREMENT 是属性:仅负责自动生成值。
first_name VARCHAR(255),
address VARCHAR(255),
city VARCHAR(255)
);
-- 查看表语法
SHOW TABLES; -- 显示当前数据库中有哪些表
DESC 表名; -- 查看指定数据表的表结构
-- 修改表语法
RENAME TABLE 表名 TO 新表名; -- 修改表名
-- 删除表语法
DROP TABLE 表名; -- 删除指定数据表
-- 添加列
ALTER TABLE 表名 ADD 列名 类型(长度) [约束];
-- 修改列
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型(长度) 约束;
-- 删除列
ALTER TABLE 表名 DROP 列名;
DML(数据操作语言)
-- 插入表记录
-- 一次添加一行
不指定字段:INSERT INTO 表 VALUES(值1, 值2, 值3...);
指定字段:INSERT INTO 表 (字段1, 字段2, 字段3...) VALUES(值1, 值2, 值3...);
-- 一次添加多行数据
不指定字段:INSERT INTO 表 VALUES(值1, 值2, 值3...), (值1, 值2, 值3...), ...;
指定字段:INSERT INTO 表 (字段1, 字段2, 字段3...) VALUES(值1, 值2, 值3...), (值 1, 值2, 值3...)...;
-- 更新表记录
--更新所有行:UPDATE 表名 SET 字段名=值, 字段名=值, ...; 慎用慎用慎用!!!
更新满足条件的行:UPDATE 表名 SET 字段名=值, 字段名=值, ... WHERE 条件;
-- 删除表记录
语法:DELETE FROM 表名 [WHERE 条件]; -- DELETE支持带 WHERE 条件删除部分数据。
语法:TRUNCATE TABLE 表名; -- 清空表数据 -- TRUNCATE只能清空整个表,不支持 WHERE 条件。主键自增序列会清零
如果单纯清空表数据,建议使用TRUNCATE,如果带条件的删除,还是要使用DELETE
-- 逻辑删除 ——数据表的数据没有被删除了,只是设置了一个删除标记,表示被逻辑删除了
-- ① 先给表增加一个列 is_delete,代表每行的数据是否被逻辑删除,假设0表示未删除,1表示删除
ALTER TABLE category ADD is_delete BIT DEFAULT 0;
INSERT INTO category (cid, cname, description)
VALUES
(1, '服饰', '秋冬装5折'),
(2, '电器', '夏季优惠'),
(3, '玩具', '奥迪双钻我的伙伴'),
(4, '蔬菜', '时令蔬菜,新鲜速达');
-- ② 假设要对 cid 为 2 的这一行进行逻辑删除(本质:并不是删除,而是改成删除标记的值)
UPDATE category SET is_delete=1 WHERE cid=2;
-- 物理删除 ——数据表的数据真的被删除了
MySQL主键设置自增之后,有什么特点?
在设置主键自增之后,insert数据时,如果不设置主键,或主键设置为0或NULL,数据库会自动维护主键的值。