與MSSQL對比學習MYSQL的心得(一)--基本文法_Mysql

來源:互聯網
上載者:User

這一期主要是學習MYSQL的基本文法,陸續還會有續期的文章,敬請期待

文法的差異

我這裡主要說文法的不同

1、預設約束

區別:mysql裡面DEFAULT關鍵字後面是不用加括弧的

複製代碼 代碼如下:

--sqlserver
CREATE TABLE emp
(
id INT DEFAULT(12)
)
--mysql
CREATE TABLE emp
(
id INT DEFAULT 12
)

2、設定自增列

區別很大,不過好像mysql的自增列不能設定步長的

MYSQL的自增列一定也要是主鍵列,不是主鍵列會報錯,設定種子值要在表的後面設定

複製代碼 代碼如下:

--設定自增列
--sqlserver
CREATE TABLE emp
    (
      id INT IDENTITY(1, 1)
    )

--mysql
-- 設定自增ID從N開始
CREATE TABLE emp (
ID INT  PRIMARY KEY AUTO_INCREMENT
) AUTO_INCREMENT = 100 ; --(設定自增ID從100開始)

順便說一下MYSQL擷取當前表的自增值的四種方法

1、 SELECT MAX(id) FROM person

2、 SELECT LAST_INSERT_ID()  函數

LAST_INSERT_ID 是與表無關的,不建議使用

3、 SELECT @@identity 

@@identity 是表示的是最近一次向具有identity屬性(即自增列)的表插入資料時對應的自增列的值,是系統定義的全域變數。

一般系統定義的全域變數都是以@@開頭,使用者自訂變數以@開頭。

使用@@identity的前提是在進行insert操作後,執行select @@identity的時候串連沒有關閉,否則得到的將是NULL值。

4.  SHOW TABLE STATUS LIKE 'person'

建議使用這一種方法

得出的結果裡邊對應表名記錄中有個Auto_increment欄位,裡邊有下一個自增ID的數值就是當前該表的最大自增ID.

3、查看錶定義

SQLSERVER

EXEC sp_help 'emp'

MYSQL

DESC emp

4、修改表名

修改表名也有差異,將表emp改為emp2

複製代碼 代碼如下:

--sqlserver
EXEC sys.[sp_rename] @objname = N'emp', -- nvarchar(1035)
    @newname = 'emp2' -- sysname
--mysql
ALTER TABLE emp RENAME emp2

5、修改欄位的資料類型

將id欄位的int類型改為bigint

複製代碼 代碼如下:

--sqlserver
ALTER TABLE [dbo].[emp2] ALTER COLUMN [ID] BIGINT

--mysql
ALTER TABLE emp2 MODIFY id BIGINT

6、修改欄位名

MYSQL裡修改欄位名的時候需要加上欄位的資料類型否則會報錯,而CHANGE也可以只修改資料類型,實現和MODIFY同樣的效果

方法是將SQL語句中的“新欄位名”和“舊欄位名”設定為相同的名稱,只改變“資料類型”

改變資料類型,例如剛才那個例子,將id列改為bigint資料類型

ALTER TABLE emp2 CHANGE id id BIGINT

修改欄位名

複製代碼 代碼如下:

--sqlserver
EXEC sys.[sp_rename] @objname = N'emp2.id', -- nvarchar(1035)
    @newname = 'iid', -- sysname
    @objtype = 'column' -- varchar(13)

--mysql
ALTER TABLE emp2 CHANGE id iid BIGINT

7、添加欄位

 添加欄位的文法差不多,但是MYSQL裡可以使用FIRST和AFTER關鍵字指定添加的欄位的位置

複製代碼 代碼如下:

--sqlserver
ALTER TABLE [dbo].[emp2] ADD NAME NVARCHAR(200) NULL

--mysql
ALTER TABLE emp2 ADD NAME NVARCHAR(200)  NULL

8、刪除欄位

MYSQL刪除欄位不需要添加COLUMN關鍵字的

複製代碼 代碼如下:

--sqlserver
ALTER TABLE [dbo].[emp2] DROP COLUMN NAME

--mysql
ALTER TABLE emp2 DROP NAME

9、刪除外鍵約束

MYSQL跟SQLSERVER刪除約束的方法也有很大的區別

在SQLSERVER裡面,無論是唯一約束,check約束還是外鍵約束都可以使用下面的SQL語句來刪除掉

ALTER TABLE 表名 DROP CONSTRAINT 約束名
但是MYSQL裡面,如果是外鍵約束,需要使用 DROP FOREIGN KEY,如果是主鍵約束需要使用DROP PRIMARY KEY,有點麻煩

複製代碼 代碼如下:

--sqlserver
ALTER TABLE dbo.emp2 DROP CONSTRAINT fk_emp_dept

--mysql
--刪除外鍵約束
ALTER TABLE emp2 DROP FOREIGN KEY fk_emp_dept
--刪除主鍵約束
ALTER TABLE emp2 DROP PRIMARY KEY pk_emp_dept

10、刪除表

刪除表的文法兩個都是一樣的

複製代碼 代碼如下:

--sqlserver
DROP TABLE [dbo].[emp2]

--mysql
DROP TABLE emp2

但是如果要同時刪除多個表或者刪除之前要先判斷一下,MYSQL就方便多了

複製代碼 代碼如下:

--sqlserver
IF (OBJECT_ID('dbo.emp2') IS NOT NULL )
DROP TABLE [dbo].[emp2]

--mysql
DROP TABLE IF EXISTS emp1 ,emp2

SQLSERVER需要一張一張表判斷,然後一張一張表drop

MYSQL就不一樣,文法非常簡潔: DROP TABLE IF EXISTS emp1 ,emp2

總結

這篇文章只是簡單介紹了一下MYSQL跟SQLSERVER的文法方面的差異

以後會寫更多關於MYSQL跟SQLERVER差異的文章,和我這段時間使用MYSQL期間的一些心得,大家敬請期待o(∩_∩)o

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.