MySQL數據庫
全部SQL源文件鏈接:https://pan.baidu.com/s/1wc51qkVetSRybFzcIYGBIg
提取碼:3wpt
DML語言
- 數據操作語言
- 插入:insert
- 修改:update
- 刪除:delete
插入語句
-
方式一:經典的插入
-
語法:insert into 表名(字段名,…) values(值,…);
-
特點
-
1、要求值的類型和字段的類型要一致或兼容;
-
2、字段的個數和順序不一定與原始表中的字段個數和順序一致但必須保證值和字段一一對應;
-
3、假如表中有可以爲null的字段,注意可以通過以下兩種方式插入null值
-
①字段和值都省略
-
②字段寫上,值使用null
-
-
-
4、字段和值的個數必須一致
-
5、字段名可以省略,默認所有列
-
具體案例:
SELECT * FROM beauty;
#1.插入的值的類型要與列的類型一致或兼容
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐藝昕','女','1990-4-23','1898888888',NULL,2);
#2.不可以爲null的列必須插入值。可以爲null的列如何插入值?
#方法一:
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐藝昕','女','1990-4-23','1898888888',NULL,2);
#方法二:
INSERT INTO beauty(id,NAME,sex,phone)
VALUES(15,'娜扎','女','1388888888');
#3.列的順序是否可以調換
INSERT INTO beauty(NAME,sex,id,phone)
VALUES('蔣欣','女',16,'110');
#4.列數和值的個數必須一致
INSERT INTO beauty(NAME,sex,id,phone)
VALUES('關曉彤','女',17,'110');
#5.可以省略列名,默認所有列,而且列的順序和表中列的順序一致
INSERT INTO beauty
VALUES(18,'張飛','男',NULL,'119',NULL,NULL);
-
方式二語法:insert into 表名 set 列名=值,列名=值,…
-
INSERT INTO beauty SET id=19,NAME=‘劉濤’,phone=‘999’;
-
兩種方式的區別
1.方式一支持一次插入多行,語法如下:
insert into 表名【(字段名,..)】 values(值,..),(值,...),...;
2.方式一支持子查詢,語法如下:
insert into 表名 查詢語句;
#1、方式一支持插入多行,方式二不支持
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);
#2、方式一支持子查詢,方式二不支持
INSERT INTO beauty(id,NAME,phone) SELECT 26,'宋茜','11809866';
INSERT INTO beauty(id,NAME,phone)
SELECT id,boyname,'1234567' FROM boys WHERE id<3;
修改語句
- 修改單表的記錄★
- 語法:update 表名 set 列=新值,列=新值,… where 篩選條件;
- 案例
#1.修改單表的記錄
#案例1:修改beauty表中姓唐的女神的電話爲13899888899
UPDATE beauty SET phone = '13899888899'
WHERE NAME LIKE '唐%';
#案例2:修改boys表中id好爲2的名稱爲張飛,魅力值 10
UPDATE boys SET boyname='張飛',usercp=10
WHERE id=2;
- 修改多表的記錄【補充】
- sql92語法:update 表1 別名,表2 別名 set 列=值,… where 連接條件 and 篩選條件;
- sql99語法:update 表1 別名 inner|left|right join 表2 別名 on 連接條件 set 列=值,… where 篩選條件;
- 案例
#2.修改多表的記錄
#案例 1:修改張無忌的女朋友的手機號爲114
UPDATE boys bo
INNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='119',bo.`userCP`=1000
WHERE bo.`boyName`='張無忌';
#案例2:修改沒有男朋友的女神的男朋友編號都爲2號
UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`boyfriend_id`=2 WHERE bo.`id` IS NULL;
刪除語句
- 方式一:delete
- 語法
1、單表的刪除【★】
delete from 表名 where 篩選條件
2、多表的刪除【補充】
sql92語法:
delete 表1的別名,表2的別名
from 表1 別名,表2 別名
where 連接條件
and 篩選條件;
sql99語法:
delete 表1的別名,表2的別名
from 表1 別名
inner|left|right join 表2 別名 on 連接條件
where 篩選條件;
- 案例
#1.單表的刪除
#案例:刪除手機號以9結尾的女神信息
DELETE FROM beauty WHERE phone LIKE '%9';
SELECT * FROM beauty;
#2.多表的刪除
#案例:刪除張無忌的女朋友的信息
DELETE b
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='張無忌';
#案例:刪除黃曉明的信息以及他女朋友的信息
DELETE b,bo
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id`=bo.`id`
WHERE bo.`boyName`='黃曉明';
- 方式二:truncate
語法:truncate table 表名;
#案例:將魅力值>100的男神信息刪除
TRUNCATE TABLE boys ;
- 兩種方式的區別【面試題】★
1.delete 可以加where 條件,truncate不能加
2.truncate刪除,效率高一點
3.假如要刪除的表中有自增長列,
如果用delete刪除後,再插入數據,自增長列的值從斷點開始,而truncate刪除後,再插入數據,自增長列的值從1開始。
4.truncate刪除沒有返回值,delete刪除有返回值
5.truncate刪除不能回滾,delete刪除可以回滾.
DDL語言
庫的管理
-
創建庫
create database 【if not exists】 庫名【 character set 字符集名】; #案例:創建庫Books CREATE DATABASE IF NOT EXISTS books ;
-
修改庫
alter database 庫名 character set 字符集名; #案例:更改庫的字符集 ALTER DATABASE books CHARACTER SET gbk;
-
刪除庫
drop database 【if exists】 庫名; #案例:庫的刪除 DROP DATABASE IF EXISTS books;
表的管理
-
表的創建 ★
/* 語法: create table 表名( 列名 列的類型【(長度) 約束】, 列名 列的類型【(長度) 約束】, 列名 列的類型【(長度) 約束】, ... 列名 列的類型【(長度) 約束】 ) */ #案例:創建表Book CREATE TABLE book ( id INT, #編號 bName VARCHAR (20), #圖書名 price DOUBLE, #價格 authorId INT, #作者編號 publishDate DATETIME#出版日期 ) ; DESC book; #案例:創建表author CREATE TABLE IF NOT EXISTS author ( id INT, au_n`author`ame VARCHAR (20), nation VARCHAR (10) ); DESC author ;
-
表的修改
1.添加列 alter table 表名 add column 列名 類型 【first|after 字段名】; 2.修改列的類型或約束 alter table 表名 modify column 列名 新類型 【新約束】; 3.修改列名 alter table 表名 change column 舊列名 新列名 類型; 4 .刪除列 alter table 表名 drop column 列名; 5.修改表名 alter table 表名 rename 【to】 新表名; 案例: #①修改列名 ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME ; #②修改列的類型或約束 ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP; #③添加新列 ALTER TABLE author ADD COLUMN annual DOUBLE; #④刪除列 ALTER TABLE book_author DROP COLUMN annual; #⑤修改表名 ALTER TABLE book_author RENAME TO author; DESC book;
-
表的刪除
drop table【if exists】 表名; 案例: DROP TABLE IF EXISTS book_author; SHOW TABLES; #通用的寫法: DROP DATABASE IF EXISTS 舊庫名; CREATE DATABASE 新庫名 ; DROP TABLE IF EXISTS 舊錶名; CREATE TABLE 表名();
-
複製表
1、複製表的結構 create table 表名 like 舊錶; 2、複製表的結構+數據 create table 表名 select 查詢列表 from 舊錶【where 篩選】; 案例 INSERT INTO author VALUES (1,'村上春樹','日本'), (2,'莫言','中國'), (3,'馮唐','中國'), (4,'金庸','中國'); SELECT * FROM Author; SELECT * FROM copy2; #1.僅僅複製表的結構 CREATE TABLE copy LIKE author; #2.複製表的結構+數據 CREATE TABLE copy2 SELECT * FROM author; #只複製部分數據 CREATE TABLE copy3 SELECT id,au_name FROM author WHERE nation='中國'; #僅僅複製某些字段 CREATE TABLE copy4 SELECT id,au_name FROM author WHERE 0;
數據類型
數值型
整型
-
分類:
tinyint、smallint、mediumint、int/integer、bigint 1 2 3 4 8
-
特點:
- ① 如果不設置無符號還是有符號,默認是有符號,如果想設置無符號,需要添加unsigned關鍵字
- ② 如果插入的數值超出了整型的範圍,會報out of range異常,並且插入臨界值
- ③ 如果不設置長度,會有默認的長度
長度代表了顯示的最大寬度,如果不夠會用0在左邊填充,但必須搭配zerofill使用!
-
案例
#1.如何設置無符號和有符號
DROP TABLE IF EXISTS tab_int ;
CREATE TABLE tab_int (t1 INT (7) ZEROFILL, t2 INT (7) ZEROFILL) ;
DESC tab_int ;
INSERT INTO tab_int VALUES (- 123456) ;
INSERT INTO tab_int VALUES (- 123456, - 123456) ;
INSERT INTO tab_int VALUES (2147483648, 4294967296) ;
INSERT INTO tab_int VALUES (123, 123) ;
SELECT * FROM tab_int ;
浮點型
-
定點數:dec(M,D);decimal(M,D)
-
浮點數:float(M,D) 4;double(M,D) 8
-
特點:
- ①M代表整數部位+小數部位的個數,D代表小數部位
- ②如果超出範圍,則報out or range異常,並且插入臨界值
- ③M和D都可以省略,但對於定點數,M默認爲10,D默認爲0
- ④如果精度要求較高,則優先考慮使用定點數
-
案例
#測試M和D
DROP TABLE tab_float ;
CREATE TABLE tab_float (f1 FLOAT, f2 DOUBLE, f3 DECIMAL) ;
SELECT * FROM tab_float ;
DESC tab_float ;
INSERT INTO tab_float VALUES(123.4523,123.4523,123.4523);
INSERT INTO tab_float VALUES(123.456,123.456,123.456);
INSERT INTO tab_float VALUES(123.4,123.4,123.4);
INSERT INTO tab_float VALUES(1523.4,1523.4,1523.4);
#原則:
#所選擇的類型越簡單越好,能保存數值的類型越小越好
字符型
-
較短的文本:char、varchar
-
其他:
- binary和varbinary用於保存較短的二進制
- enum用於保存枚舉
- set用於保存集合
-
較長的文本:text、blob(較大的二進制)
-
特點
寫法 M的意思 特點 空間的耗費 效率 char char(M) 最大的字符數,可以省略,默認爲1 固定長度的字符 比較耗費 高 varchar varchar(M) 最大的字符數,不可以省略 可變長度的字符 比較節省 低
-
案例
CREATE TABLE tab_char(
c1 ENUM('a','b','c')
);
INSERT INTO tab_char VALUES('a');
INSERT INTO tab_char VALUES('b');
INSERT INTO tab_char VALUES('c');
INSERT INTO tab_char VALUES('m');
INSERT INTO tab_char VALUES('A');
SELECT * FROM tab_set;
CREATE TABLE tab_set(
s1 SET('a','b','c','d')
);
INSERT INTO tab_set VALUES('a');
INSERT INTO tab_set VALUES('A,B');
INSERT INTO tab_set VALUES('a,c,d');
日期型
-
分類:
- date只保存日期;
- time 只保存時間;
- year只保存年;
- datetime保存日期+時間;
- timestamp保存日期+時間;
-
特點
字節 範圍 時區等的影響 datetime 8 1000——9999 不受 timestamp 4 1970-2038 受
-
案例
CREATE TABLE tab_date(
t1 DATETIME,
t2 TIMESTAMP
);
INSERT INTO tab_date VALUES(NOW(),NOW());
SELECT * FROM tab_date;
SHOW VARIABLES LIKE 'time_zone';
SET time_zone='+9:00';