在整理完数据查询语言DQL后,接着整理DML与DDL语言。相对于数据查询语言(很重要,内容也很多),数据操纵语言与数据定义语言内容相对较少,本文就放在一篇文章进行整理。
文章目录
一、数据操纵语言DML
DML语言主要有三种形式:插入:insert,修改:update,删除:delete。下面依次用案例的形式进行介绍。
1. 插入语句
实现插入记录的两种方式:
方式一:insert into 表名(列名,...) values(值1,...);
方式二:insert into 表名 set 列名 = 值,列名 = 值,...
案例1:向女神表中插入一条记录
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);
说明:
- 插入的值的类型要与列的类型一致或兼容
- 不可以为null的列必须插入值,可以为null的列插入空值1)可以插入null;2)可以不写该列字段
- 列的顺序可以调换
- 列数和值的个数必须一致
案例2:向女神表中插入一条包含所有字段的记录
INSERT INTO beauty
VALUES(18,'刘诗诗','女',NULL,'15856498715',NULL,NULL);
案例3:向女神表中插入一条记录,其中姓名为刘涛,id为19,phone为999
INSERT INTO beauty
SET id=19,NAME='刘涛',phone='999'; #该种方式插入id值不能重复
两种插入方式大PK
- 方式一支持插入多行,方式二不支持
INSERT INTO beauty
VALUES(23,'唐艺昕1','女','1990-4-23','1898888888',NULL,2)
,(24,'唐艺昕2','女','1990-4-23','1898888888',NULL,2)
,(25,'唐艺昕3','女','1990-4-23','1898888888',NULL,2);
- 方式一支持子查询,方式二不支持
#例1
INSERT INTO beauty(id,NAME,phone)
SELECT 26,'宋茜','11809866';
#例2
INSERT INTO beauty(id,NAME,phone)
SELECT id,boyname,'1234567'
FROM boys WHERE id<3;
- 大多用第一种方式
2. 修改语句
修改语句涉及到单表修改与多表修改,其中单表修改为重点。
(1)修改单表记录
update 表名
set 列 = 新值,列 = 新值,...
where 筛选条件;
(2)修改多表记录
#sql92语法:
update 表1 别名,表2 别名
set 列=值,…
where 连接条件
and 筛选条件;
#sql99语法:
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值,…
where 筛选条件;
案例1(修改单表记录):修改beauty表中姓唐的女神的电话为13899888899
UPDATE beauty SET phone = '13899888899'
WHERE NAME LIKE '唐%';
案例2(修改多表记录):修改张无忌的女朋友的手机号为114
UPDATE boys bo
INNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='114'
WHERE bo.`boyName`='张无忌';
案例3(修改多表记录):修改没有男朋友的女神的男朋友编号都为2号
UPDATE beauty b
LEFT JOIN boys bo
ON b.`boyfriend_id` = bo.`id`
SET b.`boyfriend_id` = '2'
WHERE bo.`id` IS NULL;
3. 删除语句
方式一:delete方式删除
- 单表删除(★)
delete from 表名 where 筛选条件
- 多表删除
sql92语法:delete 表1的别名, 表2的别名 from 表1 别名, 表2 别名 where 连接条件 and 筛选条件
sql99语法:delete 表1的别名, 表2的别名 from 表1 别名 inner|left|right join 表2 别名 on 连接条件 where 筛选条件;
方式二:truncate方式删除
语法:truncate table 表名;
案例1(单表删除):删除手机号以9结尾的女神信息
DELETE FROM beauty WHERE phone LIKE '%9';
案例2(多表删除,sql99语法):删除张无忌的女朋友的信息
DELETE b
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='张无忌';
案例3(多表删除,sql99语法):删除黄晓明的信息以及他女朋友的信息
DELETE b,bo
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id`= bo.`id`
WHERE bo.`boyName`='黄晓明';
案例4(truncate删除):删除boys表的信息
TRUNCATE TABLE boys ;
注意:TRUNCATE删除方式直接将整个表清空
delete PK truncate 【面试题 ★】
-
delete 可以加where 条件,truncate不能加
-
truncate删除,效率高一丢丢
-
假如要删除的表中有自增长列(*)
如果用delete删除后,再插入数据,自增长列的值从断点开始,
而truncate删除后,再插入数据,自增长列的值从1开始 -
truncate删除没有返回值,delete删除有返回值(*)
-
truncate删除不能回滚,delete删除可以回滚(*)
二、数据定义语言DDL
数据定义语言 (Data Definition Language, DDL) 是SQL语言集中负责数据结构定义与数据库对象定义的语言,主要包括库和表的管理,包括库和表的创建(create)、修改(alter)和删除(drop)。
(一)库的管理
1. 库的创建
语法:create database [if not exists] 库名;
案例:创建库Books
CREATE DATABASE IF NOT EXISTS books ;
2. 库的修改
库的修改操作主要为修改数据库的名称和字符集
(1)修改库的名称
-
RENAME DATABASE books TO 新库名;(5.1之前的版本可用,现在已经不能使用了,不安全,会导致数据丢失)
-
现在的修改方法:修改数据库的对应文件夹的名字,然后重启数据库服务
(2)修改库的字符集
将数据库的字符集更改为GBK
ALTER DATABASE books CHARACTER SET gbk;
3. 库的删除
案例:删除库Books
DROP DATABASE IF EXISTS books;
(二)表的管理
1. 表的创建
语法:
create table [if not exists] 表名(
列名 列的类型【(长度) 约束】,
列名 列的类型【(长度) 约束】,
列名 列的类型【(长度) 约束】,
...
列名 列的类型【(长度) 约束】
);
案例:创建表Book
CREATE TABLE book(
id INT,#编号
bName VARCHAR(20),#图书名
price DOUBLE,#价格
authorId INT,#作者编号
publishDate DATETIME#出版日期
);
DESC book;
2. 表的修改【★】
语法:alter table 表名 add | drop | modify | change column 列名 【列类型 约束】;
#(1)修改列名,*必须加上列的类型*
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;
#(2)修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;
#(3)添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE;
#说明:添加新列时可以指定添加新列的位置,如 first/ after 字段名
ALTER TABLE author ADD COLUMN pubPlace VARCHAR(20) FIRST; #建在第一个字段
ALTER TABLE author ADD COLUMN pubPlace2 VARCHAR(20) AFTER pubPalce; #建在pubPlace后
#(4)删除列
ALTER TABLE book_author DROP COLUMN annual;
#(5)修改表名
ALTER TABLE author RENAME TO book_author;
3. 表的删除
语法:drop table if exists 表名;
案例:删除book_author表
DROP TABLE IF EXISTS book_author;
库和表创建删除的通用写法:
DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;
DROP TABLE IF EXISTS 旧表名;
CREATE TABLE 新表名;
4. 表的复制
(1)仅仅复制表的结构
CREATE TABLE copy LIKE author;
(2)复制表的结构+数据
CREATE TABLE copy2
SELECT * FROM author;
(3)只复制部分列的部分数据
CREATE TABLE copy3
SELECT id, au_name
FROM author
WHERE nation='中国';
(4)只复制部分列的字段,不复制数据(划重点)
#添加一个永远不满足条件的筛选条件
#方式 1
CREATE TABLE copy4
SELECT id,au_name
FROM author
WHERE 1 = 2;
#方式 2
CREATE TABLE copy4
SELECT id,au_name
FROM author
WHERE 0;