DML數據操縱語言html
1.1 向表中插入數據 關鍵字 insertmysql
① 寫法1sql
insert into tab_name [(字段1,字段2,...)] values (v1,v2,...)[,(v1,v2,...),... ];
② 寫法2數據庫
insert into tab_name [(字段1,字段2,...)] select v1,v2,... union select v1,v2,... union select ... ;#union 聯合多個子句執行
③ 寫法3session
insert into tab_name set 字段1 = v1,字段2 = v2 , .... ;
1.2修改(更新)表中數據 關鍵字 update併發
①單表app
update tab_name set 字段1 = v1,字段2 = v2,... where 條件;
② 多表ui
update table_1_name 別名 [left/right/full ]join table_2_name 別名 on 鏈接條件 set 字段1 = v1 , 字段2 = v2 , ... where 篩選條件;
1.3刪除表中數據 關鍵字 deletespa
①單表code
delete from tab_name [where 篩選條件];
② 多表
delete tab_1_rename [, tab_2_rename] from tab_1_name as tab_1_rename [inner/left/right/full] join tab_2_name as tab_2_rename on 鏈接條件 [where 篩選條件];
③ 直接刪除整張表的數據值 關鍵字 Truncate
Truncate [table ]tab_name ; #嚴格來說 truncate同drop同樣屬於DDL,不屬於DML #truncate 不支持回滾,只能做用於表,效果至關於drop+create table 的執行結果。 #truncate 操做執行後,具備自增值屬性的列的值會從1從新開始自增,而delete是接斷點續增。 #truncate後會使表和索引所佔用的空間會恢復到初始大小;delete操做不會減小表或索引所佔用的空間,drop語句將表所佔用的空間全釋放掉。 #truncate 執行後無返回值:‘共0行受到影響’
詳細細節可參考博客園MySQL技術的文章,較全面。
1.4查詢表中數據 關鍵字 select
條件查詢,分組查詢,鏈接查詢,聯合查詢,子查詢,排序,分頁查詢等。
DDL數據定義語言
2.1數據庫
①建立數據庫 create database [if not exists] database_name ;
②修改數據庫
數據庫通常不建議/不能夠進行重命名操做
修改數據庫字符集 &排序規則
alter database database_name character set char_set_name collation 與字符集對應的匹配的collation_name;
③ 刪除數據庫 drop database [if exists] database_name;
2.2表
①建立表
create table [if not exists]tab_name( 字段1 字段類型 其餘限制 , 字段2 字段類型 其餘限制 , ...); desc tab_name ; # 查看錶的結構
②修改表
修改列名 關鍵字change
alter table table_name change [column] colname re_colname col_type [其餘限制] #此操做能夠修改列的每一個屬性,可是,修改列的某一屬性時,其餘限制條件也不能省略,省略即意味着會自動恢復爲默認值,而不是保持當前設置不變。
修改列的數據類型/其餘限制 關鍵字 modify
alter table tab_name modify [column] colname new_coltype [其餘限制] #modify 能夠修改除col_name 外的全部列屬性,一樣,須要設置全面,不能缺省,不然缺省屬性會恢復默認值。
添加/刪除 列 關鍵字 add / drop
alter table tab_name add [column] col_name col_type [其餘限制] [frist/after col_name]; alter table tab_name drop [column] [if exists] col_name;
修改表名(重命名) 關鍵字 rename to
alter table tab_name rename to new_tab_name ;
③刪除表 關鍵字 drop
drop table [if exists] tab_name ;
④表的複製
#複製整個表的結構 create table new_cop_tab_name like org_tab_name; #複製表的部分結構 create table new_cop_tab_name from select 字段1,字段2 from org_tab_name where 1=2 或者 where 0; #將表的結構與數據值同時複製。 create table new_cop_tab_name select */字段1,字段2,... from org_tab_name [where clause];
數據類型
MySQL supports SQL data types in several categories: numeric types, date and time types, string (character and byte) types, spatial types, and the JSON data type.
MySQL支持的數據類型有:數值型,時間型,字符串類型,地理空間類型,JSON類型(詳細參見手冊11章 Data Types)
3.1數值型
MySQL supports all standard SQL numeric data types. These types include the exact numeric data types (INTEGER, SMALLINT, DECIMAL, and NUMERIC), as well as the approximate numeric data types (FLOAT, REAL, and DOUBLE PRECISION). (詳細參見手冊11.1節)
① 各類大小的 int 型 ,包括tinyint,smallint ,mediumint , int(interger),bigint .定義時默認爲signed有符號數,若需定義無符號數(非負數)直接在面空格添加關鍵字unsigned
例:col_name int unsigned;
col_name int (8) zerofill unsigned 其中unsigned 能夠省略,若賦值位數低於指定位數將自動用零填充。② 精確小數型。decimal(總有效位數m,小數點後的位數d) 。例如:decimal(5,2)可表示的數值範圍爲-999.99-999.99。 關鍵字decimal 等價於 numeric 。超出範圍會收到警告。m,d皆可省略,默認分別值分別爲10,0
③ 近似浮點型。 不建議使用,未來版本中將會移除該數據類型。
④ bit型 bit(m) 其中m指的是比特位數,支持1-64。爲特定位數的bit型數據賦值時不足自動右面補零。
3.2 字符串型
The string data types are CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, and SET. (詳細參見手冊11.3節)
① char(m) ,varchar(m) 分別表示固定/自適應長度的字符串類型。char(m) 中'(m)'能夠缺 省,默認爲1。varchar(m)中'm'表示支持的最大長度。
② binary(m),varbinary(m) 含義基本同上,只不過是表示二進制值。
③ text,blob 用於表示較長的二進制字符串文本。
④ enum,set 枚舉型數值。有所類似,有所區別。
3.3 時間類型
The date and time data types for representing temporal values are DATE, TIME, DATETIME, TIMESTAMP, and YEAR. Each temporal type has a range of valid values, as well as a 「zero」 value that may be used when you specify an invalid value that MySQL cannot represent. 詳細參加手冊11.2節
其中datetime ,timestamp 處理所佔字節數不同(分別爲8,4),表示範圍不同外,timestamp 還與特定的時區有關(系統變量time-zone) ,不一樣類型的now()能夠體現。
3.4 地理空間類型(spatial data type ), JSON數據類型 參見手冊11.4 , 11.5節。
常見約束
4.1 能夠區分爲表級約束,列級約束,也能夠具體分爲六大約束
not null (保證該字段非空), default (保證該字段設置爲默認值), primary key (保證該字段具備惟一性,且非空), unique(用於保證該字段具備惟一性,能夠爲空值),check約束(用於檢查字段值是否符合條件,MySQL中兼容check約束語法,可是實際無效。),foreign key(用於保證(從表的)該字段的值必須來自於主表的關聯列的值 ,語法:[foreign key(字段名)] reference 主表名(字段名) )
表級約束
#位置 :在各個字段明確完畢後 # 表級約束不支持not null 與default [constraint cons_name ] cons_type(字段名[,字段名])
Primary Key 與 Unique 對比
是否保證列值惟一性 | 是否容許爲空 | 一個表中容許有多少個該約束存在 | 是否容許組合 | |
---|---|---|---|---|
主鍵 | √ | × | 最多一個 | √但不建議 |
惟一 | √ | √ | 能夠有多個 | √但不建議 |
是否容許組合是指,多個字段聯合起來做爲一個總體具備 主鍵/惟一約束
外鍵約束
① 8.0 MySQL的默認engine爲InnoDB, 該引擎支持外鍵(MyISAM不支持,參見博客)。
② 外鍵約束是設置在從表中的字段中的;從表的外鍵字段的類型與主表的對應字段的類型必須一致或兼容,對於名稱的一致性無要求;
③ 主表的對應字段必須是一個索引(通常爲主鍵或惟一)
④ 插入數據時:先主表後從表;刪除數據時:先從表後主表;若添加外鍵時註明on delete cascade
,則能夠直接直接刪除主表中的數據(級聯刪除);註明on delete set null
能夠在刪除主表的同時將從表中的對應值置爲指定值 .
⑤ 具體語法
#列級語法 col_name int references main_table_name(主表中對應的col_name) #表級語法 [constraint def_cons_name] foreign key(須要設置外鍵從表col_name) references main_table_name(主表對應的col_name)
修改/添加約束
#通用:列級添加約束 alter table tab_name modify column col_name col_type constr _name; #特殊的:表級添加約束 alter table tab_name add [constraint def_cons_name] primary key(col_name) 或 unique(col_name)或 check(具體約束)或 foreign key(col_name) references tab_name(col_name) [on delete cascade]; #刪除非空/默認/自增加: 直接modify時省略便可 #刪除主鍵 alter table tab_name drop primary key;#無需具體指定列名 #刪除惟一 alter table tab_name drop index col_name; #刪除外鍵 alter table tab_name drop foreign key col_name ;
4.2 查看錶中索引:show index from stuinfo;
4.3 標識列/自增加列
TCL事務控制語言
set autocommit=0;
set autocommit = 0 ;start transaction;
commit; 或者rollback;
select @@tx_isolation;
來查看當前當前設置的隔離級別;set session transaction isolation level 隔離級別;
set global transaction isolation level 隔離級別
視圖
6.1 視圖是一種虛擬存在的表,並且是在使用視圖自己的過程當中動態生成的。應用場景:多個地方用到一樣的查詢結果&該查詢結果所使用的sql語句較爲複雜。能夠相似理解爲暫時性的將通用的sql語句打包起來。
6.2 語法
#建立視圖 create view view_name as 具體的通用的查詢語句; #使用視圖 select 字段 from view_name where等子句(當前的特殊查詢條件) #修改視圖 create or replace view view_name as 或者 alter view view_name as 具體的sql語句; #刪除視圖 drop view view_name; #查看視圖 DESC view_name ; 或者 select create view view_name ; #能夠對視圖中的數據進行手動的的插入/刪除,對視圖進行 更新(修改) 存在不少限制,通常會報錯。一旦成功,與視圖相關的原始表中的數據也會隨之修改。 insert into view_name [字段] values (具體的值); update view_name set 字段= 字段值 where 條件; delete view_name where 條件;