【超万字详细Mysql的基本语法之增删查改】

前言:
💞💞大家好,书生♡,今天主要和大家分享一下mysql的基本语法,数据库的增删改查,和详细案例,希望对大家有所帮助。
💞💞前路漫漫,希望大家坚持下去,不忘初心,成为一名优秀的程序员

个人主页⭐: 书生♡
gitee主页🙋‍♂:闲客
专栏主页💞:大数据开发
博客领域💥:大数据开发,java编程,前端,算法,Python
写作风格💞:超前知识点,干货,思路讲解,通俗易懂
支持博主💖:关注⭐,点赞、收藏⭐、留言💬

1.什么是Mysql

1.1 MySQL的概念

 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点
在这里插入图片描述

1.2 Mysql的优势

  • 可以存储千万条级别的数据
  • 适用多种api,如Java,python,js,go,php
  • 支持多种平台,windows mac linux
  • 支持结构化数据 (可以使用行列索引确定一条数据的数据存储形式
  • 支持事务
  • 开源免费(已经被orcale公司收购,从mysql6.x开始已经开始收费。)

为什么要使用MySQL存储数据, 能不能使用txt 或者 excel 存储???
原因也很简单,

  • excel:存储不高效,并且对于数据量较大的文件打开都很困难。
  • txt:不能保证数据的一致性和完整性。

2. 数据哭的分类

数据库分为:关系型数据库和非关系型数据库

2.1 关系型数据库

关系型数据库:SQL : (一般处理关系型数据, 通过行索引,和列索引可以确定唯一的数据值)

  • 数据与数据之间存在关联关系
  • 存储的是结构化数据,数据之间可以创建关联关系或者关联规则

常见的关系型数据库:

  • MySQL:最常用的关系型数据库之一,且开源免费(MySQL6.X版本后已经开始收费)
  • Orcale:当前最优秀的关系型数据库,收费。
  • DB2:一般在银行系统中使用,收费且较贵。(数据安全,稳定,精度损失)
  • SQLserver: 在windowsServer中使用,国内使用的较少
  • sqllite:小型数据库

2.2 非关系型数据库

非关系型数据库: NoSQL(不仅仅是SQL)

  • 数据与数据之间不存在关联关系
  • 存储的是kv结构的数据(key: value 一个键对应一个值,通过键取值

常见的非关系型数据库:

  • Redis:在内存 中存储,效率高,速度快,但数据体量不宜过大。
  • HBASE:列式存储数据库,高效存储海量数据(数据吞吐量极大)
  • mangoDB:一般和爬虫配合使用,用于存储大型文本数据。

3.数据类型

不同的类型数据,操作方式不一致:
这里列举了一些在数据库操作的做常用的数据类型
在这里插入图片描述
请添加图片描述

4. SQL语句介绍

  SQL语言规范是所有的关系型数据库都必须遵守的规范, sql规范相当于普通话,而每个厂家的sql语法相当于方言。

  sql语言是编程语言,因为现阶段的sql已经满足要求(例如mysql8.0以后)

SQL语言的分类:

  • 数据定义语言(DDL):创建一个存储数据记录的结构(数据库,数据表,数据字段,约束等)
  • 数据操作语言(DML):进行数据记录的写入,修改,删除等工作。
  • 数据查询语言(DQL):进行数据查询的工作,换句话说,就是数据的读取工作。
  • 数据控制语言(DCL):数据安全,用户管理,隔离等级等设置。

以下是SQL语句语法:

1.sql语句用分号(;)结尾,目的是区分sql语句到底是一句指令还是两句指令。
在这里插入图片描述

2.sql语句可以使用空格或者换行符随意修饰,使其可读性更强,但是不影响执行效果。(关键字或者标识符不能拆分)
在这里插入图片描述

3.sql语句不区分大小写,但是mysql中建议使用大写。
在这里插入图片描述

4.注释形式:

  • 多行注释 /* 注释内容 */
  • 单行注释 – (-- [空格] 代码)
    在这里插入图片描述

4.数据库的操作

DDL操作时对于库,表和字段的操作—库表和字段的关系如下:
在这里插入图片描述

4.1创建库

格式 : create database 数据库名称
我们在插入的时候为了防止汉字字符集报错,所以我们在创建数据库的时候,需要设置字符集为utf8
CREATE DATABASE IF NOT EXISTS test_db_utf8 CHARACTER SET ‘utf8’;

快捷键:
ctrl + enter 运行代码
alt + ctrl + L 自动格式化代码

-- 1. 数据库的创建
-- 格式 : create database 数据库名称
CREATE DATABASE test_db;
-- 6. 当我们创建数据库时,该数据库名称已经存在则会报错
-- Can't create database 'test_db'; database exists
CREATE DATABASE test_db;
-- 为了避免报错,我们会创建数据库时增加if not exists 避免程序报错
CREATE DATABASE IF NOT EXISTS test_db;

-- 一般在我们创建数据库时,会增加数据集,因为如果不书写数据集,将会无法存储中文.
CREATE DATABASE test_db_utf8 CHARSET = utf8;
CREATE DATABASE IF NOT EXISTS test_db_utf8 CHARACTER SET 'utf8';

-- 快速格式化快捷键 : ctrl + alt + L

在这里插入图片描述

4.2显示库

-- 2. 查看当前服务中所有的数据库名称
SHOW DATABASES;

-- 7. 查询数据库的创建语句
-- CREATE DATABASE `test_db_utf8` /*!40100 DEFAULT CHARACTER SET utf8 */
SHOW CREATE DATABASE test_db_utf8;

在这里插入图片描述

4.3 使用数据库

use [数据库名];
//转换当前数据库

-- 3. 使用数据库
USE test_db;

在这里插入图片描述

4.4删除数据库

drop database [数据库名];

在这里插入图片描述

5.表的操作

5.1查看表

-- 2. 查看当前数据库中所有的数据表名称
SHOW TABLES;

-- 也可以使用in 查询指定数据库中所有的表名称.
SHOW TABLES IN test_db;

在这里插入图片描述

5.2 创建表

-- 1. 创建数据表
/*
create table 表名 (
    字段1 数据类型 [约束],
    字段2 数据类型 [约束],
    字段3 ......
)
 */
CREATE TABLE students
(
    id     INT NOT NULL,
    name   VARCHAR(30),
    gender VARCHAR(30)
);

在这里插入图片描述

5.3显示表结构

desc [表名];
//显示表的结构类型,和默认值

-- 3. 查询表中字段的详细信息
-- mysql中  DESC 完全等价于 DESCRIBE
DESC students;
DESCRIBE students;

在这里插入图片描述

5.4删除表

drop table [表名];

-- 4. 删除数据表
DROP TABLE students;

-- 被删除的数据库必须存在,否则会报错
-- Unknown table 'test_db_utf8.students'
-- 为了避免报错,我们会在删除数据表时增加 if exists  当数据表存在时就删除,不存在什么也不做
DROP TABLE IF EXISTS students

在这里插入图片描述

6.DDL表的字段操作

数据字段的操作,是对于指定表的数据字段的操作,字段是依托于数据表存在的,不能单独存在.

表的字段操作如下:

  1. 在数据表中新增一个字段
    – 格式: alter table 表名 add 字段名称 字段类型 [约束];
    – 需求: 在students 表中增加height字段
    ALTER TABLE students ADD height DOUBLE;
    在这里插入图片描述
  1. 在数据表中修改一个字段
    – 格式: alter table 表名 change 旧字段名 新字段名 字段类型 [约束];
    – 需求: 将id字段修改为stu_id字段并且改为varchar数据类型
    ALTER TABLE students CHANGE id stu_id VARCHAR(30) not null;
    在这里插入图片描述

3.扩展: 如果不需要修改字段名称,仅修改字段类型或约束,前后两个字段名称可以以相同
– 需求: 将stu_id字段的数据类型修改为tinyint
ALTER TABLE students CHANGE stu_id stu_id TINYINT not null;
– 这种情况还可以使用modify进行修改
– 格式: alter table 表名 modify 字段名 字段类型 [约束];
ALTER TABLE students MODIFY stu_id MEDIUMINT; – 不书写not null 就可以存储空值

  1. 在数据表中删除一个字段
    – 记住,所有DDL语言中的删除操作都使用drop 所有DML语言中的删除都是用delete
    – 需求: 删除gender字段
    ALTER TABLE students DROP gender;
  1. 修改表名
    – alter table 表名 rename to 新表名;
    ALTER TABLE students RENAME TO heros;

7.DDL操作中的注释—comment

comment 就是对于数据库中的数据表或数据字段进行注释的, 在我们后续使用各种IDE工具时,方便查询数据内容.

-- 1. 创建一个数据库
CREATE DATABASE db_1 CHARSET = 'utf8';
-- 使用数据库db_1
USE db_1;

-- 2. 创建一个数据表
CREATE TABLE person
(
    id     INT COMMENT '身份证号',  
    name   VARCHAR(30) COMMENT '姓名',
    gender VARCHAR(30) COMMENT '性别'
) COMMENT '人口表';

-- 3. 查询表的创表语句
show CREATE TABLE person;

将鼠标悬停在数据字段或数据表中时,可以查看表或字段的解释信息

在这里插入图片描述
我们选择表后使用ctrl + q 会显示表的创建信息,内部有注释内容.
在这里插入图片描述

8.插入–DML语言

8.1单列插入

insert into [表名] values(,);
//注意值得顺序要一致

-- 插入数据, 内部含有中文记录
INSERT INTO student VALUE (1, '小明', '男');

在这里插入图片描述

在这里插入图片描述

8.2 单条数据指定字段插入

一次插入一条数据记录,指定被插入的字段名, 未指定的默认赋值为null
-- 格式: insert into 表名(字段1, 字段2,...) value(字段值1, 字段值2,....);
-- 这种方式插入, 指定的字段数量, 要与value中字段值的数量完全一致, 否则会报错
INSERT INTO
    student(id, name) VALUE (2, '小芳');

在这里插入图片描述

8.3 多列插入

insert into [表名] values(,),(,);
//同时插入多个数据,比较方便


 一次插入多条数据, 不指定被插入的字段
-- 格式: insert into 表名 values(字段值1, 字段值2, .....),(字段值1, 字段值2, .....), ....;
INSERT INTO
    student
VALUES
    (3, '小智', '男'),
    (4, '小刚', '男'),
    (5, '小霞', '女');

在这里插入图片描述

8.4 多条数据指定字段

 一次插入多条数据记录, 指定被插入的字段, 未指定的字段填充null (空值的意思)
-- 格式: insert into 表名(字段1, 字段2,...) values(字段值1, 字段值2,....), (字段值1, 字段值2,....),.....;
INSERT INTO
    student(id, name)
VALUES
    (6, '鲁智深'),
    (7, '唐伯虎'),
    (8, '蔡徐坤');

在这里插入图片描述

9.DML之数据的修改

修改数据记录
– 关键字: update 修改已有数据记录中的指定字段的值.
– 格式: update 表名 set 字段名 = 值 [where 筛选条件];

-- 需求1: 将id = 4的学员 性别修改为女
UPDATE student
SET
    gender = '女'
WHERE
    id = 4;

-- 需求2: 将id = 5的学员 性别修改为男, 姓名修改为李大炮;
UPDATE student
SET
    name   = '李大炮',
    gender = '男'
WHERE
    id = 5;

-- 需求3: 将所有性别为男的学员的性别修改为猛男
UPDATE student
SET
    gender = '猛男'
WHERE
    gender = '男';
  • 修改数据记录时, 被修改的字段的值必须与原数据的数据类型一致 这里是引用
  • 在修改时 一般都有where 如果没有则对于所有的数据记录进行修改(慎用)

10 .DML之数据的删除操作

delete from 表名 where [筛选条件];
注意: 删除操作时,一定要增加where 条件,否则会修改所有的行

delete , 删除表中的数据记录, 记住不是删除表.

  • 格式: delete from 表名 where [筛选条件];
-- 需求: 删除表中id = 5的数据记录
DELETE
FROM
    student
WHERE
    id = 5;

-- 需求: 删除表中id=6的gender字段的值
UPDATE student
SET
    gender = NULL
WHERE
    id = 6;

-- 注意1: delete 需要一次删除整条数据记录, 如果需要删除的为某一个字段的值 依然需要使用update

-- 注意2: 如果想删除所有的数据记录, 可以不写where 或者直接给该where条件一个恒成立的条件即可
DELETE
FROM
    student;

DELETE
FROM
    student
WHERE
    1 = 1;

扩展: 清空表数据的另外一种方法 truncate TRUNCATE TABLE student;

11 .查询

11.1全列查询

select * from [表名];

在这里插入图片描述

在这里插入图片描述

11.2指定查询

  • 注意1: 我们在select 后边写什么, 就查询到什么, 可以将一个字段输出多次, 也可以不使用.
  • 注意2: 无论select 后边的数据内容如何变化, 数据条目数始终不变.
  • 注意3: 无论如何查询, 数据库中的原数据,不会发生任何改变
select id,name from [表名];
//指定个别列,便于查看

-- 2. 我们可以查询指定的数据列
SELECT
    pname,
    price
FROM
    product;

-- 3. 我们可以在整列数据值的基础上进行计算
SELECT
    pname,
    price,
    price * 0.5
FROM
    product;

-- 4. 我们可以在查询时插入常数列
SELECT
    pname,
    price,
    price,
    '黑马甄选',
    10
FROM
    product;

在这里插入图片描述

在这里插入图片描述

12. DQL之条件查询

条件查询的方式:

  • 比较查询
  • 范围查询
  • 模糊查询
  • 非空查询
  • 逻辑查询

条件查询: 将查询出来的结果,根据一定的规则进行过滤, 满足条件则保留,不满足条件则忽略.
– 关键字 : where
– 格式: select 列名1, 列名2… from 表名 where 条件;
– 条件表达式的计算结果为布尔类型数据, 如果数据的值为 false 则不成立,数据忽略,如果值为true 则成立,数据保留

12.1 比较查询

  1. 比较查询
    等号左侧的数据大于等号右侧则返回true 否则返回false
    < 等号左侧的数据小于等号右侧则返回true 否则返回false
    <= 等号左侧的数据小于等于等号右侧则返回true 否则返回false
    = 等号左侧的数据大于等于等号右侧则返回true 否则返回false
    = 等号左右两侧的数据相等则返回true, 否则返回false
    != 或 <> 等号左右两侧的数据不相等则返回true, 否则返回false
    在sql中 0 = false 1 = true
-- 需求1: 获取所有商品中,商品价格大于600 的商品信息
SELECT *
FROM product
WHERE price > 600;

-- 需求2: 获取所有商品中,商品价格小于等于800的商品价格和商品名称
SELECT pname, price FROM product WHERE price <= 800;

-- 需求3: 获取所有商品中商品类别为c001的商品信息
SELECT * FROM product WHERE category_id = 'c001';

-- 需求4: 获取所有商品中商品类别不为c002的商品id 和商品价格
SELECT category_id,pid,price FROM product WHERE category_id != 'c002';
SELECT category_id,pid,price FROM product WHERE category_id <> 'c002';

在这里插入图片描述

12. 2 范围查询

– 2. 范围查询
– 2.1 连续范围查询 : 在连续范围内,任意数值均会使条件成立
– 关键字: between … and …

-- 注意: 该取值范围包含边界值, 8002000 都包含在内
SELECT *
FROM product
WHERE price BETWEEN 800 AND 2000;

-- 在使用between and 时要注意,保证前边的数值小于后边的数值, 否则将没有任何数据被筛选出来
SELECT *
FROM product
WHERE price BETWEEN 2000 AND 800;
-- 为空

-- 2.2 非连续范围查询 : 仅在多个取值中,进行判断,如果等于其中任何一个值,则条件成立
-- 关键字 : in
-- 需求2: 查询所有商品中, 价格为 1  200  800 的商品信息
SELECT *
FROM product
WHERE price IN (1, 200, 800);

在这里插入图片描述

12.3 模糊查询

– 3. 模糊查询
– 就是根据一定的规则筛选符合规则的字符信息, 如果符合规则, 则返回true, 否则返回false
– 格式: select 列名… from 表名 where 字段 like ‘规则’;
– 关键字: like
– 规则: % 代表任意多个任意字符, 可以为0个, _ 代表一个任意字符.

-- 举例: 如果想获取姓张的同学信息, 则需要设置的规则为  张% , 如果想获取两个字的姓张的同学  规则为 张_

-- 需求1: 查询名字以"香"开头的商品全部信息
SELECT * FROM product WHERE pname LIKE '香%';

-- 需求2: 查询名字以香开头, 且名字是3个字符的商品等信息
SELECT * FROM product WHERE pname LIKE '香__';

-- 需求3: 查询所有商品中,商品名称为4个字的商品信息
SELECT * FROM product WHERE pname LIKE '____';

-- 需求4: 查询所有商品中,商品名称中带有'霸'字的商品信息
SELECT * FROM product WHERE pname LIKE '%霸%';

-- 注意: like查询时效率较低, 我们开发中很少用

在这里插入图片描述

12.4 非空查询

– 非空查询
– is null 判断指定字段的值是否为空, 如果为空则返回true 否则返回 false
– is not null 判断指定字段的值是否为空, 如果为空则返回false 否则返回 true

前置知识: null 参与的任何计算, 结果都为null
SELECT 1 + NULL;
SELECT 2 * NULL;
SELECT 3 > NULL;
SELECT 3 != NULL;
SELECT NULL != NULL;

-- 需求1: 获取所有商品中 价格不为空的商品信息
-- SELECT * FROM product WHERE price != NULL;
SELECT *
FROM
    product
WHERE
    price IS NOT NULL;

-- 需求2: 获取所有商品中 价格为空的商品信息
SELECT *
FROM
    product
WHERE
    price IS NULL;

在这里插入图片描述

12. 5 逻辑查询

– 5. 逻辑查询
– 逻辑查询 : 与 或 非的逻辑关系
– 关键字 : and or not

-- 需求1: 获取所有商品中价格大于200且价格小于等于2000的商品信息
SELECT *
FROM
    product
WHERE
      price > 200
  AND price <= 2000;


-- 需求2: 获取所有商品中,价格大于2000或者价格小于200的全部商品
SELECT *
FROM
    product
WHERE
     price > 2000
  OR price < 200;


-- 需求3: 获取商品中价格不等于 2000的全部商品
SELECT *
FROM
    product
WHERE
    NOT price = 2000;

-- 需求4: 获取商品中价格不为空的所有商品信息
SELECT *
FROM
    product
WHERE
    price IS NOT NULL;
SELECT *
FROM
    product
WHERE
    NOT price IS NULL;

13.主键约束

思考: 什么是约束???

约束就是我们存储数据的规则,满足这个规则,就可以存储,不满足这个规则就无法存储

主键约束,就是规定该列数据 ,既不重复,也不为空.

主键的特性:

  1. 主键一般都是无意义的数据.
  2. 主键一般不会自己手动输入,而是借助计算机进行自增
  3. 主键一般为数值型(整数)
  4. 主键不会修改
  5. 每一张表都建议有一个主键, 且只能有一个主键约束字段
    在这里插入图片描述
主键约束:
CREATE TABLE person
(
    id     INT PRIMARY KEY,
    name   VARCHAR(30),
    gender VARCHAR(20)
);
注意事项:
-- 1. 每张表, 建议有, 且仅能有一个主键字段.
-- 报错: Multiple primary key defined
-- 提示我们定义了重复主键, 此时,每张表最多有一个主键.
CREATE TABLE person1
(
    id     INT PRIMARY KEY,
    name   VARCHAR(30) PRIMARY KEY,
    gender VARCHAR(20)
);

-- 2. 主键可以修饰各种数据类型,  不一定时整型,但是官方建议我们使用整数类型数据, 作为主键.
CREATE TABLE person2
(
    id     INT,
    name   VARCHAR(30) PRIMARY KEY,
    gender VARCHAR(20)
);

-- 3. 主键字段中插入的数据值不能为空
-- 4.1 插入一个空值数据, 无法存储
-- 报错: Column 'id' cannot be null
INSERT INTO
    person
VALUES
    (NULL, '小明', '男');

-- 3.2 插入数据时如果主键字段你没有默认值, 则不能不给主键字段赋值
-- Field 'id' doesn't have a default value
INSERT INTO
    person(name, gender)
VALUES
    ('小明', '男');

-- 4. 主键字段中插入不能插入重复的值
-- Duplicate entry '1' for key 'PRIMARY'
INSERT INTO
    person
VALUES
    (1, '小明', '男');
INSERT INTO
    person
VALUES
    (1, '小芳', '女');

-- 5. 创建表后添加主键约束 (了解)
-- 建表后添加主键约束
ALTER TABLE person3 ADD PRIMARY KEY (id);

-- 7. 删除主键约束 (了解)
-- 需求: 删除person2表中的主键约束
ALTER TABLE person2 DROP PRIMARY KEY ;
-- 注意: 删除主键约束后, 非空约束依然存在.

14. auto increment自动增长

自动增长并不是一个约束,而是一个扩展extra**

自动增长的主要作用,就在不传值,或者传值为null 的时候,实现记录的自增赋值工作
自动增长只能修饰键,且只能修饰整型

在这里插入图片描述

-- 1. 创建一个数据表, 给字段增加自动增长约束
CREATE TABLE heros
(
    id    INT PRIMARY KEY AUTO_INCREMENT,
    name  VARCHAR(20),
    skill VARCHAR(30)
);

-- 2. 添加自动增长的字段必须为键(在查询字段详情时, key列有值)
-- 报错: there can be only one auto column and it must be defined as a key
CREATE TABLE heros1
(
    id    INT AUTO_INCREMENT,
    name  VARCHAR(20),
    skill VARCHAR(30)
);

-- 3. 添加自动增长字段的列 必须为整数类型.
-- 报错:Incorrect column specifier for column 'name'
CREATE TABLE hero2
(
    id    INT PRIMARY KEY,
    name  VARCHAR(30) AUTO_INCREMENT,
    skill VARCHAR(30)
);

-- 4. 插入数据时, 给自动增长列插入null将会自动增长
-- 数据从0开始自增
INSERT INTO heros VALUES (null, '梅超风', '九阴白骨爪');

-- 5. 插入数据时, 给自动增长列插入0将会自动增长
INSERT INTO heros VALUES (0, '虚竹', '天山折梅手');

-- 6. 插入数据时, 不给自动增长字段插入数据, 将会默认插入一个自动增长值
INSERT INTO heros(name, skill) VALUES ('乔峰', '降龙十八掌');

-- 7. 如果我插入的数据为指定数值, 则保存相关数据.
INSERT INTO heros VALUES (9, '杨过', '养雕');

-- 8. 再次触发自动增长机制, 则根据哪一个数字进行自增呢?
-- 自动增长机制: 在当前列的最大值基础上自增1 添加到数据列中,  如果表中无任何数据, 则默认从0开始自增.
INSERT INTO heros VALUES (0, '段誉', '升龙拳');
  • 我们向自增字段中添加null, 0 或者不添加数据,都会触发主键自增.
  • 主键自增字段可以插入指定值,但是不能重复
  • 主键自增的计算规则是在当前列最大值的基础上加1
  • 自增只能修饰 整型 键
删除带有自增主键的主键约束
-- 扩展: 有主键自增的数据列, 删除主键约束
-- 删除主键约束后, id列不再是键, 此时自动增长则修饰了一个非键列, 所以不允许修改.
-- 如果想要修改,需要先删除自增扩展, 再删除主键约束
ALTER TABLE heros CHANGE id id INT;

-- 删除主键约束
ALTER TABLE heros DROP PRIMARY KEY ;

15.not null 非空约束

非空约束修饰的字段不能为空

在这里插入图片描述

-- 1. 建表时,添加非空约束
CREATE TABLE students (
    id INT PRIMARY KEY ,
    name VARCHAR(20) NOT NULL ,
    gender VARCHAR(20)
);

-- 3. 非空约束修饰的字段, 不能存在null-- Column 'name' cannot be null
-- INSERT INTO students VALUES (1, null, '男');

-- Field 'name' doesn't have a default value
-- INSERT INTO students(id, gender) VALUES (1, '男');

-- 4. 非空约束的字段, 可以重复
INSERT INTO students VALUES (1, '小强', '男');
INSERT INTO students VALUES (2, '小强', '女');

-- 扩展: 删除非空约束的方法
ALTER TABLE students CHANGE name name VARCHAR(30);

16. default 默认值

– 默认值不是一个约束条件, 不能限制我们插入数据.
– 添加默认值后, 如果我们没有给该数据赋值,则自动使用默认值. 如果没有添加默认值, 则自动赋值为null
– 关键字 : default

-- 1. 在建表时添加默认值
CREATE TABLE student_info
(
    id     INT PRIMARY KEY,
    name   VARCHAR(30) DEFAULT '无名氏',
    gender VARCHAR(20)
);

-- 2. 查看字段详情, 验证默认值添加成功
DESC student_info;

-- 3. 当未给name字段赋值时, 默认使用其默认值进行填充
INSERT INTO
    student_info(id, gender)
VALUES
    (1, '男');

-- 4. 当给name赋值时,将会把用户传入的数据填充到该字段位置.
INSERT INTO
    student_info
VALUES
    (2, '小芳', '女');

-- 5. 填写0 或者 null 等 不会触发默认值.
INSERT INTO
    student_info
VALUES
    (3, NULL, '男');
INSERT INTO
    student_info
VALUES
    (4, 0, '男');

-- 注意: 自动增长本质上就是一个特殊规则的默认值. 

17. unique 唯一约束

唯一约束修饰的字段,不能重复

在这里插入图片描述

-- 唯一约束 UNIQUE 在唯一约束修饰的列中, 不能存放重复值.
-- 0. 使用数据库
USE test_db_utf8;

-- 1. 创建数据表, 添加唯一约束
CREATE TABLE device (
    id INT PRIMARY KEY ,
    price DOUBLE ,
    description VARCHAR(20) UNIQUE
);

-- 2. 查看表的字段详情, 检验唯一约束添加成功
-- 唯一约束的列 也是一个键.
DESC device;

-- 3. 唯一约束不能插入重复的值
INSERT INTO  device VALUES (1, 20.8, '这个机器真便宜');
-- Duplicate entry '这个机器真便宜' for key 'description'
INSERT INTO  device VALUES (2, 6000000.4, '这个机器真便宜');

-- 4. 唯一约束可以插入空值, 且空值不计入重复数据中, 也就是可以有无数个空值.
INSERT INTO device VALUES (3, 12, NULL);
INSERT INTO device(id, price)  VALUES (4, 15);

请添加图片描述

💕💕终有一别,今天我们的分享到这里就结束了,以上的知识点比较多,主要还是需要大家掌握数据库的增删查改,
有问题欢迎大家评论,积极讨论.
我是书生♡,一名学习大数据的IT程序员,有什么问题大家可以私信.

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值