MySQL(五)----基础四

本文详细介绍了 SQL 的数据操作语言 DML,包括插入、更新和删除语句的使用方法。讲解了如何向表中插入数据,如何修改特定记录的值,以及如何删除表中的记录。同时,提到了不同操作的特点和注意事项,如插入时的数据类型匹配、更新时的筛选条件以及删除时的差异。此外,还涵盖了数据库定义语言 DDL 中的库和表管理,如创建、修改和删除库及表的操作。最后,讨论了各种数据类型和约束的概念,强调了它们在确保数据准确性和可靠性中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

10.DML语言

数据操作语言:

插入:insert

修改:update

删除:delete

10.1.插入语句

语法:

方式1:
    insert into 表名 
    (列名 ,列名...)
    values(值1 , 值2....)
方式2:
    insert into 表名
    set 列名 = 值 , 列名 = 值 ...
    
    
INSERT INTO  beauty
(id , name , sex , boyfriend_id , phone)
VALUES(14 , "zzz" , '女'  , 11 , 18852906999),
(15 , "ccc" , '女'  , 11 , 18852909989);

*两种方法的比较

方式一:
支持插入多行
    insert into boys
    values(5 , "xxx" , "222"),
    (6 , 'zzz' , 1000);
支持子查询
​
所以大多数使用第一种

特点:

#1.插入的值得类型要与列的类型一致或兼容
​
​
#2.设置不为null的列必须有值 , 可以为null值的插入的方法
不写这个属性 , 或者是置为null
#3.列名要和属性一一对应
#4.列数和值必须一致
#5.可以省略列名 , 默认所有列 , 而且顺序和表中的顺序是完全一致的

10.2.修改语句

修改单表的记录

update  表名
set  列 = 值 , 列 = 值 , ...
where 筛选条件;
​
​
案例1:
修改beauty表中zzz的电话号码该成138888888

UPDATE beauty 
SET phone = '138888888'
WHERE `name` = 'zzz';

修改多表的记录

sql92
    upadate table1 别名 , table2 别名
    set.........
    where  连接条件
    and   筛选条件
    
sql99
    updata table1  别名
    inner|left|right  join 表2  别名
    set..........
​
案例:

-- 修改张无忌的女朋友的手机号
    UPDATE
    boys 
    LEFT JOIN beauty 
    ON boys.id = beauty.boyfriend_id
    SET phone = '110110101'
    WHERE boys.boyName = '张无忌';
​
-- 修改没有男朋友的女神的男朋友编号都为2
    UPDATE 
    beauty 
    LEFT JOIN boys 
    ON beauty.boyfriend_id = boys.id
​
    SET boyfriend_id = 2
    WHERE boys.id IS NULL;

10.3.删除

单表的删除

delete from table1 where 筛选条件
​
DELETE FROM beauty
WHERE name in('xxx' , 'zzz' , 'ccc'); 
​
#删除表里的内容
truncate table 表名;
​
​
delete和truncate的区别
1.delete可以添加where条件 , truncate不可以
2.truncate在删除表的所有内容的时候会比使用delete删除的效率高一点
3.假如表中有自增长列,那么使用delete删除的会从自增长的断点删除,而truncate会从1开始
4.truncate删除的不支持回滚 , delete支持
5.delete删除的具有返回值 , 而truncate没有
​

 

多表的删除

11.DDL(数据库定义语言)

库和表的管理

  1. 库的管理

    创建 , 修改 , 删除

  2. 表的管理

    创建,修改,删除

    创建:create

    修改:alter

    删除:drop

11.1.库的管理

  1. 库的创建:

    语法:create datebase if not exists 库名

  2. 库的修改

    • 尽量不要去修改库名 , 不安全

    • 修改库的字符集:ALTER DATEBASE 库名 CHARACTER SET 字符集

  3. 库的删除:DROP DATEBASE IF EXISTS 库名

11.2.表的管理

表的创建

-- CREATE  TABLE  表名 (    
-- 列名  列的类型    【长度    约束】,    
-- 列名  列的类型    【长度    约束】,    
-- 列名  列的类型    【长度    约束】,    
-- 列名  列的类型    【长度    约束】   
-- ...);
​
​
-- 创建books表
CREATE TABLE if NOT EXISTS  books(
    id INT ,
    bName VARCHAR(20),
    author INT ,
    publishDate VARCHAR(10)
​
);
DESC books;
-- 创建author表
CREATE TABLE if NOT EXISTS author(
​
    id INT,
    auName VARCHAR(20),
    nation VARCHAR(10)
);
​
DESC author;

表的修改

列名的修改:ALTER TABLE 表名 CHANGE COLUMN 列名 新列明 类型(修改列名的同时可以修改列的类型)

列的类型修改:ALTER TABLE 表名 MODIFY COLUMN 列名 类型

-- 列名的修改
ALTER TABLE books CHANGE COLUMN author authorId VARCHAR(20);
​
​
-- 修改列的类型或者是约束
​
ALTER TABLE books MODIFY publishDate TIMESTAMP;
​
​
-- 添加新列
​
ALTER TABLE books ADD COLUMN type VARCHAR(20);
​
-- 删除列
​
ALTER TABLE books DROP COLUMN type;
​
-- 修改表名
ALTER TABLE books RENAME TO book_list;

表的删除

DROP TABLE IF EXISTS 表名

表的复制

-- 复制表的结构
CREATE TABLE if not EXISTS copy1 LIKE  author;
​
​
​
​
-- 复制表的结构和内容
​
-- 复制表的时候,也可以复制部分结构
​
CREATE TABLE IF NOT EXISTS copy2 
SELECT * FROM author;
​
​
-- 复制表的部分字段,但不复制内容 , 只要设置条件永远不满足,就保证所有的数据不满足
CREATE TABLE IF NOT EXISTS copy2 
SELECT id , nation 
FROM author
where 1 = 2;

11.3.类型

11.3.1.整型

11.3.2.浮点型和定点类型

1.浮点型

float(M ,D)

double(M,D)

2.定点型

dec(M,D)

decimal(M,D)

3.特点

  1. D:小数点后的位数

    M:整数 + 小数点的位数

    如果超过M的范围 , 插入临界值

  2. M和D都可以省略

    如果是decimal,那么M默认是10 , D默认是0

    如果是float或double,会随着插入的数值精度决定

  3. 定点型的精度高,要求精度高的选择定点型

11.3.3.字符型

  1. 较短的文本:char , varchar

  2. 较长的文本:text , blob(较大的二进制)

 

char和varchar的比较

写法 M的意思 特点 空间耗费 效率

char char(M) 最大字符数(可以省略默认为1) 固定长度的字符 比较耗费 高

varchar varchar(M) 最大字符数 (不可以省略) 可变长度的字符 比较节省 低

Enum类型:枚举类型 , 只能从枚举的数中,选择一个

set类型:set类型一次可以设置多个

 

11.3.4.日期类型

 

11.4.常见的约束

一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性

 

分类(六大约束):

  1. NOT NULL:非空 , 用于保证该字段不能为空 ,如姓名,学号等

  2. DEFAULT:默认,用于保障该字段具有默认值 ,如性别

  3. PRIMARY KEY:主键,保证该字段的唯一性 ,并且非空 ,如id ,至多只能有一个主键

  4. UNIQUE:唯一,保证该字段的唯一性,可以为空,但是只能有一个为空的 , 可以有多个设置为unique

  5. CHECK:检查约束,【mysql中不支持】

  6. FOREIGN KEY:外检 , 用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值

 

添加约束的时机

  1. 创建表时

  2. 修改表时

 

 

约束的添加分类

  1. 列级约束

    外键约束没有效果

  2. 表级约束

    除了非空,默认,其他都支持

    【constraint 约束名】 约束类型(字段名),如果没有设置约束名的话,约束名时该字段

  3. 修改表时添加约束

    列级约束:alter table 表明 modify column 字段 类型 约束条件

    表级约束:alter table 表名 add 【contraint 约束名】 字段 约束条件 【外键引用】

CREATE TABLE if not EXISTS major(
    id INT PRIMARY KEY,
    marName VARCHAR(20)
);
​
DROP TABLE stuinfo;
CREATE TABLE if NOT EXISTS stuinfo(
    id INT PRIMARY KEY,
    stuName VARCHAR(20) NOT NULL,
    -- CHECK在MySQL中没用,但是在其他的数据库里面可以使用   
    gender char(1) CHECK (gender = '男' OR gender = '女'),
    age INT DEFAULT(18),
    seat INT UNIQUE,
    majorId INT ,
    -- 外键应该添加在表级约束条件里面  
    CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorId)  REFERENCES major(id)
);

 

外键

  1. 要求在从表设置外键关系

  2. 从表的外键列类型要和主表的关联列的类型要求一致或者是兼容

  3. 主表的关联列必须是一个key(主键或者是唯一)

  4. 插入数据的时候,应该想插入主表,然后插入从表

  5. 删除表的时候,应该先删除从表,然后删除主表

 

修改表时添加约束条件

DROP TABLE stuinfo;
CREATE TABLE if NOT EXISTS stuinfo(
    id INT,
    stuName VARCHAR(20) ,
    -- CHECK在MySQL中没用,但是在其他的数据库里面可以使用   
    gender char(1) ,
    age INT ,
    seat INT ,
    majorId INT 
​
);
-- 设置主键
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
​
-- 设置NOT NULL
​
ALTER TABLE stuinfo MODIFY COLUMN stuName VARCHAR(20)  NOT NULL;
​
-- 设置check
​
ALTER TABLE stuinfo MODIFY COLUMN gender char(1) CHECK(gerder = "男" OR gender = "女");
​
-- 设置默认值
​
ALTER TABLE stuinfo  MODIFY COLUMN age int DEFAULT(18);
​
-- 设置unique
ALTER TABLE stuinfo MODIFY COLUMN seat INT unique;
​
-- 设置外键,应该是为表添加
​
ALTER TABLE stuinfo ADD FOREIGN KEY (majorId) REFERENCES major(id);
DESC stuinfo
SHOW INDEX FROM stuinfo

修改表时删除约束

 

 

-- 取消非空
ALTER TABLE stuinfo MODIFY COLUMN stuName VARCHAR(20)   NULL;
-- 删除默认
ALTER TABLE stuinfo  MODIFY COLUMN age int ;
​
-- 删除主键
ALTER TABLE stuinfo  DROP PRIMARY KEY;
​
-- 删除唯一
ALTER TABLE stuinfo  DROP INDEX seat ;
​
-- 删除外键 , 只要删除设置外键的时候取的别名 , 或者是默认的名
​
​
ALTER TABLE stuinfo  DROP FOREIGN KEY majorId;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值