Bootstrap

数据库基础day1

数据库基础

软件: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(数据定义语言)

数据库操作
  1. -- 创建数据库语法
     CREATE DATABASE 数据库名;
    
  2. -- 数据库不存在才创建数据库
     CREATE DATABASE IF NOT EXISTS 数据库名;
    
  3. -- 创建数据库并指定 utf8 编码字符集
     方式1CREATE DATABASE 数据库名 CHARACTER SET utf8;
     方式2CREATE DATABASE 数据库名 CHARSET=utf8;
    CREATE  DATABASE IF NOT EXISTS 数据库名 CHARSET utf8;
    
  4. -- 查看、使用数据库  
    -- 查看数据库语法
    SHOW DATABASES ;
    -- 使用数据库语法
     USE 数据库名;
    -- 查看当前使用的是哪个数据库
    SELECT database();
    
  5. -- 删除数据库语法【一定要慎重!!!】
     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 INTOVALUES(1,2,3...);
 指定字段:INSERT INTO(字段1, 字段2, 字段3...) VALUES(1,2,3...);
-- 一次添加多行数据
 不指定字段:INSERT INTOVALUES(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,数据库会自动维护主键的值。

;