前言:
💞💞大家好,书生♡,今天主要和大家分享一下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表的字段操作
数据字段的操作,是对于指定表的数据字段的操作,字段是依托于数据表存在的,不能单独存在.
表的字段操作如下:
- 在数据表中新增一个字段
– 格式: alter table 表名 add 字段名称 字段类型 [约束];
– 需求: 在students 表中增加height字段
ALTER TABLE students ADD height DOUBLE;
- 在数据表中修改一个字段
– 格式: 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 就可以存储空值
- 在数据表中删除一个字段
– 记住,所有DDL语言中的删除操作都使用drop 所有DML语言中的删除都是用delete
– 需求: 删除gender字段
ALTER TABLE students DROP gender;
- 修改表名
– 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 比较查询
- 比较查询
等号左侧的数据大于等号右侧则返回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 …
-- 注意: 该取值范围包含边界值, 800 和 2000 都包含在内
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.主键约束
思考: 什么是约束???
约束就是我们存储数据的规则,满足这个规则,就可以存储,不满足这个规则就无法存储
主键约束,就是规定该列数据 ,既不重复,也不为空.
主键的特性:
- 主键一般都是无意义的数据.
- 主键一般不会自己手动输入,而是借助计算机进行自增
- 主键一般为数值型(整数)
- 主键不会修改
- 每一张表都建议有一个主键, 且只能有一个主键约束字段
主键约束:
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程序员,有什么问题大家可以私信.