手動不易,轉發請注明出處? --Trance
數據庫系統命令:
? ? ? ? ? (1).查看存儲過程狀態:show procedure status;
? ? ? ? ? (2).顯示系統變量:show variables (最好使用模糊查詢)
? ? ? ? ? (3).查詢當前系統正在執行的進程(相當于DDL(數據庫定義語言) 或 DML(數據庫操作語言) 或 DCL(數據庫控制語言)):show processlist
? ? ? ? ? (4).顯示操作對于的操作內容權限:show privileges
? ? ? ? ? (5).顯示數據庫支持引擎:show engines
? ? ? ? ? (6).顯示最后一個執行的語句所產生的錯誤、警告和通知:show warnings
? ? ? ? ? (7).顯示最后一個執行語句的錯誤:show errors
? ? ? ? ? (8).數據庫幫助命令:在登錄情況下help
? ? ? ? ? (9).數據庫退出指令:exit 或 quit
? ? ? ? ? (10).數據庫操作命令大全:在未登錄情況下 mysql - help
? ? ? ? ? (11).set names = 編碼 進入數據庫后馬上設置 防止亂碼
操作術語:
? ? ? ? ? ? DDL:
? ? ? ? ? ? ? ? Data Definition Language 數據定義語言
? ? ? ? ? ? DML:
? ? ? ? ? ? ? ? Data Manipulation Language 數據操縱語言
? ? ? ? ? ? DQL:
? ? ? ? ? ? ? ? Data Query Language 數據查詢語言
? ? ? ? ? ? DCL:
? ? ? ? ? ? ? ? Data Control Language 數據控制語言
? ? ? ? ? ? TCL:
? ? ? ? ? ? ? ? Transaction Control Language 事務控制語言
數據庫設計原則(三大范式 3NF):
? ? ? ? ? ? ? ? ? ? ? ? ? ? 第一范式(1NF):
? ? ? ? ? ? ? ? ? ? ? ? ? ? 原子性:數據不可再分:一個表中的數據(字段值)不可再分? (注意:從應用需求來決定,沒有絕對性)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 例子(錯誤):
? ? ? ? ? ? ? ? ? ? ? ? ? ? id? ? ? ? name
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? 張三,重慶
? ? ? ? ? ? ? ? ? ? ? ? ? ? 例子(正確):
? ? ? ? ? ? ? ? ? ? ? ? ? ? id? ? ? ? name? ? ? ? address
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? 張三? ? ? ? 重慶
? ? ? ? ? ? ? ? ? ? ? ? ? ? 第二范式(2NF):
? ? ? ? ? ? ? ? ? ? ? ? ? ? 唯一性:保證行數據的唯一性
? ? ? ? ? ? ? ? ? ? ? ? ? ? 例子(錯誤):
? ? ? ? ? ? ? ? ? ? ? ? ? ? id? ? ? ? name
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? 張三
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? 李四
? ? ? ? ? ? ? ? ? ? ? ? ? ? 例子(正確):
? ? ? ? ? ? ? ? ? ? ? ? ? ? id? ? ? ? name? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? 張三? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? 2? ? ? ? 李四? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? 第三范式(3NF):
? ? ? ? ? ? ? ? ? ? ? ? ? ? 獨立性:消除傳遞依賴:禁止非主鍵字段依賴非主鍵依賴,在發生數據冗余,難以維護修改 (注意:發生這種情況一定是多主鍵表)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 例子(錯誤):
? ? ? ? ? ? ? ? ? ? ? ? ? ? id? ? ? ? name? ? ? ? classno? ? ? ? classname
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? 張三? ? ? ? 1? ? ? ? ? ? ? 一班
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? 李四? ? ? ? 2? ? ? ? ? ? ? 二班
? ? ? ? ? ? ? ? ? ? ? ? ? ? 例子(正確):
? ? ? ? ? ? ? ? ? ? ? ? ? ? id? ? ? ? name? ? ? ? classno? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? 張三? ? ? ? 1? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? 李四? ? ? ? 2
? ? ? ? ? ? ? ? ? ? ? ? ? ? classno? ? ? classname
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ? ? ? ? ? 一班? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? 2? ? ? ? ? ? 二班
數據庫連接方式:
? ? ? ? ? ? ? 連接本地:
? ? ? ? ? ? ? ? ? ? ? ? mysql -u 用戶名 -p \n
? ? ? ? ? ? ? ? ? ? ? ? 輸入密碼
? ? ? ? ? ? ? 連接遠程:
? ? ? ? ? ? ? ? ? ? ? ? mysql -h 主機名 -u 用戶名 \n (在對方的數據庫中擁有登錄用戶并且有權限)
? ? ? ? ? ? ? ? ? ? ? ? 輸入密碼
數據庫用戶操作:
? ? ? ? ? ? ? 查詢所有用戶:
? ? ? ? ? ? ? ? ? ? ? ? select user from user;
? ? ? ? ? ? ? 創建用戶:
? ? ? ? ? ? ? ? ? ? ? ? create user 用戶名 identified by 密碼
? ? ? ? ? ? ? 用戶授權:
? ? ? ? ? ? ? ? ? ? ? ? grant 權限名稱(如:select、delete等DML語句、全部(ALL)) on *.*(注意這里前面的*是代表數據庫,第二個*是表名,這里表示所有的數據庫.表) to 用戶
? ? ? ? ? ? ? 撤銷用戶權限:
? ? ? ? ? ? ? ? ? ? ? ? revoke 權限 on *.* from 用戶
? ? ? ? ? ? ? 刪除用戶:
? ? ? ? ? ? ? ? ? ? ? ? drop user 用戶名 (這個有點問題,待解決)
? ? ? ? ? ? ? ? ? ? ? ? delete from mysql where user = '用戶名稱'
? ? ? ? ? ? ? 查詢用戶信息:
? ? ? ? ? ? ? ? ? ? ? ? show grants for 用戶名
? ? ? ? ? ? ? 密碼轉換:
? ? ? ? ? ? ? select password('密碼') 注意:這是一個41個長度的16進制密碼,如果在登錄后設置密碼必須轉換為41個長度16進制密碼,否則報錯
? ? ? ? ? ? ? 未登錄設置用戶密碼:
? ? ? ? ? ? ? ? ? ? ? ? mysqladmin -u 用戶名 -p 新密碼(注意這里是第一次安裝設置)
? ? ? ? ? ? ? 修改用戶密碼:
? ? ? ? ? ? ? ? ? ? ? ? mysqladmin -u 用戶名 -p 舊密碼 password 新密碼
? ? ? ? ? ? ? 登錄后設置用戶密碼:
? ? ? ? ? ? ? ? ? ? ? ? set password for 用戶名 = password(新密碼),如果是當前用戶直接set password = password(新密碼)
? ? ? ? ? ? ? 修改用戶名:
? ? ? ? ? ? ? ? ? ? ? ? ? MYSQL5.0以后 rename user 用戶名 to 新用戶名
? ? ? ? ? ? ? ? ? ? ? ? ? update 表名 set user = '新用戶名' where user = '舊用戶名'
? ? ? ? ? ? ? ? 刷新權限:
? ? ? ? ? ? ? ? ? ? ? ? ? flush privileges
? ? ? ? ? ? ? ? 權限列表:
? ? ? ? ? 表的創建、插入、修改、刪除、查詢權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? insert
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? update
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delete
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? select (select(列名...),可以作用在某列上)
? ? ? ? ? ? ? ? 數據庫與表的刪除和修改權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drop
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? alter
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? modify
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? chanage
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 外鍵權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? references
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 臨時表權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create temporary tables
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 索引權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? index
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 視圖權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create view
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? show view
? ? ? ? ? ? ? ? ? ? ? 存儲過程、函數權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cteate routine
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? alter routine
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? execute(execute on procedure)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? execute(execute on function)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 重載權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? reload
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 鎖表權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lock tables
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 復制權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? replication client
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? replication slave
? ? ? ? ? ? ? ? ? ? ? ? ? 查看數據庫權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? show databases
? ? ? ? ? ? ? ? ? ? ? ? ? ? 查看進程權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? process
? ? ? ? ? ? ? ? ? ? ? ? ? ? 創建用戶權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create user
? ? ? ? ? ? ? ? ? ? ? ? ? ? 文件訪問權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? file
? ? ? ? ? ? ? ? ? ? ? ? ? ? 殺死線程權限:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? super
數據庫管理員命令:
? ? ? ? ? ? ? ? mysqladmin -V 數據庫版本信息
? ? ? ? ? ? ? ? mysqladmin -u 用戶 -p 舊密碼 password 新密碼 修改密碼
? ? ? ? ? ? ? ? mysqladmin -i(number) 重復執行間隔數
? ? ? ? ? ? ? ? mysqladmin -c(count) 重復執行次數
? ? ? ? ? ? ? ? mysqladmin variables 數據庫變量
? ? ? ? ? ? ? ? mysqladmin -? 數據庫幫助
? ? ? ? ? ? ? ? mysqladmin -u root -p reload 重載權限信息
? ? ? ? ? ? ? ? mysqladmin -uroot -p shutdown 使用安全模式關閉數據庫
? ? ? ? ? ? ? ? 待研究...
庫操作:
? ? ? (1).查看存在數據庫:
? ? ? ? ? ? ? ? ? ? ? ? ? show databases
? ? ? (2).創建數據庫:
? ? ? ? ? ? ? ? ? ? ? create database if not exists 數據庫名稱 (注意:后面最好加上字符編碼,防止亂碼) -> create database 數據量名稱 character set utf8(你需求的字符編碼) collate utf8_general_ci(子集)
? ? ? (3).使用數據庫:
? ? ? ? ? ? ? ? ? ? ? use 數據量名稱
? ? ? (4).刪除刪除庫:
? ? ? ? ? ? ? ? ? ? ? drop database if exists 數據庫名稱
? ? ? (5).查看創建數據庫信息:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? show create database 數據庫名稱
表操作:
? ? ? (1).查看數據庫表:show tables
? ? ? (2).創建表:
? ? ? ? ? ? ? ? ? create table if not exists 表名(
? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件],
? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件],
? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件]
? ? ? ? ? ? ? ? ? )engine=引擎類型,charset=字符編碼集,comment=表備注;
? ? ? (3)完整性約束條件表:
? ? ? ? ? ? ? ? ? ? ? ? ? primary key 主鍵約束
? ? ? ? ? ? ? ? ? ? ? ? ? foreign key 外鍵約束
? ? ? ? ? ? ? ? ? ? ? ? ? unique? ? ? 唯一約束
? ? ? ? ? ? ? ? ? ? ? ? ? not null? ? 不能為空
? ? ? ? ? ? ? ? ? ? ? ? ? auto_increment 自增
? ? ? ? ? ? ? ? ? ? ? ? ? default? ? 默認值
? ? ? (4)設置表主鍵:
? ? ? ? ? ? ? ? ? ? create table 表名(
? ? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型 primary key,? ? ? <---- 光標
? ? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件],
? ? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件]
? ? ? ? ? ? ? ? ? ? )engine=引擎類型,charset=字符編碼集;? ? ? ? ?
? ? ? ? ? 多字段主鍵:
? ? ? ? ? ? ? ? ? ? create table 表名(
? ? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件],? ?
? ? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件],
? ? ? ? ? ? ? ? ? ? primary key(屬性1,屬性2,...)? ? ? ? ? <---- 光標
? ? ? ? ? ? ? ? ? ? )engine=引擎類型,charset=字符編碼集;
? ? ? ? ? 添加主鍵:
? ? ? ? ? ? ? ? ? alter table 表名 add primary key(列名)
? ? ? ? ? 修改主鍵:
? ? ? ? ? ? ? ? ? alter table 表名 change 列名 屬性名稱 屬性類型[完整性約束條件]
? ? ? ? ? 刪除主鍵:
? ? ? ? ? ? ? ? ? alter table 表名 drop primary key
? ? 修改自增變量值:
? ? ? ? ? ? ? ? ? alter table 表名 auto_increment = 從數字幾開始.
? ? ? (5)設置外鍵:
? ? ? ? ? ? ? ? ? 外鍵是表的一個特殊字段。如果字段id是一個表A的屬性,且依賴于表B的主鍵.
? ? ? ? ? ? ? ? ? 那么,稱表B為父表,表A為子表,id為表A的外鍵。通過id字段將父表B和子表A建立關聯關系.
? ? ? ? ? ? ? ? ? 設置表的外鍵指在創建表設置某個字段為外鍵.
? ? ? ? ? ? ? ? ? 外鍵的好處:可以使得兩張表關聯,保證數據的一致性和實現一些級聯操作.
? ? ? ? ? 級聯操作:
? ? ? ? ? ? ? ? ? on delete (在刪除的時候) restrict(限制外表中的外鍵改動) cascade(跟隨外鍵改動) set null(設置為空) set default(設置默認值) no action(無動作,默認的)
? ? ? ? ? ? ? ? ? on update (在刪除的時候) restrict(限制外表中的外鍵改動) cascade(跟隨外鍵改動) set null(設置為空) set default(設置默認值) no action(無動作,默認的)? ? ? ? ?
? 創建表時設置外鍵:
? ? ? ? ? ? ? ? ? create table 表名(
? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件],? ?
? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件],
? ? ? ? ? ? ? ? ? constraint 外鍵名稱 foreign key(主鍵表列屬性(也就是本表列屬性)) references 外鍵表名稱(外鍵表列屬性) on (update 級聯操作 或 delete 級聯操作) <---- 光標
? ? ? ? ? ? ? ? ? )engine=引擎類型,charset=字符編碼集;
? ? ? 單獨設置外鍵:
? ? ? ? ? ? ? ? ? alter table employee add constraint 外鍵名稱 foreign key(外鍵表列屬性(也就是本表列屬性)) references department(主鍵表列屬性) on (update 級聯操作 或 delete 級聯操作)
? ? ? ? ? 修改外鍵:
? ? ? ? ? ? ? ? ? 外鍵不支持修改
? ? ? ? ? 刪除外鍵:
? ? ? ? ? ? ? ? ? alter table 表名 drop foreign key 外鍵名稱
? ? ? (6).設置唯一約束:
? ? ? ? ? 創建唯一約束:
? ? ? ? ? ? 建表時創建:
? ? ? ? ? ? ? ? ? create table 表名(
? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件],
? ? ? ? ? ? ? ? ? constraint 唯一約束名稱 unique key(列名)? ? <---- 光標
? ? ? ? ? ? ? ? ? )engine=引擎類型,charset=字符編碼集;
? ? ? ? ? ? 建表后創建:
? ? ? ? ? ? ? ? ? alter table 表名 add constraint 唯一約束名稱 unique key(列名)
? ? ? ? ? 刪除唯一約束:
? ? ? ? ? ? ? ? ? alter table 表名 drop index 約束
? ? ? ? ? 修改唯一約束:
? ? ? ? ? ? ? ? ? 唯一約束不支持修改
? ? ? (7).設置默認值:
? ? ? ? ? 建表時創建:
? ? ? ? ? ? ? ? ? create table 表名(
? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件] default 默認值? <---- 光標
? ? ? ? ? ? ? ? ? )engine=引擎類型,charset=字符編碼集;
? ? ? ? ? 建表后創建:
? ? ? ? ? ? ? ? ? alter table 表名 alter column 列名 set default 默認值
? ? ? ? ? 刪除默認值:
? ? ? ? ? ? ? ? ? alter table 表名 alter column 列名 drop default
? ? ? ? ? 修改默認值:
? ? ? ? ? ? ? ? ? 同創建方式
? ? (8).設置不為空值:
? ? ? ? ? 建表時創建:
? ? ? ? ? ? ? ? ? create table 表名(
? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件] not null? <---- 光標
? ? ? ? ? ? ? ? ? )engine=引擎類型,charset=字符編碼集;
? ? ? ? ? 建表后創建:
? ? ? ? ? ? ? ? ? alter table 表名 change 列名 列名(屬性名稱) 屬性類型[完整性約束條件]
? ? ? 修改不能為空值:
? ? ? ? ? ? ? ? ? alter table 表名 modify 列名 屬性類型[完整性約束條件] not null
? ? ? ? ? ? 刪除空值:
? ? ? ? ? ? ? ? ? (在實際意義上算是修改字段屬性了)? alter table 表名 change 列名 列名(屬性名稱) 屬性類型[完整性約束條件]
? ? (9).自增變量:
? ? ? ? ? ? ? ? auto_increment 默認是從1開始遞增
? ? ? 建表時創建:
? ? ? ? ? ? ? ? ? create table 表名(
? ? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件] auto_increment? <---- 光標
? ? ? ? ? ? ? ? ? )engine=引擎類型,charset=字符編碼集,(如果要改變自增變量起始值)auto_increment = 起始值;
? ? ? 建表后創建:
? ? ? ? ? ? ? ? ? alter table 表名 modify 列名 int auto_increment (注意:自增的前提 此列必須為主鍵 或者 唯一約束)
? ? ? ? ? ? ? ? ? alter table 表名 auto_increment = 起始值
? ? ? ? 刪除自增:
? ? ? ? ? ? ? ? ? alter table 表名 modify 列名 屬性類型[完整性約束條件]
? ? ? ? 修改自增:
? ? ? ? ? ? ? ? ? 同建表后創建
? ? (10).刪除表:
? ? ? ? ? ? ? ? drop if exists 表名
? ? (11).清空表數據:
? ? ? ? ? ? ? ? ? ? truncate 表名
? ? (12).改變列名稱:
? ? ? ? ? ? ? ? ? alter table 表名 change 列名 列名(屬性名稱) 屬性類型[完整性約束條件]
? ? (13).改變列類型屬性約束:
? ? ? ? ? ? ? ? ? alter table 表名 modify 列名(屬性名稱) 屬性類型[完整性約束條件]
? ? (14).增加一列:
? ? ? ? ? ? ? ? ? alter table 表名 add column 列名(屬性名稱) 屬性類型[完整性約束條件]
? ? (15).刪除一列:
? ? ? ? ? ? ? ? ? alter table 表名 drop column 列名
? ? (16).表引擎:
創建時指定表引擎:
? ? ? ? ? ? ? ? create table 表名(
? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件]
? ? ? ? ? ? ? ? )engine=引擎類型;? ? ? ? ? ? ? ? ? <---- 光標
? ? ? 修改表引擎:
? ? ? ? ? ? ? ? alter table 表名 engine = 引擎名稱
? ? ? 刪除表引擎:
? ? ? ? ? ? ? ? 不存在
? ? ? ? 引擎類型:(存儲機制,也稱為表類型)
? ? ? ? ? ? ? ? InnoDB
? ? ? ? ? ? ? ? MyIsam
? ? ? ? ? ? ? ? BDB
? ? ? ? ? ? ? ? archive
? ? ? ? ? ? ? ? Mermory
? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? 默認是innodb
? ? (17).查看表狀態:
? ? ? ? ? ? ? ? show table status from 數據庫名稱 where name = '表名'
? ? ? ? ? ? ? ? show table status
? ? (18).查看一個表幾行幾列:
? ? ? ? ? ? ? ? mysqlshow -u root -p 數據庫名稱 -v -v
? ? (19).查看表列信息:
? ? ? ? ? ? ? ? show columns from 表名 或者 show columns from 數據庫.表名
? ? (20).表備注:
? ? ? ? 創建表時:
? ? ? ? ? ? ? ? create table if not exists 表名(
? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件],
? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件],
? ? ? ? ? ? ? ? 屬性名稱 屬性類型[完整性約束條件]
? ? ? ? ? ? ? ? )engine=引擎類型,charset=字符編碼集,comment=表備注;
? ? ? ? 創建表后:
? ? ? ? ? ? ? ? alter table 表名 comment = 備注信息
? ? ? 修改表備注:
? ? ? ? ? ? ? ? 同創建表后
? ? ? 刪除表備注:
? ? ? ? ? ? ? ? 暫時未發現
? ? (21).創建相似表:
? ? ? ? ? ? ? ? ? ? create if not exists table 表名 like 存在表名 (注意:只是復制了表結構,數據不會復制)
數據類型:
? ? ? ? 數值類型:
? ? ? ? 整數類型:
? ? ? ? ? ? ? ? ? tinyint -> 1字節 -> 小整數值
? ? ? ? ? ? ? ? smallint -> 2字節 -> 大整數值
? ? ? ? ? ? ? ? mediumint -> 3字節 -> 大整數值
? ? ? ? ? ? ? ? ? ? ? int -> 4字節 -> 大整數值? ? ?
? ? ? ? ? ? ? ? ? bigint -> 8字節 -> 極大整數值
? ? ? ? ? ? ? ? ? ? float -> 4字節 -> 單精度浮點數值
? ? ? ? ? ? ? ? ? double -> 8字節 -> 雙精度浮點數值
? ? ? ? ? ? ? ? ? decimal 附屬double
? ? ? 字符串類型:
? ? ? ? ? ? ? ? char -> 0-255字節 -> 定長字符串
? ? ? ? ? ? ? varchar -> 0-255字節 -> 變長字符串
? ? ? ? ? ? tinyblob -> 0-255字節 -> 不超過255個字符的二進制字符串
? ? ? ? ? ? tinytext -> 0-255字節 -> 短文本字符串
? ? ? ? ? ? blob -> 0-65535字節 -> 二進制形式的長文本數據
? ? ? ? ? ? ? text -> 0-65535字節 -> 長文本數據
? ? ? ? ? ? mediumbob -> 0-16777215字節 -> 二進制形式的中等長度文本數據
? ? ? ? ? ? mediutext -> 0-16777215字節 -> 中等長度文本數據
? ? ? ? ? ? logngblob -> 0-4294967295字節 -> 二進制形式的極大文本數據
? ? ? ? ? ? longtext -> 0-4294967295字節 -> 極大文本數據
? ? ? ? ? ?varbinary(m) -> 允許長度0-m個字節的定長字符串,值的長度+1個字節
? ? ? ? ? ? binary(m) -> 允許長度0-m個字節的定長字符串
? 日期和時間類型:
? ? ? ? ? ? ? ? date -> 4字節 -> 1000-01-01/9999-12-31 yyyy-mm-dd -> 年/月/日
? ? ? ? ? ? ? ? time -> 3字節 -> '-838:59:59'/'838:59:59' hh:mm:ss -> 時/分/秒
? ? ? ? ? ? ? ? year -> 1字節 -> 1901/2155 yyyy -> 年
? ? ? ? ? ? datetime -> 8字節 -> 1000-01-01 00:00:00/9999-12-31 23:59:59 yyyy-mm-dd hh:mm:ss -> 年/月/日 時/分/秒
? ? ? ? ? ? datestamp -> 4字節 ->? 1970-01-01 00:00:00/2037? yyyymmdd hhmmss -> 時間戳 年/月/日 時/分/秒
? ? ? 復合類型:
? ? ? ? ? ? ? ? enum -> 包含65536個元素,其中一個元素保留,用來保存錯誤信息 -> enum('值1','值2'...)
? ? ? ? ? ? ? ? set -> 包含64個元素,不能包含2個相同的元素 -> set('值1','值2'...)
索引:
? ? (1).查看索引:
? ? ? ? ? ? ? ? show index from 表名
? ? ? ? ? ? ? ? show keys from 表名
? ? ? ? 創建索引
? ? ? ? ? ? ? ? create index 索引名稱 on 表名(列名);
? ? ? ? ? ? ? ? alter table 表名 add index 索引名稱(列名)
? ? ? ? 唯一索引:
? ? ? ? ? ? ? ? create unique index 索引名稱 on 表名(列名)
? ? ? ? ? ? ? ? alter table 表名 add unique 索引名稱(列名)
? ? ? ? ? ? ? ? 與普通索引相似,但是要求索引列值是唯一不能重復的,可以為空.
? ? ? ? 主鍵索引:
? ? ? ? ? ? ? ? create primary key on 表名(列名)
? ? ? ? ? ? ? ? alter table 表名 add primary key(列名)
? ? ? ? ? ? ? ? 就是主鍵列,不允許為空值,一般為Int類型和自增
? ? ? ? 組合索引:
? ? ? ? ? ? ? ? create index 索引名稱 on 表名(列名1,列名2,...)
? ? ? ? 全文索引:
? ? ? ? ? ? ? ? create fulltext 索引名稱 on 表名(列名1,列名2,...)
? ? ? ? ? ? ? ? alter table 表名 add fulltext (列名1,列名2,...)
? ? ? ? 刪除索引:
? ? ? ? ? ? ? ? drop index 索引名稱 on 表名
? ? ? ? ? ? ? ? alter table 表名 drop index 索引名稱
? ? ? ? ? ? ? ? (注意如果有主外鍵約束,需要先刪除主外鍵約束)? ? ? ? ? ? ?
視圖:
? ? 創建視圖:
? ? ? ? ? ? ? 默認字段:create view 視圖名稱 as 查詢語句? ? (注意:這里創建的視圖是虛擬表,在查看表可以看到,但是是虛擬的)
? ? ? ? ? ? ? 自聲明字段:create view 視圖名稱 ('字段1','字段2'...) as 查詢語句? (注意:查詢的字段列數必須和視圖表列數相同)
? ? 刪除視圖:
? ? ? ? ? ? ? drop view if exists 視圖名稱
? ? 修改視圖:
? ? ? ? ? ? ? 視圖用來查詢數據,如果做修改就毫無意義了,而且即使修改也會出現各種問題
? ? ? ? ? 注意: -> 在MYSQL中,字符串和日期值必須使用單引號引用,數值類型可有可無
DML語句 -> 插入數據語法:
? ? ? ? ? ? ? ? ? ? ? ? (1).insert into 表名 (列名1,列名2,列名3...) values('值1','值2'...)? (注意:自增字段忽略值)
? ? ? ? ? ? ? ? ? ? ? ? (2).replace into 表名 (列名1,列名2,列名3...) values('值1','值2'...) (注意:插入數據與主鍵和唯一鍵有重復則會變成更新數據,否則增加一行數據)
? ? ? ? ? ? ? ? ? ? ? ? (3).insert into 表名 (列名1,列名2,列名3...) select 列名1,列名2... from 其他表名 (注意:列數量要一致)
? ? ? ? ? ? ? ? ? ? ? ? (4).insert into 表名 set 列名1 = 值1 , 列名2 = 值2 ...
載入文本數據(load data):(在有主鍵的方式下運行有問題):
? ? ? ? ? ? ? ? ? ? ? ? (1).load data infile '完整數據文件地址' into table 表名 (普通方式)
? ? ? ? ? ? ? ? ? ? ? ? (2).load data infile '完整數據文件地址' into table 表名 fields terminted by '列分割符'
? ? ? ? ? ? ? ? ? ? ? ? (3).load data local? infile '完整數據文件地址' into table 表名 ... (指定local本地讀取,未指定在服務器上讀取)
? ? ? ? ? ? ? ? ? ? ? ? (4).load data low_priority infile '完整數據文件地址' into table 表名 ... (指定low_priority會在其他人沒讀取這個表的時候才把數據插入)
? ? ? ? ? ? ? ? ? ? ? ? (5).load data infile '完整數據文件地址' replace into table 表名 (普通方式)
? ? ? ? ? ? ? ? ? ? ? ? (6).load data infile '完整數據文件地址' into table 表名 fields terminted by '列分割符' ignore 行數 lines (忽略前幾行導入)
? ? ? ? ? ? ? ? ? ? ? ? (7).load data infile '完整數據文件地址' into table 表名 fields terminted by '列分割符' lines ternubated by '行分割符'
? ? ? ? ? ? ? ? ? ? ? ? (8).load data infile '完整數據文件地址' into table 表名 fields terminted by '列分割符' enclosed by '符號' (字段包含符號)
? ? ? ? ? ? ? ? ? ? ? ? (9).load data infile '完整數據文件地址' into table 表名 fields terminted by '列分割符' escaped by '符號' (轉義符)
復制表:
? ? 復制表結構生成新表:
? ? ? ? ? ? ? ? ? ? ? create table 新表名稱 like 舊表名稱
? ? ? 復制表和數據一起:
? ? ? ? ? ? ? ? ? ? ? create table 新表名稱 select * from 舊表名稱
? 復制表中其中一些字段:
? ? ? ? ? ? ? ? ? ? ? create table 新表名稱 (select '列名1','列名2'...)
復制表中其中一些字段并且改名:
? ? ? ? ? ? ? ? ? ? ? create table 新表名稱 (select '列名1' as '新表列名'.... from 舊表名稱)
復制表中其中一些字段并且增加字段:
? ? ? ? ? ? ? ? ? ? ? create table 新表名稱(列名 屬性類型[完整性約束條件])(select '列名'... from 舊表)? ? ?
? ? 復制舊表數據到新表:
? ? ? ? ? ? ? 全表數據:
? ? ? ? ? ? ? ? ? ? ? insert into 新表名稱 select * from 舊表名稱
? ? ? ? ? ? ? 單列數據:
? ? ? ? ? ? ? ? ? ? ? insert into 新表名稱('列名1','列名2'...) select '列名1','列名2' from 舊表名稱
DML語句 -> 刪除數據語法:
? ? ? ? ? ? ? 刪除數據:
? ? ? ? ? ? ? ? ? ? ? ? (1).delete from 表名 (刪除表中全部數據)(以行為單位)
? ? ? ? ? ? ? ? ? ? ? ? (2).delete from 表名 where 條件表達式 (帶條件的刪除,以行為單位)
? ? ? ? ? ? ? ? ? ? ? ? (3).delete from 表名 where 條件表達式 order by '列名' desc 或者 asc? (用于指定這些數據的刪除順序)(以行為單位)
? ? ? ? ? ? ? ? ? ? ? ? (4).delete from 表名 limit 數目 (刪除指定范圍的數據)(以行為單位)
DML語句 -> 修改數據語法:
? ? ? ? ? ? ? 修改數據:
? ? ? ? ? ? ? ? ? ? ? ? (1).update 表名 set '列名1' = '值1','列名2' = '值2' (修改表中所有數據)(以行為單位)
? ? ? ? ? ? ? ? ? ? ? ? (2).update 表名 set '列名1' = '值1','列名2' = '值2' where 條件表達式 (帶條件的刪除,以行為單位)
? ? ? ? ? ? ? ? ? ? ? ? (3).update 表名 set '列名1' = '值1','列名2' = '值2' order by '列名' desc 或者 asc? (用于指定這些數據的修改順序)(以行為單位)
? ? ? ? ? ? ? ? ? ? ? ? (4).update 表名 set '列名1' = '值1','列名2' = '值2' limit 數目 (修改指定范圍的數據)(以行為單位)
DML語句 -> 查詢數據語法:
? ? ? ? ? (1).基本查詢:
? ? ? ? ? ? ? ? ? ? ? ? (1).select 表達式
? ? ? ? ? ? ? ? ? ? ? ? ? ? 舉例 1: select 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? 結果: 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? 舉例 2: select 1 + 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? 結果: 2
? ? ? ? ? ? ? ? ? ? ? ? ? ? 舉例 3: select 1 > 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? 結果: 1 (這里返回是 true 和 false , 1 代表 true , 0 代表 false)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 舉例 4: select 1 < 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? 結果: 0 (這里返回是 true 和 false , 1 代表 true , 0 代表 false)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 舉例 5: select now()
? ? ? ? ? ? ? ? ? ? ? ? ? ? 結果: 當前時間? ?
? ? ? ? ? ? ? ? ? ? ? ? (2).別名 as
? ? ? ? ? ? ? ? ? ? ? ? ? ? select '列名' as '別名' .... from 表名 (給字段取別名)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select 別名.列名1,別名.列名2 ... from 表名 as 別名 (給表取別名)
? ? ? ? ? ? ? ? ? ? ? ? (3).去重 distinct (默認為all)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select distinct '列名' from 表名 (distinct * 無效)
? ? ? ? ? ? ? ? ? ? ? ? (4).from 數據源
? ? ? ? ? ? ? ? ? ? ? ? ? ? select 輸出 from 數據源(表)
? ? ? ? ? ? ? ? ? ? ? ? (5).where子句
? ? ? ? ? ? ? ? ? ? ? ? ? ? select 輸出 from 數據源(表) where 篩選條件列 (對數據源進行條件篩選,篩選機制是按行判斷,where子句依賴from子句)
? ? ? ? ? ? ? ? ? ? ? ? (6).where子句各種運算符:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 算術運算符:? +? -? *? /? %
? ? ? ? ? ? ? ? ? ? ? ? ? ? 比較運算符:? >? >=? <? <=? =? <>? ==? != (最后2種不推薦使用,應該遵循SQL語法規范)
? ? ? ? ? ? ? ? ? ? ? ? ? ? 邏輯運算符:? and(與)? or(或者)? not(非)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select 輸出 from 數據源 where 篩選條件列 = 列值
? ? ? ? ? ? ? ? ? ? ? ? ? ? select 輸出 from 數據源 where true
? ? ? ? ? ? ? ? ? ? ? ? ? ? select 輸出 from 數據源 where 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? select 輸出 from 數據源 where false
? ? ? ? ? ? ? ? ? ? ? ? ? ? select 輸出 from 數據源 where 0
? ? ? ? ? ? ? ? ? ? ? ? ? ? select 輸出 from 數據源 where not(篩選條件表達式)
? ? ? ? ? ? ? ? ? ? ? ? (7).is 運算符
? ? ? ? ? ? ? ? ? ? ? ? ? ? '列名' is null? ? ? ? (判斷字段是否是空值,就是沒有值得意思)
? ? ? ? ? ? ? ? ? ? ? ? ? ? '列名' is not null? ? (判斷某個字段不是空值)
? ? ? ? ? ? ? ? ? ? ? ? ? ? '列名' is true? ? ? ? (判斷某個字段為真)
? ? ? ? ? ? ? ? ? ? ? ? ? ? '列名' is false? ? ? (判斷某個字段為假:0,0.00,'',null等)
? ? ? ? ? ? ? ? ? ? ? ? (8).between運算符 (范圍判斷 什么和什么之間)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select '列名1'... from 表名 where 篩選條件列 between ? and ? (方法1)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select '列名1'... from 表名 where 篩選條件列 比較運算符 ? and ? (方法2)
? ? ? ? ? ? ? ? ? ? ? ? (9).in 運算符 (查詢指定范圍但無任何順序范圍)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select '列名1'... from 表名 where 篩選條件列 in ('值1'...)
? ? ? ? ? ? ? ? ? ? ? (10).like 運算符 (模糊查詢)
? ? ? ? ? ? ? ? ? ? ? ? ? ? (注意:like 查詢依賴2個特殊符號: 1. % 代表任何長度的任何字符 2. _ 代表一個長度的任何字符)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select '列名1'... from 表名 where 篩選條件列 like '%值%'
? ? ? ? ? ? ? ? ? ? ? ? ? ? (如果遇到查詢與符號相同的需求可以使用轉義字符 如: \% \_)
? ? ? ? ? ? ? ? ? ? ? (11).group by 分組 (將多行數據,以某種標準進行分類存放)
? ? ? ? ? ? ? ? ? ? ? ? ? ? (注意:這里會有點抽象,我們根據分組查詢的信息只有部分是有用的,比如共有幾個分組等)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select count(*) from 表名 group by '列名' (得到的是每個分組下的數據條數)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select 組信息 form 表名 group by '列名'? (可以這樣理解,我們得到的是組信息,而不是單條數據信息)
? ? ? ? ? ? ? ? ? ? ? (12).having (只能對分組結果進行篩選,就是必須與group by 連用)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select count(*) from 表名 group by '列名' having count(*) > 數字
? ? ? ? ? ? ? ? ? ? ? (13).order by (對結果進行排序 asc 或 desc)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表名 order by '列名1'...
? ? ? ? ? ? ? ? ? ? ? (14).limit (指定范圍數據查詢,起始行號從0開始,取出指定的函數)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表名 limit 起始行號,顯示的記錄條數
? ? ? ? ? (2).連接查詢:
? ? ? ? ? ? ? ? ? ? ? ? (1).交叉連接 cross join
? ? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表1,表2,... on 連接條件...
? ? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表1 join 表2 on 連接條件 join 表3 on 連接條件...
? ? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表1 cross join 表2 on 連接條件 cross join 表3 on 連接條件...
? ? ? ? ? ? ? ? ? ? ? ? ? ? 交叉連接結果: (表1 + 表2)個列 (表1 * 表2)個行
? ? ? ? ? ? ? ? ? ? ? ? (2).內連接 inner join
? ? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表1 inner(可省略) join 表2 on 連接條件? (注意:連接條件一般是參與表連接的n個表,相同列的相等)
? ? ? ? ? ? ? ? ? ? ? ? ? ? select '列名1'... from 表1 inner(可省略) join 表2 on 連接條件? (注意:連接條件一般是參與表連接的n個表,相同列的相等)
? ? ? ? ? ? ? ? ? ? ? ? ? ? (注意:跟主外鍵并無實際的關系)
? ? ? ? ? ? ? ? ? ? ? ? (3).左連接 left(outer) join
? ? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表1 left join 表2 on 連接條件 (注意:內連接結果,但是多了一個功能就是可以將左表不符合內連接條件的數據也查詢出來)
? ? ? ? ? ? ? ? ? ? ? ? (4).右連接 right(outer) join
? ? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表1 right join 表2 on 連接條件 (注意:內連接結果,但是多了一個功能就是可以將右表不符合內連接條件的數據也查詢出來)
? ? ? ? ? ? ? ? ? ? ? ? (5).全連接 (注意:在mysql中是沒有這種語法的)
? ? ? ? ? ? ? ? ? ? ? ? ? ? (注意:內連接結果,但是多了一個功能就是可以將左、右表不符合內連接條件的數據也查詢出來)
? ? ? ? ? (3).子查詢: (就是用一個查詢的結果,作為另一個查詢的判斷條件)
? ? ? ? ? ? ? ? ? ? ? (注意:子查詢必須帶有圓括號)
? ? ? ? ? ? ? ? ? ? ? (1).表子查詢:
? ? ? ? ? ? ? ? ? ? ? ? ? (一個子查詢返回的結果理論上是多行多列的時候,此時可以當作一個"表"來使用,通常放在from后面)
? ? ? ? ? ? ? ? ? ? ? ? ? 例子:
? ? ? ? ? ? ? ? ? ? ? ? ? select * from (select * from 表名) as 別名 (注意:把查詢結果集當作數據源必須要有別名,否則報錯)
? ? ? ? ? ? ? ? ? ? ? (2).行子查詢:
? ? ? ? ? ? ? ? ? ? ? ? ? (一個子查詢返回的結果理論上是一行多列的時候,此時可以當作一個行來使用,通常放在行比較語法中)
? ? ? ? ? ? ? ? ? ? ? ? ? 例子:
? ? ? ? ? ? ? ? ? ? ? ? ? select * from (select * from 表名 where 列名 = 值) as 別名
? ? ? ? ? ? ? ? ? ? ? (3).列子查詢:
? ? ? ? ? ? ? ? ? ? ? ? ? (一個子查詢返回的結果理論上是多行一列的時候,此時可當多個值使用,類似(6,2,5,3))
? ? ? ? ? ? ? ? ? ? ? ? ? 例子:
? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表名 where 列名 in (select 列名 from 表名 where 列名 = 值)
? ? ? ? ? ? ? ? ? ? ? (4).標量子查詢:
? ? ? ? ? ? ? ? ? ? ? ? ? (一個子查詢返回的結果理論上是一行一列的時候,此時可以當作一個值使用)
? ? ? ? ? ? ? ? ? ? ? ? ? 例子:
? ? ? ? ? ? ? ? ? ? ? ? ? select * form 表名 where 列名 = (select 列名 或 其他)
? ? ? ? ? ? ? ? ? ? ? (5).all
? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表名 where 列名 比較運算符 all(子查詢) (用來遍歷判斷,只要是比較為真的都被視為結果)
? ? ? ? ? ? ? ? ? ? ? (6).any
? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表名 where 列名 比較運算符 any(子查詢) (用來遍歷判斷,只要是比較為真的都被視為結果)
? ? ? ? ? ? ? ? ? ? ? (7).exists 子查詢
? ? ? ? ? ? ? ? ? ? ? ? ? (該子查詢如果有數據,則返回真,否則為假,帶隱式連接,子查詢使用了主查詢的數據)
? ? ? ? ? ? ? ? ? ? ? ? ? select * from 表名1 where exists (select * from 表名2 where 列名 = 值 where 表名2.列名 = 表名1.列名)
? ? ? ? ? (4).聯合查詢: union
? ? ? ? ? ? ? ? ? ? ? (1).select * from 表1 union [all | distinct] select * from 表2 ...
? ? ? ? ? ? ? ? ? ? ? (注意:參與表必須字段數一致,字段類型也應該一致,聯合查詢默認會自動消除重復行distinct,如果希望被允許,使用all)? ? ?
事務:
? ? (事務簡單來說就是: 要成功一起成功,失敗一個也是失敗,全部是真才是真,一個為假,也是假)
? ? ? (1).開啟、關閉自動提交事務
? ? ? ? ? set autocommit = 0 或者 1 或者 true 或者 false
? ? ? (2).手動模式下每執行一條語句需要手動提交
? ? ? ? ? commit (注意語句在沒提交事務的情況下,執行后是在內存中,等待生效)
? ? ? (3).事務的基本執行流程:
? ? ? ? ? ? ? ? ? ? ? ? ? ? (1).開啟一項事務: start transaction 或者 begin
? ? ? ? ? ? ? ? ? ? ? ? ? ? (2).執行多條DML語句
? ? ? ? ? ? ? ? ? ? ? ? ? ? (3).判斷這些語句的結果
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果沒錯誤 commit? 如果有錯誤 rollback
? ? ? ? ? ? ? ? ? ? 例子:
? ? ? ? ? ? ? ? ? ? ? ? (無錯誤情況下)
? ? ? ? ? ? ? ? ? ? ? ? start transaction
? ? ? ? ? ? ? ? ? ? ? ? insert、delete、update、quer? ?
? ? ? ? ? ? ? ? ? ? ? ? commit
? ? ? ? ? ? ? ? ? ? ? ? (有錯誤情況下)
? ? ? ? ? ? ? ? ? ? ? ? start transaction
? ? ? ? ? ? ? ? ? ? ? ? insert、delete、update、query (過程出錯)
? ? ? ? ? ? ? ? ? ? ? ? rollback
mysql編程:
? ? ? ? ? (1).語句塊包含符:
? ? ? ? ? ? [標識符 :] begin
? ? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? end [標識符];
? ? ? ? ? (2).流程控制:
? ? ? ? ? ? ? ? ? ? ? (1).if語句:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if 條件表達式 then
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? begin
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else if 條件表達式 then
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? begin
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...n個else if 語句...
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? begin
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end;
? ? ? ? ? ? ? ? ? ? ? (2).case 語句:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when 匹配值 then begin ... end;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else begin ... end;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end case
? ? ? ? ? ? ? ? ? ? ? (3).loop 語句:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 標識符:loop
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? begin? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(條件) then (必須有一個退出循環的條件,否則形成死循環)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? leave 標識符;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end if;?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end loop 標識符
? ? ? ? ? ? ? ? ? ? ? (4).while 語句:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? while 條件表達式 do
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...? (這里退出靠循環機制)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end while;? ?
? ? ? ? ? ? ? ? ? ? ? (5).repeat 語句:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? repeat
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? until(條件表達式)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end repeat;
? ? ? ? ? (2).變量聲明:
? ? ? ? ? ? ? ? ? ? ? (1).普通變量 不帶 @ 符號 (只能在編程環境中使用:函數內部、存儲過程、觸發器)
? ? ? ? ? ? ? ? ? ? ? ? ? 聲明形式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? declare 變量名 屬性類型 默認值...
? ? ? ? ? ? ? ? ? ? ? ? ? 賦值形式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? set 變量名 = 值
? ? ? ? ? ? ? ? ? ? ? (2).會話變量 帶 @ 符號
? ? ? ? ? ? ? ? ? ? ? ? ? 聲明形式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? set @變量名 = 值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? select @變量名 := 值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? selent 值 into @變量名
? ? ? ? ? (3).函數:
? ? ? ? ? ? ? ? ? (1).聲明方式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delimiter // (定義語義分隔符)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create function 函數名稱(形參1 類型1,形參2,...)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? returns 返回值類型
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? begin
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return 返回值;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //
? ? ? ? ? ? ? ? ? (2).調用方式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? select 函數名稱()
? ? ? ? ? ? ? ? ? (3).刪除函數:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? drop function 函數名
? ? ? ? ? ? ? ? ? ? ? 注意事項:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在函數體中不能有select或者其他返回結果集語句
? ? ? ? ? (4).存儲過程: procedure
? ? ? ? ? ? ? ? ? ? ? (1).聲明方式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delimiter 分隔符
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create procedure 存儲過程名稱(in|out|inout 形參1 類型1,...)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? begin
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 分隔符
? ? ? ? ? ? ? ? ? ? ? (2).調用存儲過程:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? call 存儲過程名稱()? ? ? ? ? ? ? ? ?
? ? ? ? ? (5).觸發器:
? ? ? ? ? ? ? ? ? ? (1).聲明方式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create trigger 觸發器名稱 觸發時間(before、after) 觸發事件(insert、update、delete) on 表名 for each row
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? begin
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end;
? (6).游標:
? ? ? ? ? (1).聲明方式:
? ? ? ? ? ? ? ? (1).定義游標:declare 游標名稱 cursor for 查詢語句
(2).打開游標:open 游標名稱
(3).游標抓取:fetch 游標名稱 into 變量...
(4).關閉游標:close 游標名稱
delimiter 分隔符
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create procedure 存儲過程名稱(in|out|inout 形參1 類型1,...)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? begin
// 聲明游標變量...
// 定義游標 declare 游標名稱 for? select 列名1,列名2... from 表名
// 打開游標 open 游標名稱
// 游標抓取 fetch 游標名稱 into 游標變量...
// 關閉游標 close 游標名稱
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
end;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 分隔符
mysql導出(備份):
? (1).導出全部數據庫:
? ? ? mysqldump -u 用戶名 -p -A > 導出的文件名.sql
? (2).導出全部數據庫自定義路徑
? ? ? mysqldump -u 用戶名 -p -A > (路徑 如:F:\...\xx.sql)導出的文件名.sql
? (3).導出單個數據庫
? ? ? mysqldump -u 用戶名 -p -B 數據庫名1,數據庫2... > 導出的文件名.sql
? ? ? (默認路徑:C:\Users\當前用戶,注意以每臺電腦的系統盤符為準)
? (4).導出單個數據庫自定義路徑
? ? ? mysqldump -u 用戶名 -p -B 數據庫名 > (路徑 如:F:\...\xx.sql)導出的文件名.sql
? (5).導出指定數據庫所有表自定義路徑
? ? ? mysqldump -u 用戶名 -p -B 數據庫名 --tables > (路徑 如:F:\...\xx.sql)導出的文件名.sql
? (6).導出指定數據庫指定表自定義路徑
? mysqldump -u 用戶名 -p 數據庫名 表名1,表名2... > (路徑 如:F:\...\xx.sql)導出的文件名.sql
? (7).導出指定數據庫指定表(帶過濾條件)自定義路徑
? ? ? mysqldump -u 用戶名 -p -B 數據庫名 表名 --where="條件" > (路徑 如:F:\...\xx.sql)導出的文件名.sql
? (8).導出指定庫所有表結構
? ? ? mysqldump -u 用戶名 -p -d -B 數據庫名 > (路徑 如:F:\...\xx.sql)導出的文件名.sql
? (9).導出查詢數據為txt文件到本地(首先要登錄)(需要權限非常麻煩)
? ? ? ? ? ? ? select 字段,... into outfile '導出路徑' fields terminated by '分隔符'
mysql導入(還原):
? ? ? ? ? (1).第一種方式:
? ? ? ? ? ? ? mysql -u root -p < (路徑 如:F:\...\xx.sql)導入文件名.sql
? ? ? ? ? (1).第二種方式(需登錄):
? ? ? ? ? ? ? source (路徑 如:F:\...\xx.sql)導入文件名.sql
mysql函數:
? ? ? ? ? ------------ 字符串函數 ------------
? (1). ascii(字符串) -> 返回字符串的第一個字符的ascii值
? (2). ord(字符串) -> 如果字符串是單字符返回如ascii值,如果是字符串多字符返回(ascii(字符1) + ascii(字符2) + ...)
? (3). conv(數字,原進制,轉換進制) -> 將一個數字從x進制轉換為x進制
? (4). bin(數字) -> 將數字轉換為2進制? 以字符串返回
? (5). oct(數字) -> 將數字轉換為8進制? 以字符串返回
? (6). hex(數字) -> 將數字轉換為16進制 以字符串返回
? (7). char(數字,...) -> 每個數字對應了ascii碼表上的值,返回一個組成字符串
? (8). concat(字符串1,字符串2...) -> 拼接字符串
? (9). length(字符串) -> 返回字符串的長度
? (10).locate(字符串1,字符串2) -> 返回字符串1在字符串2第一次出現的位置(下標1開始)
? (11).position(字符串1 in 字符串2) -> 返回字符串1在字符串2第一次出現的位置(下標1開始)
? (12).locate(字符串1,字符串2,位置) -> 返回字符串1在字符串2指定位置第一次出現的位置(下標1開始)
? ? ? ? ? (13).instr(字符串1,字符串2) -> 返回字符串2在字符串1第一次出現的位置
? ? ? ? ? (14).ipad(字符串,補齊長度,補齊字符串) -> 使用補全字符串補全字符串左邊,根據補全長度
? ? ? ? ? (15).rpad(字符串,補齊長度,補齊字符串) -> 使用補全字符串補全字符串右邊,根據補全長度
? (16).left(字符串,長度) -> 返回字符串左邊長度個字符
? (17).right(字符串,長度) -> 返回字符串右邊長度個字符
? (18).substring(字符串,起始位置,截取長度) -> 截取字符串
? (19).substring(字符串 from 起始位置 for 截取長度) -> 截取字符串
? (20).mid(字符串,起始位置,截取長度) -> 截取字符串
? (21).substring(字符串,起始位置) -> 截取字符串
? (22).substring(字符串 from 起始位置) -> 截取字符串
? (23).substring_index(字符串,分割符,索引) -> 使用分隔符分割字符串然后獲取分割后數組長度個內容(整數 左邊開始 負號 右邊開始)
? (24).ltrim(字符串) -> 去除字符串左邊的空格
? (25).rtrim(字符串) -> 去除字符串右邊的空格
? (26).trim([[both | leading | trailing] [remstr] from] 字符串)? ? -> 通過指定條件((both(兩邊) leading(頭部) trailing(尾部)) 條件字符串 from 原始字符串)去除字符串指定內容
? (27).soundex(字符串) -> 返回一個同音的字符串 感覺無用...
? (28).space(數字) -> 返回一個多個空格的字符串
? (29).replace(字符串,被替換字符串,替換字符串) -> 替換字符串中需要被替換的字符串
? (30).repeat(字符串,數字) -> 返回由多個此字符串拼接的字符串
? (31).reverse(字符串) -> 顛倒字符串的順序并且返回
? (32).insert(字符串,起始位置,插入長度,插入字符串) -> 在一個字符串中插入另一個字符串
? (33).elt(數字,字符串1,字符串2,字符串3...) -> 返回指定索引位置的字符串
? (34).field(查找字符串,字符串1,字符串2...) -> 返回查找字符串在這些字符串中的索引
? (35).find_in_set(查找字符串,字符串集('a,b,c,d,e...')) -> 返回查找字符串在字符串集中的索引
? (36).lower(字符串) -> 返回小寫字符串
? (37).lcase(字符串) -> 返回小寫字符串
? (38).upper(字符串) -> 返回大寫字符串
? (39).ucase(字符串) -> 返回大寫字符串
? (40).load_file(文件名稱) -> 讀文件,以字符串的形式返回
? ------------ 數學函數 ------------
? (41).abs(數字) -> 返回數字絕對值
? (42).sign(數字) -> 返回數字正負符號
? (43).mod(除數,被除數) -> 返回余數
? ? ? ? ? (44).floor(數字) -> 返回不大于數字的最大整數值
? ? ? ? ? (45).ceiling(數字) -> 返回不小于數字的最小整數值
? (46).round(數字,保留小數位) -> 返回數字的四舍五入,保留小數位個小數位
? (47).exp(數字) -> 返回數字自然對數的底
? (48).log(數字) -> 返回數字的自然對數
? (49).log10(數字) -> 返回數字以10為底的自然對數
? (50).pow(數字,次冪) -> 返回數字的次冪(平方)
? (51).sqrt(數字) -> 返回數字的非負數平方根
? (52).pi() -> 返回圓周率(π)
? (53).cos(n) -> 返回余弦值
? (54).sin(數字) -> 返回數字的正弦值
? (55).tan(數字) -> 返回數字的正切值
? (56).acos(數字) -> 返回數字的反余弦值
? (57).asin(數字) -> 返回數字的反正弦值
? (58).atan(數字) -> 返回數字的反正切值
? (59).cot(數字) -> 返回數字的余切
? (60).rand() -> 返回0 - 0.1 之間的隨機浮點值
? (61).rand(數字) -> 返回以數字作為初始值的隨機浮點值
? (62).degrees(數字) -> 把數字弧度轉換為角度返回
? (63).radians(數字) -> 把數字角度轉換為弧度返回
? (64).truncate(保留數字,保留位數) -> 返回保留數字的保留位小數
? (65).least(數字1,數字2,數字3...) -> 返回最小值
? (66).greatest(數字1,數字2,數字3...) -> 返回最大值
? ------------ 日期函數 ------------
? (67).dayofweek(日期) -> 返回輸入日期是星期幾 (注意:這里返回的是國際標準 6=星期天 0=星期一 1=星期二...)
? (68).weelkday(日期) -> 返回輸入日期是星期幾
? (69).dayofmonth(日期) -> 返回日期在月份中的天數(幾號)
? (70).dayofyear(日期) -> 返回日期在年中是第幾天
? (71).month(日期) -> 返回日期中的月份
? (72).dayname(日期) -> 返回日期是星期幾(英文字母返回)
? (73).monthname(日期) -> 返回日期是幾月(英文字母返回)
? (74).quarter(日期) -> 返回日期是第幾個季度
? (75).week(日期) -> 返回日期是一年中的第幾周
? (76).year(日期) -> 返回日期的年份
? (77).hour(時間) -> 返回時間的小時數
? (78).minute(時間) -> 返回時間的分鐘數
? (79).second(時間) -> 返回時間的秒數
? (80).period_add(原始日期,增加月數) -> 在原始日期基礎上增加數月
? (81).period_diff(日期1,日期2) -> 計算2個日期間的相隔月份數
? (82).日期和時間運算
? ? ? 類型:
? [type值 含義 期望的expr格式]:?
? ? ? ? ? ? ? second 秒 seconds? ?
? ? ? ? ? ? ? minute 分鐘 minutes? ?
? ? ? ? ? ? ? hour 時間 hours? ?
? ? ? ? ? ? ? day 天 days? ?
? ? ? ? ? ? ? month 月 months? ?
? ? ? ? ? ? ? year 年 years? ?
? ? ? ? ? ? ? minute_second 分鐘和秒 "minutes:seconds"? ?
? ? ? ? ? ? ? hour_minute 小時和分鐘 "hours:minutes"? ?
? ? ? ? ? ? ? day_hour 天和小時 "days hours"? ?
? ? ? ? ? ? ? year_month 年和月 "years-months"? ?
? ? ? ? ? ? ? hour_second 小時,分鐘,秒 "hours:minutes:seconds"? ?
? ? ? ? ? ? ? day_minute 天,小時,分鐘 "days hours:minutes"? ?
? ? ? ? ? ? ? day_second 天,小時,分鐘,秒 "days"
? ? ? ? ? ? ? ? 注意:type值不完整,取值從右端開始取值
? 函數:
? ? (1).date_add(日期,interval 增加時間或日期 type) -> 增加時間或日期
? ? ? ? (2).date_sub(日期,interval 增加時間或日期 type) -> 減少時間或日期
(3).adddate(日期,interval 增加時間或日期 type) -> 增加時間或日期
(4).subdate(日期,interval 增加時間或日期 type) -> 減少時間或日期
(5).extract(type from 日期或時間) -> 返回格式化日期或時間
? (83).to_days(日期) -> 返回計算西元0年至日期多少天,不算1582年以前
? (84).from_days(天數) -> 返回相隔西元0年多少天的年份,不算1582年以前
? (85).date_format(日期,格式化樣式)
? ? ? 根據format字符串格式化date值?
? ? ? ? ? ? (在format字符串中可用標志符:?
? ? ? ? ? ? %m 月名字(january……december)? ?
? ? ? ? ? ? %w 星期名字
? ? ? ? ? ? %d 有英語前綴的月份的日期
? ? ? ? ? ? %y 年,數字,4位? ?
? ? ? ? ? ? %y 年,數字,2位? ?
? ? ? ? ? ? %a 縮寫的星期名字
? ? ? ? ? ? %d 月份中的天數,數字
? ? ? ? ? ? %e 月份中的天數,數字
? ? ? ? ? ? %m 月,數字
? ? ? ? ? ? %c 月,數字
? ? ? ? ? ? %b 縮寫的月份名字
? ? ? ? ? ? %j 一年中的天數
? ? ? ? ? ? %h 小時
? ? ? ? ? ? %k 小時
? ? ? ? ? ? %i 小時
? ? ? ? ? ? %l 小時
? ? ? ? ? ? %i 分鐘,數字
? ? ? ? ? ? %r 時間,12小時
? ? ? ? ? ? %t 時間,24小時? ?
? ? ? ? ? ? %s 秒
? ? ? ? ? ? %p am或pm? ?
? ? ? ? ? ? %u 星期
? ? ? ? ? ? %% 字符%)
? (86).time_format(時間,格式化樣式) -> 格式化時間,同格式化日期類似,區別在于這里只針對時間
? (87).curdate() + 0? -> 返回當前日期值,加0代表無分隔符,不加有分割符
? (88).current_date() -> 返回當前日期值
? (89).curtime() + 0 -> 返回當前時間,加0代表無分隔符,不加有分割符
? (90).current_time() -> 返回當前時間
? (91).now() -> 返回當前日期時間
? (92).sysdate() -> 返回當前系統日期時間
? (93).current_timestamp() -> 返回當前日期時間,這里是格式化后的時間戳
? (94).unix_timestamp() -> 返回一個當前unix時間戳
? (95).unix_timestamp(日期) -> 返回一個指定日期unix時間戳
? (96).from_unixtime(unix時間戳) -> 返回一個指定unix時間戳的日期
? (97).from_unixtime(unix時間戳,格式化樣式) -> 回一個指定unix時間戳的格式化日期
? (98).sec_to_time(秒數) -> 返回一個秒數轉化時間的值
? (99).time_to_sec(時間) -> 把時間轉化成秒數
? ------------ 轉換函數 ------------
? (100).cast(字段 as 數據類型) -> 類型轉換,(是否成功取決于類型是否能被轉換)
? (101).convert(字段,數據類型) -> 類型轉換,(是否成功取決于類型是否能被轉換)