MySQL 基本语法
待完成…
一、Mysql基礎
SQL的分類:
1、DDL—數據定義語言(Data Define Language):create(創建),alter(修改),drop(刪除),TRUNCATE(截斷),RENAME(重命名); 2、DML—數據操縱語言(Data Manipulation Language):select(查詢),delete(刪除),update(更新),insert(新增); 3、DCL—數據控制語言(Data Control Language):grant(添加權限),revoke(回收權限);DDL操作:
注意:使用DDL語言時,必須在動詞后跟上數據庫對象名詞(例如:TABLE、VIEW、INDEX、SCHEMA、TRIGGER等)。
數據庫的鏈接
常用的參數解釋:
-A 不預讀數據庫信息,提高連接和切換數據庫速度,使用--disable-auto-rehash代替 --default-character-set 使用的默認字符集 -e 執行命令并退出 -h 主機地址 -p 連接到服務器時使用的密碼 -P 連接的端口號創建數據庫:
create database test1 ;查看數據庫:
show databases;選擇數據庫:
use mysql;刪除數據庫:
drop database test1;創建表:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [database_name.] <table_name> (<column_name> <data_type> [[not] null],… )注:TEMPORARY:指明創建臨時表
IF NOT EXISTS:如果要創建的表已經存在,強制不顯示錯誤消息
database_name:數據庫名
table_name:表名
column_name:列名
data_type:數據類型
查看定義:
查看創建的表:
show create table emp ;更新表名:
alter table emp rename users;刪除表:
drop table emp;修改表字段:
alter table emp modify ename varchar(30);增加表字段:
alter table emp add column age int(3);修改表字段:
alter table emp change age age int(4);刪除表字段:
alter table emp drop column age;change和modify:
前者可以修改列名稱,后者不能. change需要些兩次列名稱.字段增加修改 add/change/modify/ 添加順序:
1 add 增加在表尾. 2 change/modify 不該表字段位置. 3 修改字段可以帶上以下參數進行位置調整(frist/after column_name);alter table emp change age age int(2) after ename; alter table emp change age age int(3) first;DML語句:
插入記錄:
批量記錄:
insert into emp values ('jack chen','2011-01-01','18000',2),('andy lao','2013-01-01','18000',2);更新記錄:
update emp set sal="7000.00" where ename="jack";update emp e,dept d set e.sal="10000",d.deptname=e.ename where e.deptno=d.deptno and e.ename="lisa";刪除記錄:
//請仔細檢查where條件,慎重 delete from emp where ename='jack';查看記錄:
//查看所有字段 select * from emp;//查詢不重復記錄 select distinct(deptno) from emp ; select distinct(deptno),emp.* from emp ;//條件查詢 //比較運算符: > < >= <= <> != ... //邏輯運算符: and or ... select * from emp where sal="18000" and deptno=2;排序
//desc降序,asc 升序(默認) select * from emp order by deptno ; select * from emp order by deptno asc; select * from emp order by deptno desc,sal desc;限制記錄數:
select * from emp limit 1; select * from emp limit 100,10; select * from emp order by deptno desc,sal desc limit 1;聚合:函數:count():記錄數 / sum(總和); / max():最大值 / min():最小值
select count(id) from emp ; select sum(sal) from emp ; select max(sal) from emp ; select min(sal) from emp ;group by分組:
//分組統計 select count(deptno) as count from emp group by deptno; select count(deptno) as count,deptno from emp group by deptno; select count(deptno) as count,deptno,emp.* from emp group by deptno;having 對分組結果二次過濾:
select count(deptno) as count,deptno from emp group by deptno having count > 2;with rollup 對分組結果二次匯總:
select count(sal),emp.* from emp group by sal, deptno with rollup ;表連接:
- left join :左連接,返回左表中所有的記錄以及右表中連接字段相等的記錄;
- right join :右連接,返回右表中所有的記錄以及左表中連接字段相等的記錄;
- inner join: 內連接,又叫等值連接,只返回兩個表中連接字段相等的行;
- full join:外連接,返回兩個表中的行:left join + right join;
- cross join:結果是笛卡爾積,就是第一個表的行數乘以第二個表的行數。
內連接:只返回兩個表中連接字段相等的行
select * from emp as e,dept as d where e.deptno=d.deptno; select * from emp as e inner join dept as d on e.deptno=d.deptno;左外連接:包含左表中所有的記錄以及右表中連接字段相等的記錄
select * from emp as e left join dept as d on e.deptno=d.deptno;右外連接:包含右表中所有的記錄以及左表中連接字段相等的記錄
select * from emp as e right join dept as d on e.deptno=d.deptno;子查詢:
//=, != select * from emp where deptno = (select deptno from dept where deptname="技術部"); select * from emp where deptno != (select deptno from dept where deptname="技術部");//in, not in //當需要使用里面的結果集的時候必須用in(); select * from emp where deptno in (select deptno from dept where deptname="技術部"); select * from emp where deptno not in (select deptno from dept where deptname="技術部");//exists , not exists //當需要判斷后面的查詢結果是否存在時使用exists(); select * from emp where exists (select deptno from dept where deptno > 5); select * from emp where not exists (select deptno from dept where deptno > 5);記錄聯合:
union:返回去重之后的結果 select ename from emp union select ename from emp;union all:返回所有結果 select ename from emp union all select ename from emp;DCL語句:
添加權限:
回收權限:
revoke insert on test.* from 'db_user_1'@'localhost';二、Mysql數據類型
整數類型:
指定寬度:
指定顯示的寬度為5,不影響實際數據
注:INT(4)與INT(5),括號中的字符表示顯示寬度,整數列的顯示寬度與MySQL需要用多少個字符來顯示該列數值,與該整數需要的存儲空間的大小都沒有關系,INT類型的字段能存儲的數據上限還是2147483647(有符號型)和4294967295(無符號型)。其實當我們在選擇使用INT的類型的時候,不論是int(4)還是int(5),它在數據庫里面存儲的都是4個字節的長度。
zerofill:
采用零填充,不足5位采用0填充,配合數據寬度
unsigned:
create table t3 (id int , id2 int(5) unsigned);auto_increment:
只用于整數類型
產生唯一標識
值從1開始,逐行增加
一個表中最多只能存在一個自增列
自增列應該定義為not null
自增列應該這只為 primary key 或者 unique
浮點數類型
定點數類型
float , double , decimal 特點:
1.(m,d)表示方式:m指的是整數位,d指的是小數位(又稱作精度和標度)
2.float/double四舍五入丟失精度,decimal會截斷數據并輸出warning
3.如果不指定精度,float/double采用操作系統默認,decimal則是(10,0)
位類型
1 存放位字段值
2 指定存放多位二進制的長度,默認為1(范圍:1~64)
3 讀取需要bin()/hex(),普通的select讀取結果為null
4 插入的值會轉化為二進制碼,如果長度運行則正常處理,否則插入失敗
日期和時間類型
當前系統日期
年份
year:默認為4位格式.1901~2155和0000. 2位的已經不推薦,高版本已經不支持了.timestamp和datetime區別:
1、timestamp支持范圍小(1970-01-01 08:00:01到2038年某個點)
2、表中第一個timestamp字段,會默認采用當前系統時間.如果更新其他字段,該字段沒有賦值的話,則該字段會自動更新.如果指定字段不滿足規格,則采用零值填充
3、timestamp查詢和插入都會受到當地時區影響
datetime支持范圍寬度大(1000-01-01 00:00:00到9999-12-31 23:23:59)
字符串類型
char和varchar的區別:
- char定長,效率高,在創建字段的時候就已經指定,一般用于固定長度的表單提交數據存儲
- char在檢索的時候回去掉尾部的空格
- varchar是動態長度
- varchar在檢索的時候回保留尾部的空格
- varchar將實際內容單獨存儲在聚簇索引之外,內容開頭用1到2個字節表示實際長度(長度>255時需要2個字節)
- 字符類型若為gbk,每個字符最多占2個字節,字符類型若為utf8,每個字符最多占3個字節
枚舉類型:
- 枚舉在集合中取值,只能取一個
- 如果值不存在則采用第一個值為默認
- 如果插入NULL不會出錯,會將NULL寫入表
- 成員個數在1255占用1個字節,在25565535占用2個字節,節約資源
集合類型
- 集合類型和枚舉很像,但是支持多值選擇
- 最多可以保存64個成員,每8個成員占1個字節
- 重復值只會插入一次,如果查出集合范圍則插入為null
三、Mysql運算符
未完待續。。。。
四、Mysql常用的函數
五、MySQL管理工具和應用程序
六、Mysql存儲引擎
七、常用數據類型的選擇
八、Mysql 字符集
九、Mysql索引設計和使用
十、Mysql中的視圖
十一、事務控制和鎖定
十二、其它
1、mysql–修改自增主鍵的初始值
參考:
在此非常感謝以下技術博文
來源:簡書 戰神悟空-Mysql 基礎
總結
以上是生活随笔為你收集整理的MySQL 基本语法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux Cpu 利用率计算
- 下一篇: linux cmake编译源码,linu