語言的分類:
MySQL中語言的分類:數據定義語言(DDL):drop,create,alter等語句
數據操作語言(DML):insert,update,delete
數據查詢語言(DQL):select等語句
數據控制語言(DCL):grant,revoke,commit,rollback等語句
Oracl中的語言的分類:數據定義語言(DDL):drop,create,alter等語句
數據操作語言(DML):insert,delete,update,select ... for update等語句
數據查詢語言(DQL):基本查詢語句,及order by子句,grop by 子句
數據控制語言(DCL):grant,revoke
事務控制語言(TCL):commit,savepoint,rollback
登陸不同:
MySQL是以庫的形式,每次操作是創建數據庫:create datebase 數據庫名
Oracle是以用戶的形式,每次操作是創建用戶:create user 用戶名
並且Oracle中用select * from dba_user來查詢所有用戶
而MySQL中用show database 來顯示所有的數據庫信息
創建數據庫
在MySQL:create table 表名(
列名 數據類型 [列級別約束 ] [默認值],
...
列名 數據類型[列級別的約束][默認值],
[表級別的約束 ]);
注意:像主鍵或者外鍵的設置等都是屬於表級別的約束
像列的值不能大於到少這就屬於是列級別的約束,表級別約束可以寫在這,執行也不會出錯,但有些設置不成功,類似外鍵的設置
例子:create table cource(sno int reference student(sno) )--這種是設置不成功的
應該這樣設置:在所有列定義完之后使用,constraint 約束名 foreign key 字段名 reference 表名(字段名)
但主鍵是可以設置成功的。
在Oracle中:create table 表名(
列名 數據類型,
...
列名 數據類型);--oracle中是不區分標記屬性和列級屬性的
自動增長
在MySQL中使用auto_increment自動增長序列默認從1開始,步長為1使用auto_increment=10可以改變自動增長的初始值
在orcle中使用創建序列的方式來實現
修改字段
在兩者均使用中modify來修該字段的屬性:alter table 表名 modify 字段名 數據類型
在MySQL中修改字段名是:alter table 表名 change 舊字段名 新字段名 新數據類型
在orcle中修改字段是:alter table 表名 rename column 舊字段名 to 新字段名
添加字段
在MySQL中添加字段是:alter table 表名 add 新字段名 數據類型
[約束條件] [first|after 已存在的字段]
--其中first或者after 已存在的字段是表示可以再指定的位置添加字段
同時在MySQL中還可以通過 alter table 表名 modify 字段1 數據類型 first|after 字段2
在oracle中添加字段是:alter table 表名 add 新字段 數據類型 [約束條件]
刪除字段
在MySQL中刪除字段是:alter table 表名 Drop 字段名
在orcle中刪除字段是:alter table 表名 drop column 字段名
刪除表的外鍵約束
在MySQL中:alter table 表名 drop foreign key 外鍵約束名
在orcle中:alter table 表名 drop constraint 外鍵約束名
注意:如果沒有沒有給外鍵約束命名那就通過查找系統的user_constraints表找到系統給其的默認外鍵約束名然后刪除
刪除表
在MySQL中:drop table [if exists] 表名 --若是沒有關聯的一些表,表名可以一次性寫上中間用','隔開
在Oracle中:drop table 表名
數據類型
整數類型:
在MySQL中:
類型名稱 | 說明 | 存儲要求 |
tinyint | 很小的整數 | 1個字節 |
smalint | 小整數 | 2個字節 |
mediuint | 中等大小的整數 | 3個字節 |
int | 普通大小的整數 | 4個字節 |
bigint | 大整數 | 8個字節 |
在orcle中只有整數類型
字符串類型:
在MySQL中:
類型名稱 | 說明 | 存儲要求 |
char(m) | 固定長度二進制 | m個字節 |
varchar(m) | 變長的二進制 | L+1個字節在此L<=M |
tinytext | 非常小的二進制 | L+1個字節在此L<2^8 |
text | 小的二進制字符串 | L+2個字節在此L<2^16 |
mediutext | 中等的二進制字符串 | L+3個字節在此L<2^24 |
longtext | 大的二進制 | L+4個字節在此L<2^32 |
enum | 枚舉類型只能有一個枚舉字符串 | 1或者2個字節取決於枚舉的數目 |
set | 一個設置,字符串對象可以有多個或者零個set成員 | 1,2,3,4或者8個字節,取決於集合成員的數量 |
在orcle中有:char varchr2 nchar nvarchar2
運算符
算術運算符:
在MySQL中有:= - * / % 其中在oracle中是沒有%求余的,在orcle中求余用的是mod()函數
注意在MySQL中可以直接使用=或者:=復制而在oracle中只能使用:=來賦值
比較運算符:
在MySQL中有:> < >= <= != <> <=> in between.. and is null is not null greatest least like regexp
在orcle中是沒有<=>安全等於運算符,安全等於運算符是用來判斷null值的,當兩個操作數均為null是返回是1,當只有一個是null是返回值為0而不為null
邏輯運算符:
在MySQL中有:not(!) and(&&) or(||) xor
在orcle中and是不可以用&&來代替的,or是不可以用||來代替因為在orcle中||表示字符串拼接符,另外在orcle中沒有xor邏輯異或的
位操作運算符
在MySQL中有:位與(&) 位或(|) 位非(~) 位異或(^) 左移(<<) 右移(>>) 六種
補充:在MySQL中的比較運算符中regexp的使用:
regexp在使用時常用一下幾種通配符:'^'表示以該字符后面字符開頭的的字符串例如:select * from student where sname regexp '^劉'
'$'表示以該字符后面字符結尾的字符串例如:select * from student where sanme regexp '$劉'
'.'匹配任一一個單字符select * from student where sname regexp '劉.玲'--匹配名字中包含劉和玲
且中間只有一個字符的記錄
'[...]'匹配方框內的任何字符例如[abc] [0-9] [a-z]
'*'匹配零個或者多個在它前面的字符而'.*'匹配任何數量的任何字符
'[^字符集合]'匹配不在指定字符結合的
在MySQL中正則的使用:
select * from student where name regexp '[a]+' --匹配出現字母a多次
'[:digit:]{2}' --匹配兩個數字連在一起
'[:alpha:]{3}' --匹配3個字母連在一起
'[:space:]{3}' --匹配3個空格
'[:lower:]{3}' --匹配3個小寫字母與一起
'[:alnum:]{3}' --匹配3個字母一起
表中數據的查詢
(1)在MySQL中:使用group by 進行分組之后可以再后面再加上with rollup用來統計數量
例如:select scode,count(*) from student group by scode with rollup;返回結果如下:
但是在orcle中是不可以用with rollup的
(2)分頁查詢:
在MySQL中可以使用:select * from student limit 2,3; --表示從第三行開始長度為三即2表示過2,3表示長度
注意:同時使用limit和order by 時limit必須為於后面
在orcle中使用rownum才可以實現分頁查詢:select * from(
select rownum m,empno,ename job from emp
where rownum<7
)where m>3;
向表中插入數據
在MySQL中:與orcle最大的不同是MySQL中可以一下插入多行數據,insert into 表名 values(值1),(值2)...(值n);
其它兩種方法和orcle中一樣。(通過查詢出已知表的數據插入和通過創建一個表后從已知表中插入)
刪除表中的數據
在MySQL中:delete from 表名 [where 條件]
在orcle中刪除可以有from也可以沒有from
存儲過程的創建及使用:
在MySQL中:
創建存儲過程為:
delimiter // --注意delimiter和//之間有空格,這句話的作用將MySQL的結束符設置成'//',為了避免與默認的sal語句結束符';'相沖突,
create procedure 存儲過程名字([參數 參數的數據類型])--注意不要忘了'()',參數列表可以沒有參數類型有三種in|out|inout
declare 變量名 變量的數據類型 [默認值] --用來定義變量
begin
sql代碼塊;
end //--之間有空格,這是存儲過程的結束
delimiter; --恢復MySQL中默認的結束符';',當然delimiter也可以指定其他符號做結束符
注意:在MySQL中變量的使用是:set 變量名=相應的變量的值; --這種方法在orcle中是不可以使用的
或者通過select...into 的方法賦值
例子:delimiter //
create procedure my()
begin
select * from students;
end //
delimter;
存儲過程的調用:
在MySQL中:call 存儲過程名([參數列表])
在orcle中:exec 存儲過程名([參數列表])
或者是:begin
存儲過程名();
end;
流程控制
在MySQL中:
(1)if語句: if 條件 then 條件為真時要處理的事務
[elseif 條件 then 條件為真時要處理的事務] --注意在orcle中此處為:[elsif 條件 then 條件為真時要處理的事務]
[else 要處理的事務]
end if;
(2)loop語句:[loop_lable:]loop
要執行的sql代碼
end loop[loop_lable];
例子:delclare id int default 0;
add_loop:loop --此處orcle中是:loop
set id=id+1;
if id>=10 then leave add_loop; --此處orcle中沒有leave,leave在此處的做用是退出循環
end if;
end loop add_loop; --此處orcle中為end loop;
leave語句:leave lable;用來退出任何被標注的流程控制構造
leave和循環或者begin end一起使用
iterate語句:iterate lable;用來將執行順序轉到語句段開頭處即在此循環
iterate只可以出現在loop,repeat,while語句內
(3)repeat語句:[repeat_lable]repeat
sql語句
until 條件
end repeat;
在orcle中沒有repeat帶條件的循環。
例子:declare id int default 0;
repeat
set id=id+1;
until id>10;
end repeat;