在整理完數據查詢語言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;