Mysql入門知識點總結
1.Windows服務
-- 啓動MySQL
net start mysql
-- 創建Windows服務
sc create mysql binPath= mysqld_bin_path(注意:等號與值之間有空格)
2.連接於斷開服務
mysql -h 地址 -P 端口 -u 用戶名 -p 密碼
SHOW PROCESSLIST
SHOW VARIABLES
3.數據庫操作
SELECT DATABASE();
SELECT now(), user(), version();
CREATE DATABASE[ IF NOT EXISTS] 數據庫名 數據庫選項
數據庫選項:
CHARACTER SET charset_name
COLLATE collation_name
SHOW DATABASES[ LIKE 'PATTERN']
SHOW CREATE DATABASE 數據庫名
ALTER DATABASE 庫名 選項信息
DROP DATABASE[ IF EXISTS] 數據庫名
同時刪除該數據庫相關的目錄及其目錄內容
4.操作表
CREATE [TEMPORARY] TABLE[ IF NOT EXISTS] [庫名.]表名 ( 表的結構定義 )[ 表選項]
每個字段必須有數據類型
最後一個字段後不能有逗號
TEMPORARY 臨時表,會話結束時表自動消失
對於字段的定義:
字段名 數據類型 [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']
CHARSET = charset_name
如果表沒有設定,則使用數據庫字符集
ENGINE = engine_name
表在管理數據時採用的不同的數據結構,結構不同會導致處理方式、提供的特性操作等不同
常見的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive
不同的引擎在保存表的結構和數據時採用不同的方式
MyISAM表文件含義:.frm表定義,.MYD表數據,.MYI表索引
InnoDB表文件含義:.frm表定義,表空間數據和日誌文件
SHOW ENGINES
SHOW ENGINE 引擎名 {LOGS|STATUS}
AUTO_INCREMENT = 行數
DATA DIRECTORY = '目錄'
INDEX DIRECTORY = '目錄'
COMMENT = 'string'
PARTITION BY ... (詳細見手冊)
SHOW TABLES[ LIKE 'pattern']
SHOW TABLES FROM 表名
SHOW CREATE TABLE 表名 (信息更詳細)
DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE 'PATTERN']
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
ALTER TABLE 表名 表的選項
eg: ALTER TABLE 表名 ENGINE=MYISAM;
RENAME TABLE 原表名 TO 新表名
RENAME TABLE 原表名 TO 庫名.表名 (可將表移動到另一個數據庫)
ALTER TABLE 表名 操作名
ADD[ COLUMN] 字段定義
AFTER 字段名
FIRST
ADD PRIMARY KEY(字段名)
ADD UNIQUE [索引名] (字段名)
ADD INDEX [索引名] (字段名)
DROP[ COLUMN] 字段名
MODIFY[ COLUMN] 字段名 字段屬性
CHANGE[ COLUMN] 原字段名 新字段名 字段屬性
DROP PRIMARY KEY
DROP INDEX 索引名
DROP FOREIGN KEY 外鍵
DROP TABLE[ IF EXISTS] 表名 ...
TRUNCATE [TABLE] 表名
CREATE TABLE 表名 LIKE 要複製的表名
CREATE TABLE 表名 [AS] SELECT * FROM 要複製的表名
CHECK TABLE tbl_name [, tbl_name] ... [option] ...
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
5.數據操作
INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...]
REPLACE 與 INSERT 完全一樣,可互換。
INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, ...]
SELECT 字段列表 FROM 表名[ 其他子句]
DELETE FROM 表名[ 刪除條件子句]
沒有條件子句,則會刪除全部
UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新條件]
6.字符集編碼
SHOW VARIABLES LIKE 'character_set_%'
character_set_client 客戶端向服務器發送數據時使用的編碼
character_set_results 服務器端將結果返回給客戶端所使用的編碼
character_set_connection 連接層編碼
SET 變量名 = 變量值
SET character_set_client = gbk;
SET character_set_results = gbk;
SET character_set_connection = gbk;
SET NAMES GBK;
校對集用以排序
SHOW CHARACTER SET [LIKE 'pattern']/SHOW CHARSET [LIKE 'pattern'] 查看所有字符集
SHOW COLLATION [LIKE 'pattern'] 查看所有校對集
CHARSET 字符集編碼 設置字符集編碼
COLLATE 校對集編碼 設置校對集編碼
7.數據類型
1. 數值類型
類型 字節 範圍(有符號位)
tinyint 1字節 -128 ~ 127 無符號位:0 ~ 255
smallint 2字節 -32768 ~ 32767
mediumint 3字節 -8388608 ~ 8388607
int 4字節
bigint 8字節
int(M) M表示總位數
- 默認存在符號位,unsigned 屬性修改
- 顯示寬度,如果某個數不夠定義字段時設置的位數,則前面以0補填,zerofill 屬性修改
例:int(5) 插入一個數'123',補填後爲'00123'
- 在滿足要求的情況下,越小越好。
- 1表示bool值真,0表示bool值假。MySQL沒有布爾類型,通過整型0和1表示。常用tinyint(1)表示布爾型。
類型 字節 範圍
float(單精度) 4字節
double(雙精度) 8字節
浮點型既支持符號位 unsigned 屬性,也支持顯示寬度 zerofill 屬性。
不同於整型,前後均會補填0.
定義浮點型時,需指定總位數和小數位數。
float(M, D) double(M, D)
M表示總位數,D表示小數位數。
M和D的大小會決定浮點數的範圍。不同於整型的固定範圍。
M既表示總位數(不包括小數點和正負號),也表示顯示寬度(所有顯示符號均包括)。
支持科學計數法表示。
浮點數表示近似值。
decimal
decimal(M, D) M也表示總位數,D表示小數位數。
保存一個精確的數值,不會發生數據的改變,不同於浮點數的四捨五入。
將浮點數轉換爲字符串來保存,每9位數字保存爲4個字節。
2. 字符串類型
char 定長字符串,速度快,但浪費空間
varchar 變長字符串,速度慢,但節省空間
M表示能存儲的最大長度,此長度是字符數,非字節數。
不同的編碼,所佔用的空間不同。
char,最多255個字符,與編碼無關。
varchar,最多65535字符,與編碼有關。
一條有效記錄最大不能超過65535個字節。
utf8 最大爲21844個字符,gbk 最大爲32766個字符,latin1 最大爲65532個字符
varchar 是變長的,需要利用存儲空間保存 varchar 的長度,如果數據小於255個字節,則採用一個字節來保存長度,反之需要兩個字節來保存。
varchar 的最大有效長度由最大行大小和使用的字符集確定。
最大有效長度是65532字節,因爲在varchar存字符串時,第一個字節是空的,不存在任何數據,然後還需兩個字節來存放字符串的長度,所以有效長度是64432-1-2=65532字節。
例:若一個表定義爲 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 問N的最大值是多少?答:(65535-1-2-4-30*3)/3
blob 二進制字符串(字節字符串)
tinyblob, blob, mediumblob, longblob
text 非二進制字符串(字符字符串)
tinytext, text, mediumtext, longtext
text 在定義時,不需要定義長度,也不會計算總長度。
text 類型在定義時,不可給default值
類似於char和varchar,用於保存二進制字符串,也就是保存字節字符串而非字符字符串。
char, varchar, text 對應 binary, varbinary, blob.
3. 日期時間類型
一般用整型保存時間戳,因爲PHP可以很方便的將時間戳進行格式化。
datetime 8字節 日期及時間 1000-01-01 00:00:00 到 9999-12-31 23:59:59
date 3字節 日期 1000-01-01 到 9999-12-31
timestamp 4字節 時間戳 19700101000000 到 2038-01-19 03:14:07
time 3字節 時間 -838:59:59 到 838:59:59
year 1字節 年份 1901 - 2155
datetime YYYY-MM-DD hh:mm:ss
timestamp YY-MM-DD hh:mm:ss
YYYYMMDDhhmmss
YYMMDDhhmmss
YYYYMMDDhhmmss
YYMMDDhhmmss
date YYYY-MM-DD
YY-MM-DD
YYYYMMDD
YYMMDD
YYYYMMDD
YYMMDD
time hh:mm:ss
hhmmss
hhmmss
year YYYY
YY
YYYY
YY
4. 枚舉和集合
enum(val1, val2, val3...)
在已知的值中進行單選。最大數量爲65535.
枚舉值在保存時,以2個字節的整型(smallint)保存。每個枚舉值,按保存的位置順序,從1開始逐一遞增。
表現爲字符串類型,存儲卻是整型。
NULL值的索引是NULL。
空字符串錯誤值的索引值是0。
set(val1, val2, val3...)
create table tab ( gender set('男', '女', '無') );
insert into tab values ('男, 女');
最多可以有64個不同的成員。以bigint存儲,共8個字節。採取位運算的形式。
當創建表時,SET成員值的尾部空格將自動被刪除。
8.列屬性(列約束)
1. PRIMARY 主鍵
- 能唯一標識記錄的字段,可以作爲主鍵。
- 一個表只能有一個主鍵。
- 主鍵具有唯一性。
- 聲明字段時,用 primary key 標識。
也可以在字段列表之後聲明
例:create table tab ( id int, stu varchar(10), primary key (id));
- 主鍵字段的值不能爲null。
- 主鍵可以由多個字段共同組成。此時需要在字段列表後聲明的方法。
例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));
2. UNIQUE 唯一索引(唯一約束)
使得某字段的值也不能重複。
3. NULL 約束
null不是數據類型,是列的一個屬性。
表示當前列是否可以爲null,表示什麼都沒有。
null, 允許爲空。默認。
not null, 不允許爲空。
insert into tab values (null, 'val');
4. DEFAULT 默認值屬性
當前字段的默認值。
insert into tab values (default, 'val');
create table tab ( add_time timestamp default current_timestamp );
current_date, current_time
5. AUTO_INCREMENT 自動增長約束
自動增長必須爲索引(主鍵或unique)
只能存在一個字段爲自動增長。
默認爲1開始自動增長。可以通過表屬性 auto_increment = x進行設置,或 alter table tbl auto_increment = x;
6. COMMENT 註釋
例:create table tab ( id int ) comment '註釋內容';
7. FOREIGN KEY 外鍵約束
用於限制主表與從表數據完整性。
alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id);
存在外鍵的表,稱之爲從表(子表),外鍵指向的表,稱之爲主表(父表)。
作用:保持數據一致性,完整性,主要目的是控制存儲在外鍵表(從表)中的數據。
MySQL中,可以對InnoDB引擎使用外鍵約束:
語法:
foreign key (外鍵字段) references 主表名 (關聯字段) [主表記錄刪除時的動作] [主表記錄更新時的動作]
此時需要檢測一個從表的外鍵需要約束爲主表的已存在的值。外鍵在沒有關聯的情況下,可以設置爲null.前提是該外鍵列,沒有not null。
可以不指定主表記錄更改或更新時的動作,那麼此時主表的操作被拒絕。
如果指定了 on update 或 on delete:在刪除或更新時,有如下幾個操作可以選擇:
1. cascade,級聯操作。主表數據被更新(主鍵值更新),從表也被更新(外鍵值更新)。主表記錄被刪除,從表相關記錄也被刪除。
2. set null,設置爲null。主表數據被更新(主鍵值更新),從表的外鍵被設置爲null。主表記錄被刪除,從表相關記錄外鍵被設置成null。但注意,要求該外鍵列,沒有not null屬性約束。
3. restrict,拒絕父表刪除和更新。
注意,外鍵只被InnoDB存儲引擎所支持。其他引擎是不支持的。
9.建表規範
- 每個表保存一個實體信息
- 每個具有一個ID字段作爲主鍵
- ID主鍵 + 原子表
字段不能再分,就滿足第一範式。
滿足第一範式的前提下,不能出現部分依賴。
消除符合主鍵就可以避免部分依賴。增加單列關鍵字。
滿足第二範式的前提下,不能出現傳遞依賴。
某個字段依賴於主鍵,而有其他字段依賴於該字段。這就是傳遞依賴。
將一個實體信息的數據放在一個表內實現。
10.事務(transaction)
事務是指邏輯上的一組操作,組成這組操作的各個單元,要不全成功要不全失敗。
- 支持連續SQL的集體成功或集體撤銷。
- 事務是數據庫在數據晚自習方面的一個功能。
- 需要利用 InnoDB 或 BDB 存儲引擎,對自動提交的特性支持完成。
- InnoDB被稱爲事務安全型引擎。
START TRANSACTION; 或者 BEGIN;
開啓事務後,所有被執行的SQL語句均被認作當前事務內的SQL語句。
COMMIT;
ROLLBACK;
如果部分操作發生問題,映射到事務開啓前。
1. 原子性(Atomicity)
事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。
2. 一致性(Consistency)
事務前後數據的完整性必須保持一致。
- 事務開始和結束時,外部數據一致
- 在整個事務過程中,操作是連續的
3. 隔離性(Isolation)
多個用戶併發訪問數據庫時,一個用戶的事務不能被其它用戶的事物所幹擾,多個併發事務之間的數據要相互隔離。
4. 持久性(Durability)
一個事務一旦被提交,它對數據庫中的數據改變就是永久性的。
1. 要求是事務支持的表類型
2. 執行一組相關的操作前開啓事務
3. 整組操作完成後,都成功,則提交;如果存在失敗,選擇回滾,則會回到事務開始的備份點。
利用InnoDB的自動提交(autocommit)特性完成。
普通的MySQL執行語句後,當前的數據提交操作均可被其他客戶端可見。
而事務是暫時關閉“自動提交”機制,需要commit提交持久化數據操作。
1. 數據定義語言(DDL)語句不能被回滾,比如創建或取消數據庫的語句,和創建、取消或更改表或存儲的子程序的語句。
2. 事務不能被嵌套
SAVEPOINT 保存點名稱
ROLLBACK TO SAVEPOINT 保存點名稱
RELEASE SAVEPOINT 保存點名稱
SET autocommit = 0|1; 0表示關閉自動提交,1表示開啓自動提交。
- 如果關閉了,那普通操作的結果對其他客戶端也不可見,需要commit提交後才能持久化數據操作。
- 也可以關閉自動提交來開啓事務。但與START TRANSACTION不同的是,
SET autocommit是永久改變服務器的設置,直到下次再次修改該設置。(針對當前連接)
而START TRANSACTION記錄開啓前的狀態,而一旦事務提交或回滾後就需要再次開啓事務。(針對當前事務)
11.用戶和權限管理
1. 停止MySQL服務
2. [Linux] /usr/local/mysql/bin/safe_mysqld
[Windows] mysqld
3. use mysql;
4. UPDATE `user` SET PASSWORD=PASSWORD("密碼") WHERE `user` = "root";
5. FLUSH PRIVILEGES;
用戶信息表:mysql.user
FLUSH PRIVILEGES;
CREATE USER 用戶名 IDENTIFIED BY [PASSWORD] 密碼(字符串)
- 必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。
- 只能創建用戶,不能賦予權限。
- 用戶名,注意引號:如 'user_name'@'192.168.1.1'
- 密碼也需引號,純數字密碼也要加引號
- 要在純文本中指定密碼,需忽略PASSWORD關鍵詞。要把密碼指定爲由PASSWORD()函數返回的混編值,需包含關鍵字PASSWORD
-- 重命名用戶
RENAME USER old_user TO new_user
-- 設置密碼
SET PASSWORD = PASSWORD('密碼') -- 爲當前用戶設置密碼
SET PASSWORD FOR 用戶名 = PASSWORD('密碼') -- 爲指定用戶設置密碼
-- 刪除用戶
DROP USER 用戶名
-- 分配權限/添加用戶
GRANT 權限列表 ON 表名 TO 用戶名 [IDENTIFIED BY [PASSWORD] 'password']
- all privileges 表示所有權限
- *.* 表示所有庫的所有表
- 庫名.表名 表示某庫下面的某表
GRANT ALL PRIVILEGES ON `pms`.* TO 'pms'@'%' IDENTIFIED BY 'pms0817';
SHOW GRANTS FOR 用戶名
SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER();
REVOKE 權限列表 ON 表名 FROM 用戶名
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用戶名
全局層級:全局權限適用於一個給定服務器中的所有數據庫,mysql.user
GRANT ALL ON *.*和 REVOKE ALL ON *.*只授予和撤銷全局權限。
數據庫層級:數據庫權限適用於一個給定數據庫中的所有目標,mysql.db, mysql.host
GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤銷數據庫權限。
表層級:表權限適用於一個給定表中的所有列,mysql.talbes_priv
GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤銷表權限。
列層級:列權限適用於一個給定表中的單一列,mysql.columns_priv
當使用REVOKE時,您必須指定與被授權列相同的列。
ALL [PRIVILEGES]
ALTER
ALTER ROUTINE
CREATE
CREATE ROUTINE
CREATE TEMPORARY TABLES
CREATE USER
CREATE VIEW
DELETE
DROP
EXECUTE
FILE
INDEX
INSERT
LOCK TABLES
PROCESS
REFERENCES
RELOAD
REPLICATION CLIENT
REPLICATION SLAVE
SELECT
SHOW DATABASES
SHOW VIEW
SHUTDOWN
SUPER
UPDATE
USAGE
GRANT OPTION
-
備份與還原
備份,將數據的結構與表內數據保存起來。
利用 mysqldump 指令完成。
mysqldump [options] db_name [tables]
mysqldump [options]
mysqldump [options]
1. 導出一張表
mysqldump -u用戶名 -p密碼 庫名 表名 > 文件名(D:/a.sql)
2. 導出多張表
mysqldump -u用戶名 -p密碼 庫名 表1 表2 表3 > 文件名(D:/a.sql)
3. 導出所有表
mysqldump -u用戶名 -p密碼 庫名 > 文件名(D:/a.sql)
4. 導出一個庫
mysqldump -u用戶名 -p密碼
可以-w攜帶WHERE條件
1. 在登錄mysql的情況下:
source 備份文件
2. 在不登錄的情況下
mysql -u用戶名 -p密碼 庫名 < 備份文件
12.SELECT(查詢)
SELECT [ALL|DISTINCT] select_expr FROM -> WHERE -> GROUP BY [合計函數] -> HAVING -> ORDER BY -> LIMIT
a. select_expr
select * from tb;
select stu, 29+25, now() from tb;
- 使用 as 關鍵字,也可省略 as.
select stu+10 as add10 from tb;
b. FROM 子句
用於標識查詢來源。
SELECT * FROM tb1 AS tt, tb2 AS bb;
SELECT * FROM tb1, tb2;
USE INDEX、IGNORE INDEX、FORCE INDEX
SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3;
SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3;
c. WHERE 子句
=, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor
is/is not 加上ture/false/unknown,檢驗某個值的真假
<=>與<>功能相同,<=>可用於null比較
d. GROUP BY 子句, 分組子句
GROUP BY 字段/別名 [排序方式]
分組後會進行排序。升序:ASC,降序:DESC
以下[合計函數]需配合 GROUP BY 使用:
count 返回不同的非NULL值數目 count(*)、count(字段)
sum 求和
max 求最大值
min 求最小值
avg 求平均值
group_concat 返回帶有來自一個組的連接的非NULL值的字符串結果。組內字符串連接。
e. HAVING 子句,條件子句
與 where 功能、用法相同,執行時機不同。
where 在開始時執行檢測數據,對原數據進行過濾。
having 對篩選出的結果再次進行過濾。
having 字段必須是查詢出來的,where 字段必須是數據表存在的。
where 不可以使用字段的別名,having 可以。因爲執行WHERE代碼時,可能尚未確定列值。
where 不可以使用合計函數。一般需用合計函數纔會用 having
SQL標準要求HAVING必須引用GROUP BY子句中的列或用於合計函數中的列。
f. ORDER BY 子句,排序子句
order by 排序字段/別名 排序方式 [,排序字段/別名 排序方式]...
升序:ASC,降序:DESC
支持多個字段的排序。
g. LIMIT 子句,限制結果數量子句
僅對處理好的結果進行數量限制。將處理好的結果的看作是一個集合,按照記錄出現的順序,索引從0開始。
limit 起始位置, 獲取條數
省略第一個參數,表示從索引0開始。limit 獲取條數
h. DISTINCT, ALL 選項
distinct 去除重複記錄
默認爲 all, 全部記錄
-
UNION
將多個select查詢的結果組合成一個結果集合。
SELECT ... UNION [ALL|DISTINCT] SELECT ...
默認 DISTINCT 方式,即所有返回的行都是唯一的
建議,對每個SELECT查詢加上小括號包裹。
ORDER BY 排序時,需加上 LIMIT 進行結合。
需要各select查詢的字段數量一樣。
每個select查詢的字段列表(數量、類型)應一致,因爲結果中的字段名以第一條select語句爲準。
14.子查詢
- 子查詢需用括號包裹。
from後要求是一個表,必須給子查詢結果取個別名。
- 簡化每個查詢內的條件。
- from型需將結果生成一個臨時表格,可用以原表的鎖定的釋放。
- 子查詢返回一個表,表型子查詢。
select * from (select * from tb where id>0) as subfrom where id>1;
- 子查詢返回一個值,標量子查詢。
- 不需要給子查詢取別名。
- where子查詢內的表,不能直接用以更新。
select * from tb where money = (select max(money) from tb);
如果子查詢結果返回的是一列。
使用 in 或 not in 完成查詢
exists 和 not exists 條件
如果子查詢返回數據,則返回1或0。常用於判斷條件。
select column1 from t1 where exists (select * from t2);
查詢條件是一個行。
select * from t1 where (id, gender) in (select id, gender from t2);
行構造符:(col1, col2, ...) 或 ROW(col1, col2, ...)
行構造符通常用於與對能返回兩個或兩個以上列的子查詢進行比較。
!= all() 相當於 not in
= some() 相當於 in。any 是 some 的別名
!= some() 不等同於 not in,不等於其中某一個。
all, some 可以配合其他運算符一起使用。
15.連接查詢(join)
將多個表的字段進行連接,可以指定連接條件。
- 默認就是內連接,可省略inner。
- 只有數據存在時才能發送連接。即連接結果不能出現空行。
on 表示連接條件。其條件表達式與where類似。也可以省略條件(表示條件永遠爲真)
也可用where表示連接條件。
還有 using, 但需字段名相同。using(字段名)
即,沒有條件的內連接。
select * from tb1 cross join tb2;
- 如果數據不存在,也會出現在連接結果中。
如果數據不存在,左表記錄會出現,而右表爲null填充
如果數據不存在,右表記錄會出現,而左表爲null填充
自動判斷連接條件完成連接。
相當於省略了using,會自動查找相同字段名。
natural join
natural left join
natural right join
select info.id, info.name, info.stu_num, extra_info.hobby, extra_info.sex from info, extra_info where info.stu_num = extra_info.stu_id;
16.INSERT(插入)
select語句獲得的數據可以用insert插入。
可以省略對列的指定,要求 values () 括號內,提供給了按照列順序出現的所有字段的值。
或者使用set語法。
INSERT INTO tbl_name SET field=value,...;
可以一次性使用多個值,採用(), (), ();的形式。
INSERT INTO tbl_name VALUES (), (), ();
可以在列值指定時,使用表達式。
INSERT INTO tbl_name VALUES (field_value, 10+10, now());
可以使用一個特殊值 DEFAULT,表示該列使用默認值。
INSERT INTO tbl_name VALUES (field_value, DEFAULT);
可以通過一個查詢的結果,作爲需要插入的值。
INSERT INTO tbl_name SELECT ...;
可以指定在插入的值出現主鍵(或唯一索引)衝突時,更新其他非主鍵列的信息。
INSERT INTO tbl_name VALUES/SET/SELECT ON DUPLICATE KEY UPDATE 字段=值, …;
17.DELETE(刪除)
DELETE FROM tbl_name [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]
按照條件刪除。where
指定刪除的最多記錄數。limit
可以通過排序條件刪除。order by + limit
支持多表刪除,使用類似連接語法。
delete from 需要刪除數據多表1,表2 using 表連接操作 條件。
18.TRUNCATE()
TRUNCATE [TABLE] tbl_name
清空數據
刪除重建表
區別:
1,truncate 是刪除表再創建,delete 是逐條刪除
2,truncate 重置auto_increment的值。而delete不會
3,truncate 不知道刪除了幾條,而delete知道。
4,當被用於帶分區的表時,truncate 會保留分區