日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL语法详解

發(fā)布時間:2025/3/21 数据库 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL语法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 聲明
    • DB:
    • DBMS:
    • SQL:
  • 認識數(shù)據(jù)庫表
    • 創(chuàng)建第一個表
      • 顯示當前數(shù)據(jù)庫下有哪些表
      • 查看students2表的結(jié)構(gòu)
      • 查看建表語句
  • 數(shù)據(jù)庫表列類型
    • 整數(shù)類型
    • 浮點數(shù)類型
    • 字符串類型
    • 日期和時間類型
      • 注意:查看MYSQL支持的列類型
  • DML語句
    • 查詢表的數(shù)據(jù)
    • 添加數(shù)據(jù)insert
    • 修改數(shù)據(jù)update
    • 刪除數(shù)據(jù)delete
    • 總結(jié):
    • 過程代碼
  • DDL語句
    • 修改一個表
      • 增加一列
      • 修改一列
        • `change`
        • 執(zhí)行前
        • 執(zhí)行后
        • `modify`
        • 執(zhí)行前:
        • 執(zhí)行后:
      • 刪除一列
        • `drop`
        • 執(zhí)行前
        • 執(zhí)行后
      • 刪除表
        • 刪除成功
    • 過程代碼
  • 表的完整性約束
    • 簡介
      • 注意:
      • check替換 小范圍(1)

聲明

這里只是舉例說明常見用法,如果進階的話,還得需要自己去看MySQL手冊,進行自我提升,加油

sql,DB,DBMS分別是什么,他們之間的關(guān)系?

DB:

DataBase(數(shù)據(jù)庫,數(shù)據(jù)庫實際上在硬盤上以文件的形式存在)

DBMS:

DataBase Management System(數(shù)據(jù)庫管理系統(tǒng),常見的Oracle,Mysql,SQL Server,DB2,Sybase,informix,interbase,PostgreSql……)

SQL:

結(jié)構(gòu)化查詢語言,是一門標準通用語言。標準的sql適合所有的數(shù)據(jù)庫產(chǎn)品
SQL屬于高級語言,SQL語句在執(zhí)行的時候,實際上內(nèi)部也會先進行編譯,然后再執(zhí)行sql(sql的語句由DBMS完成)

DBMS負責執(zhí)行sql語句,通過執(zhí)行sql語句來操作DB當中的數(shù)據(jù)

DBMS–>(執(zhí)行)---->SQL—(操作)—>DB

認識數(shù)據(jù)庫表

表 是一種結(jié)構(gòu)化的文件,可以用來存儲特定類型的數(shù)據(jù),如:學生信息,課程信息,都可以放到表中,另外表部有特定的名稱,而且不能重復。表中有幾個概念:列,行,主鍵
列叫做字段,行叫做表中的記錄,每一個字段都有:字段名稱/字段數(shù)據(jù)類型/字段約束/字段長度

學號姓名性別年齡
17071401張三20
17071402李四18
17071403王五21
17071404趙六19

每個表都是由若干行和列組成的,在數(shù)據(jù)庫中表中的行被稱為記錄表中的列被稱為這些記錄的字段

記錄也被稱為一行數(shù)據(jù),是表里的一行。在關(guān)系型數(shù)據(jù)庫里,一行數(shù)據(jù)是指一條完整的記錄

字段是表里的一列,用于保存每條記錄的特定信息

創(chuàng)建第一個表

CREATE TABLE students2(sno INT(6),NAME VARCHAR(6),sex CHAR(1),enterdate DATE,classname VARCHAR(8),email VARCHAR(20) )

創(chuàng)建一個表名為students2的表,
注意點:

  • 字段是小括號,而不是大括號。
  • 不區(qū)分大小寫
  • 最后一個字段不跟逗號
  • 顯示當前數(shù)據(jù)庫下有哪些表

    SHOW TABLES;

    查看students2表的結(jié)構(gòu)

    DESC students2;

    查看建表語句

    show create table students2


    賦值粘貼出來后代碼為:

    CREATE TABLE `students2` (`sno` int(6) DEFAULT NULL,`name` varchar(6) DEFAULT NULL,`sex` char(1) DEFAULT NULL,`enterdate` date DEFAULT NULL,`classname` varchar(8) DEFAULT NULL,`email` varchar(20) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8

    數(shù)據(jù)庫表列類型

    整數(shù)類型


    MYSQL支持在選擇在該類型關(guān)鍵字后面的括號內(nèi)指定整數(shù)值的顯示寬度(例如,INT(4))。顯示寬度并不限制可以在列內(nèi)保存的值的范圍,也不限制超過列的指定寬度的值的顯示(可以自身突破括號內(nèi)所指定整數(shù)值的顯式寬度)
    主鍵自增:不使用序列,通過auto_increment,要求是整數(shù)類型,

    浮點數(shù)類型

    浮點數(shù)類型大小作用
    FLOAT4字節(jié)單精度浮點數(shù)值
    DOUBLE8字節(jié)雙精度浮點數(shù)值

    需要注意的是與整數(shù)類型不一樣的是,浮點數(shù)類型的寬度不會自動擴充,
    double(4,1)
    指的是 總的(小數(shù)+整數(shù))寬度為4,小數(shù)寬度為1

    字符串類型


    VARCHAR括號內(nèi)只需要指明最大長度即可,它是變長字符串,如果大小超過了65535的話:兩個選擇,如果是字符的話,使用TEXT,如果是照片或者視頻這些的話,那么選擇BLOB。

    如果需要使用以字節(jié)為單位的話,那么直接使用BINARY(M),VARBINARY(M)即可

    CHAR和VARCHAR類型相似,均用于存于較短的字符串,主要的不同之處在于存儲方式,CHAR類型長度固定,VARCHAR類型的長度可變。
    因為VARCHAR類型能夠根據(jù)字符串的實際長度來動態(tài)改變所占字節(jié)的大小,所以在不能明確該字段具體需要多少字符時推薦使用VARCHAR類型,這樣可以大大地節(jié)約磁盤空間,提高存儲效率
    CHAR和VARCHAR表示的是字符的個數(shù),而不是字節(jié)的個數(shù)

    日期和時間類型


    TIMESTEMP類型的數(shù)據(jù)指定方式與DATETIME基本相同,兩者不同之處在于以下幾點:

  • 數(shù)據(jù)的取值范圍不同,TIMESTEMP類型的取值范圍更小;
  • 如果我們對TIMESTAMP類型的字符安沒有明確賦值,或是被賦予了NULL值,MySQL會自動將該字段賦值為系統(tǒng)當前時間
  • TIMESTEMP類型 還可以使用CURRENT_TIMESTAMP來獲取系統(tǒng)當前時間
  • TIMESTEMP類型有一個很大的特點,那就是時間根據(jù)時區(qū)來顯示的。例如,在東八區(qū)插入的TIMESTEMP數(shù)據(jù)為2017-7- 11 16:43:25,在東七區(qū)顯示時,時間部分就變成了15:43:25,在東九區(qū)顯示時,實踐部分就變成了17:43:25
  • 注意:查看MYSQL支持的列類型

    mysql > help data types

    DML語句

    查詢表的數(shù)據(jù)

    SELECT * FROM students2;

    添加數(shù)據(jù)insert

    INSERT INTO students2 VALUES(1,"張三豐","男","1200-12-12","武當一班","zhangsanfeng@wudang.com");

    報錯了,因為email太長了,超過了20個字符,減少一下。

    INSERT INTO students2 VALUES(1,"張三豐","男","1200-12-12","武當一班","zhangsf@wd.com");



    成功了

    INSERT INTO students2 VALUES(2,"張翠山","男","1256/05/12","武當二班","zhangcsh@wd.com");



    我們再把上述語句再次執(zhí)行一遍,那么觀察一下是否能再次加入?


    現(xiàn)實情況中不被允許的,因為主鍵不能一樣(這里之所以能加入進去,是因為缺少約束
    而且這里性別也是可以任意的。。

    如果我們少賦值一個變量,讓它空著,它是否能通過呢?

    INSERT INTO students2 VALUES(2,"張翠山","男","1256/05/12","武當二班");


    報錯了,列的數(shù)量不匹配值的數(shù)量。那么我們把列規(guī)定一下,別用上全部的列再次嘗試:

    INSERT INTO students2(sno,NAME,sex,classname) VALUES(3,"張無忌","男","武當三班");


    如果enterdate(時間)需要時剛剛加入,那么我們應該怎么表示呢?

    INSERT INTO students2(sno,NAME,sex,enterdate,classname) VALUES(4,"張小忌","男",SYSDATE(),"武當三班");


    加入時間為:2021-3-16

    另外一種insert方式:

    INSERT INTO students2 SET sno=5,NAME="宋青書",classname="已退學";

    修改數(shù)據(jù)update

    update students2 set enterdate="1300-12-12",classname="武當實驗班",email="zhangwu@wd.com" where sno=3


    那能不能修改為null呢?我們來試試

    刪除數(shù)據(jù)delete

    delete students2 where sno>=4;


    嗯哼?報錯了?出現(xiàn)了SQL語法錯誤,這里切記,MySQL的delete后面跟from

    總結(jié):

  • CHAR VARCHAR是字符的個數(shù),不是字節(jié)的個數(shù),可以使用binary,varbinary表示定長和不定長的字節(jié)個數(shù)
  • int 寬度是顯示寬度,如果超過,可以自動增大寬度,int底層都是4個字節(jié)
  • 如果寫入當前的時間,now(),sysdate(),CURRENT_DATE()
  • 時間的方式多樣 “1256-12-13” “1256/12/13” “1256.12.13”
  • 字符串不區(qū)分單引號和雙引號
  • delete語句中from不可少
  • 過程代碼

    CREATE TABLE students2(sno INT(6),NAME VARCHAR(6),sex CHAR(1),enterdate DATE,classname VARCHAR(8),email VARCHAR(20) ) SELECT * FROM students2; INSERT INTO students2 VALUES(1,"張三豐","男","1200-12-12","武當一班","zhangsf@wd.com");INSERT INTO students2 VALUES(2,"張翠山","男","1256/05/12","武當二班","zhangcsh@wd.com"); INSERT INTO students2 VALUES(2,"張翠山","男","1256/05/12","武當二班","zhangcsh@wd.com"); INSERT INTO students2(sno,NAME,sex,enterdate,classname) VALUES(4,"張小忌","男",SYSDATE(),"武當三班");INSERT INTO students2 SET sno=5,NAME="宋青書",classname="已退學"; UPDATE students2 SET enterdate="1300-12-12",classname="武當實驗班",email="zhangwu@wd.com" WHERE sno=3;UPDATE students2 SET enterdate=NULL,classname=NULL WHERE sno=4; DELETE FROM students2 WHERE sno>=4;

    DDL語句

    create alter drop

    修改一個表

    增加一列

    alter table students2 add

    增加一列實現(xiàn)代碼(不寫位置時默認加在最后一列):

    ALTER TABLE students2 ADD score DOUBLE(4,1);


    然后再次執(zhí)行如下代碼時:

    update students2 set score=1234.5 where sno=1; UPDATE students2 SET score=1234 WHERE sno=1;


    表示越界了,當改成如下時,

    UPDATE students2 SET score=234.1 WHERE sno=1;


    成功了,這也就是體現(xiàn)了DOUBLE(4,1)的

    增加一列實現(xiàn)代碼(加在第一列):

    ALTER TABLE students2 ADD score DOUBLE(4,1) first;


    加在某一列的前列(某一列的前列可以轉(zhuǎn)化為某一列的后面)

    ALTER TABLE students2 ADD score DOUBLE(4,1) AFTER classname;


    它直接用了一個after,那可不可以用before呢?這得看文檔

    觀察后,找到了first,找到了after,但是沒有before,那么就不能用嘍

    修改一列


    修改的話,有change和modify,區(qū)別的是:

  • modify只修改列的元素類型,并不修改名字
  • change可以同時修改列的名字,還可以同時修改列的元素類型
  • alter table students2 modefy alter table students2 change

    change

    alter table students2 change score credit double(4,1)

    執(zhí)行前

    執(zhí)行后


    score是原來的列名,credit是新的列名,double(4,1)是列的新類型

    modify

    alter table students2 modify credit int(4)

    執(zhí)行前:

    執(zhí)行后:

    刪除一列

    alter table students2 drop

    drop

    alter table students2 drop column credit;

    column是可選項,可填可不填。

    執(zhí)行前

    執(zhí)行后

    刪除表

    drop table students2;

    刪除成功

    過程代碼

    ALTER TABLE students2 ADD score DOUBLE(4,1); SELECT * FROM students2; UPDATE students2 SET score=234.1 WHERE sno=1;ALTER TABLE students2 DROP credit;ALTER TABLE students2 ADD score DOUBLE(4,1) AFTER classname; ALTER TABLE students2 ADD score DOUBLE(4,1) FIRST; ALTER TABLE students2 CHANGE score credit DOUBLE(4,1); DESC students2; ALTER TABLE students2 MODIFY credit INT(4);ALTER TABLE students2 DROP COLUMN credit;DROP TABLE students2;

    表的完整性約束

    簡介

    為防止不符合規(guī)范的數(shù)據(jù)存入數(shù)據(jù)庫,在用戶對數(shù)據(jù)進行插入,修改,刪除等操作時,MySQL提供了一種進制來檢查數(shù)據(jù)庫中的數(shù)據(jù)是否滿足規(guī)定的條件,以保證數(shù)據(jù)庫中的數(shù)據(jù)的準確性和一致性,這種機制就是完整性約束

    MySQL中主要支持六種完整性約束,如下表所示,其中check約束是MySQL8中提供的支持

    約束條件約束描述
    PRIMARY主鍵約束,約束字段的值可唯一地標識對應的記錄
    NOT NULL非空約束,約束的字段的值不能為空
    UNIQUE唯一約束,約束的字段是唯一的
    CHECK檢查約束,限制某個字段的取值范圍
    DEFAULT默認值約束,約束字段的默認值
    AUTO_INCREMENT自動增加約束,約束字段的值自動增加
    FOREIGN KEY外外鍵約束,約束表與表之間的關(guān)系

    一般我們不會把DEFAULT和AUTO_INCREMENT視為約束,而是看做一種自身特征

    帶有約束的建表語句:

    CREATE TABLE students2(sno INT(6) PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(6) NOT NULL,sex CHAR(1) CHECK(sex='男' || sex='女'),age INT(3) CHECK(age<=80 AND age>=6),enterdate DATE,classname VARCHAR(10),email VARCHAR(20) UNIQUE )


    本來想在 sex CHAR(1) CHECK(sex='男' || sex='女')后加一個default ‘男’ ,卻報錯了。沒法改,我只能去掉。

    語法報錯,版本不合??
    執(zhí)行下方語句代碼時:

    INSERT INTO students2 VALUE(NULL,NULL,NULL,100,'1999-12-23','Java001','zhangsan@sxt.com');


    報錯,Column 'NAME' cannot be null,約束起了作用


    emmmm......不好意思,我的MYSQL版本有點低,不支持check。。所以示范不出來。。等我換個MySQL。。

    換成MYSQL8.0以上試驗后:

    INSERT INTO students2 VALUES(NULL,'小','小',100,'1999-12-23','Java001','zhangsan@sxt');


    執(zhí)行上方語句居然成功了很明顯,因為,不同于SQL,在MYSQL中,CHECK只是一段可調(diào)用但無意義的子句。MySQL會直接忽略。CHECK語句在聲明中并未起到作用。跟MySQL版本無關(guān)。

    注意:

    CHECK子句會被分析,但是會被忽略。
    請參見“CREATE TABLE語法”:接受這些子句但又忽略子句的原因是為了提高兼容性,以便更容易地從其它SQL服務器中導入代碼,并運行應用程序,創(chuàng)建帶參考數(shù)據(jù)的表。(那么check約束就直接放棄了),那么我們可以采用其它功能語句來嘗試替換check。

    check替換 小范圍(1)

    sex CHAR(1) CHECK(sex='男' || sex='女'),

    替換語句如下:

    sex ENUM('男','女'),

    即創(chuàng)建表格代碼如下:

    CREATE TABLE students2(sno INT(6) PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(6) NOT NULL,sex ENUM('男','女'),age INT(3) CHECK (age<80 AND age>6),enterdate DATE,classname VARCHAR(10),email VARCHAR(20) UNIQUE )

    然后執(zhí)行下方語句后:

    INSERT INTO students2 VALUES(NULL,'小','小',100,'1999-12-23','Java001','zhangsan@sxt');

    報錯了,哈哈,成功替換

    總結(jié)

    以上是生活随笔為你收集整理的SQL语法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 综合视频一区二区 | 午夜天堂在线观看 | 国产视频一区二区三区四区五区 | 美色视频 | 成人av色| 精品久久久久久无码中文野结衣 | 国产婷婷在线观看 | 小柔的淫辱日记(1~7) | 激情天堂网 | www.黄色片网站 | 国产福利免费在线观看 | 久草资源| 国产sm网站| 欧美bdsm调教视频 | 女色婷婷| 国产高清精品一区 | 日本人妻丰满熟妇久久久久久 | 少妇太紧太爽又黄又硬又爽小说 | 亚洲午夜不卡 | 日韩欧美一级二级 | 夜夜夜网 | 亚洲精品国产精品乱码不99按摩 | 黄色网址你懂得 | 91亚洲精品一区二区乱码 | 精品亚洲一区二区三区四区五区高 | 中文字幕视频免费观看 | 久久在线免费视频 | 日韩伦理大全 | 少妇15p| 精品无码人妻一区二区三区 | 夜间福利视频 | 人妻一区二区三区四区 | 一区二区三区在线观看 | 夜夜操av| 国产情侣激情自拍 | www..com色| 精品黑人一区二区三区观看时间 | 欧美在线视频免费播放 | 欧美变态另类刺激 | 啪啪网站免费 | 日韩精品人妻无码一本 | 欧美日韩人妻精品一区二区 | 亚洲精品免费视频 | 人人舔人人爽 | 超碰激情在线 | 最好看的2018中文2019 | www.国产.com | 欧美性潮喷xxxxx免费视频看 | 精品中文字幕在线播放 | a级一级片 | a天堂资源在线 | 最近最新中文字幕 | 免费黄色三级 | 国模一区二区三区 | 欧美日本一区二区三区 | 成年人精品 | 久热在线 | 先锋av网| 成人乱人乱一区二区三区一级视频 | 日日日日干 | 亚洲午夜一区二区 | 日韩不卡一区二区 | 嫩草国产在线 | 欧美一区二区三区系列电影 | 怡红院成永久免费人全部视频 | 老太婆av | 久久成人激情 | 毛片无遮挡高清免费观看 | 日本精品黄| 欧美日韩在线a | 日本欧美久久久 | 成人免费视频国产免费 | 亚洲依依 | 请用你的手指扰乱我吧 | 色哟哟免费在线观看 | 超碰成人免费电影 | 精品人妻一区二区三区浪潮在线 | 国产精品久久久久久久久久久不卡 | 91色综合 | 色妻av| 天天草夜夜操 | 国产精品久草 | 亚洲人高潮女人毛茸茸 | 青青草手机视频 | 波多野结衣一区二区三区免费视频 | たちの熟人妻av一区二区 | 97精品国产97久久久久久粉红 | 四虎国产精品永久免费观看视频 | 91吃瓜今日吃瓜入口 | 欧美视频一区二区三区在线观看 | 成人免费性视频 | 一级免费a | 手机在线观看av网站 | 二区国产| 天天干天天操天天干 | 一级片视频网站 | 91在线高清 | 精品国产乱码久久久久久牛牛 | 亚洲大尺度av |