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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Mysql数据库和数据表的创建和信息更改的常用指令

發(fā)布時(shí)間:2023/12/20 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql数据库和数据表的创建和信息更改的常用指令 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 數(shù)據(jù)庫(kù)和數(shù)據(jù)表的創(chuàng)建和信息更改
      • 后續(xù)小實(shí)驗(yàn)做準(zhǔn)備
      • 一. 關(guān)于數(shù)據(jù)庫(kù)和數(shù)據(jù)表的其它操作
        • 1)數(shù)據(jù)庫(kù)
          • ①創(chuàng)建數(shù)據(jù)庫(kù)
          • ②顯示目前所有的數(shù)據(jù)庫(kù)
          • ③數(shù)據(jù)庫(kù)重命名
            • 2.1 先創(chuàng)建新庫(kù):
            • 2.2 使用`RENAME TABLE` 命令修改表名,將表移動(dòng)到新的庫(kù)里:
            • 2.3 完成后刪除舊庫(kù):
          • ④更改當(dāng)前使用的數(shù)據(jù)庫(kù)
          • ⑤更改當(dāng)前使用的數(shù)據(jù)庫(kù)
        • 2)數(shù)據(jù)表
          • ①數(shù)據(jù)表的創(chuàng)建
            • 字段數(shù)據(jù)類型
            • 字段設(shè)置
          • ②數(shù)據(jù)表信息修改
            • a. 修改表名
            • b. 增加或刪除或修改列
            • d. 獲取表的基本信息
          • ③數(shù)據(jù)表信息修改

數(shù)據(jù)庫(kù)和數(shù)據(jù)表的創(chuàng)建和信息更改

后續(xù)小實(shí)驗(yàn)做準(zhǔn)備

  • 創(chuàng)建數(shù)據(jù)庫(kù)

    語(yǔ)句:

    create database experiment;
  • 通過(guò):show databases;查看創(chuàng)建結(jié)果

  • 創(chuàng)建基本表

    創(chuàng)建基本表時(shí),為不同的列選擇合適的數(shù)據(jù)類型,正確創(chuàng)建表級(jí)和列級(jí)完整性約束,如列值是否允許為空、主碼和外碼等。

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

    • student表

      create table student (sno char(9) primary key, sname char(20) unique, ssex char(2), sage smallint, sdept char(20));
    • course表

      create table course (sno char(4) primary key, cname char(40) not null, cpno char(4), ccredit smallint, foreign key(cpno) references course(cno));
    • SC表

      create table SC (Sno char(9), Cno char(4), Grade smallint, primary key(Sno,Cno), foreign key(Sno) references Student(Sno), foreign key(Cno) references Course(Cno));

    查看創(chuàng)建表的就結(jié)果

    上面創(chuàng)建SC的時(shí)候?qū)傩允谴髮戦_頭,二student表和cource表中的全是小寫,創(chuàng)建成功,說(shuō)明win10下mysql不區(qū)分大小寫

  • 向基本表中加入數(shù)據(jù)

    student表數(shù)據(jù)隨便輸,course表中有坑,因?yàn)閏ourse表的參照表是自身,所以要先輸入需要的先行課程,CS表依賴student表和course表。最后輸入。

    • student

    • course表

      向輸入cpno為null的元組,再選擇cpno為已經(jīng)輸入元組cno值相同的元組輸入。不然會(huì)出現(xiàn)參照不完整的報(bào)錯(cuò)。

    • CS表

      這個(gè)表的數(shù)據(jù)是查看cource表和student表中的數(shù)據(jù)

  • 一. 關(guān)于數(shù)據(jù)庫(kù)和數(shù)據(jù)表的其它操作

    1)數(shù)據(jù)庫(kù)

    ①創(chuàng)建數(shù)據(jù)庫(kù)

    create database 數(shù)據(jù)庫(kù)名;

    ②顯示目前所有的數(shù)據(jù)庫(kù)

    show databases

    ③數(shù)據(jù)庫(kù)重命名

    rename database olddbname to newdbname

    MySQL 5.1.23 之前的舊版本中,我們可以使用 RENAME DATABASE來(lái)重命名數(shù)據(jù)庫(kù),但此后版本,因?yàn)榘踩紤],刪掉了這一條命令。

    大于這個(gè)版本修改數(shù)據(jù)庫(kù)名字基本上是不行的,采用新建數(shù)據(jù)庫(kù),然后進(jìn)行數(shù)據(jù)遷移。

    2.1 先創(chuàng)建新庫(kù):
    create database new_db;
    2.2 使用RENAME TABLE 命令修改表名,將表移動(dòng)到新的庫(kù)里:
    rename table old_db.tb to new_db.tb;
    2.3 完成后刪除舊庫(kù):
    drop database old_db;

    上面的方法是通過(guò)重命名表的方式實(shí)現(xiàn)數(shù)據(jù)遷移。

    也可以使用dump工具導(dǎo)出數(shù)據(jù)庫(kù)的sql文件,更改數(shù)據(jù)庫(kù)sql文件中創(chuàng)建數(shù)據(jù)庫(kù)的名字。再用source指令引入sql文件實(shí)現(xiàn)數(shù)據(jù)庫(kù)的數(shù)據(jù)遷移。

    ④更改當(dāng)前使用的數(shù)據(jù)庫(kù)

    use 數(shù)據(jù)庫(kù)名字

    ⑤更改當(dāng)前使用的數(shù)據(jù)庫(kù)

    drop database 數(shù)據(jù)庫(kù)名

    2)數(shù)據(jù)表

    ①數(shù)據(jù)表的創(chuàng)建
    create table <表名> (<列名><數(shù)據(jù)類型>[列級(jí)約束條件],<列名><數(shù)據(jù)類型>[列級(jí)約束條件], [表級(jí)約束條件])

    列級(jí)約束:只能應(yīng)用于一列上。

    表級(jí)約束 :可以應(yīng)用于一列上,也可以應(yīng)用在一個(gè)表中的多個(gè)列上。

    字段數(shù)據(jù)類型


    字段設(shè)置

    主鍵: 被設(shè)置為主鍵的列,值不能為空,且列中不能出現(xiàn)重復(fù)的值

    外鍵: 被設(shè)置成外碼的列,值只能是參考列值中的數(shù)據(jù),可以為空(在沒(méi)有設(shè)置該列只非空的情況下)

    這里不說(shuō)那些上面約束條件,太抽象,只說(shuō)怎么設(shè)置列的屬性。

    • 列值不能為空

      <列名><屬性值> not null

    • 設(shè)置列為主鍵

      主鍵不能為空,被設(shè)置為主鍵的列值不能重復(fù)

      • 只有一個(gè)主鍵是可以直接

        <列名><屬性值> primary key標(biāo)識(shí)主鍵

        course中的sno為主鍵

      • 多個(gè)主鍵時(shí)需要在創(chuàng)建表的末尾添加主鍵信息

        這里SC表中Sno和Cno為主鍵

      • 創(chuàng)建表后追加主鍵

        alter TABLE <表名> MODIFY <列名> <列的數(shù)據(jù)類型> PRIMARY KEY
    • 設(shè)置為外鍵

      外鍵必須是參照表的某個(gè)key,可以說(shuō)主鍵(primary key)也可以是唯一鍵(unique key)

      有外鍵時(shí)創(chuàng)建數(shù)據(jù)表,必須要先創(chuàng)建出被參考的表,不然會(huì)報(bào)錯(cuò)

      • 在創(chuàng)建時(shí)設(shè)置

        FOREIGN KEY (<外鍵>) REFERENCES <被參考的數(shù)據(jù)表>(<被參考的列>)

        這里外鍵是cpno,參考的列的course表中的cno列,cpno列的值只能是cno列中出現(xiàn)過(guò)的值,不然會(huì)報(bào)錯(cuò)

        多個(gè)外鍵 :

      • 在創(chuàng)建表后追加

        -- 已存在表增加外鍵 ALTER TABLE Products ADD FOREIGN KEY products_vendors_fk_1 (vend_id) REFERENCES Vendors (vend_id);
      • 外鍵的約束模式

        • RESTRICT

          嚴(yán)格模式(默認(rèn)的),**父表不能刪除或者更新一個(gè)已經(jīng)被子表引用的記錄數(shù)據(jù)(**外鍵對(duì)應(yīng)的父表被引用的字段,其他字段可以更改)。即,當(dāng)父表字段數(shù)據(jù)已經(jīng)被子表引用時(shí),不能再刪除或者更新父表被引用的字段數(shù)據(jù)。

        • Cascade

          級(jí)聯(lián)模式;針對(duì)父表的操作,對(duì)應(yīng)子表關(guān)聯(lián)的數(shù)據(jù)也跟著被操作。

          • 更新父表被引用的字段,如果該數(shù)據(jù)被子表外鍵使用,則子表外鍵隨之更新;
          • 刪除父表被引用的字段記錄,如果該數(shù)據(jù)被子表外鍵使用,子表對(duì)應(yīng)外鍵所屬記錄隨之刪除。
        • Set null

          置空模式,父表字段操作之后,如果該數(shù)據(jù)被子表外鍵使用,子表對(duì)應(yīng)的外鍵字段被置空。

          外鍵置空的前提是對(duì)應(yīng)字段允許為空,否則外鍵創(chuàng)建不成功。

        刪除的時(shí)候子表置空,更新的時(shí)候子表級(jí)聯(lián):

    • 自動(dòng)增長(zhǎng)
      自增列只能有一個(gè),并且必須設(shè)置為key

      如果沒(méi)有指定就取當(dāng)前id最大值+1,如果指定了就直接插入或者更新數(shù)據(jù)子

      自增值在數(shù)據(jù)庫(kù)操作失敗后也會(huì)發(fā)生改變,從而影響后續(xù)自增列的值

      <列名><屬性值> auto_increment

      • 如果有多個(gè)自增列會(huì)報(bào)錯(cuò)
      Incorrect table definition; there can be only one auto column and it must be defined as a key 表定義不正確;只能有一個(gè)自動(dòng)列,必須將其定義為鍵

      在IDEA可視化工具中創(chuàng)建多個(gè)自增列出現(xiàn)報(bào)錯(cuò)

      • 自增鍵自增詳解

        自增值修改機(jī)制

        假設(shè)數(shù)據(jù)表當(dāng)前的自增值是 Y,在插入一行數(shù)據(jù)的時(shí)候,數(shù)據(jù)庫(kù)的執(zhí)行情況如下:

        • 如果插入數(shù)據(jù)時(shí)自增字段指定了具體的值 X,就直接使用值 X 填到該自增字段,該表的自增值是否修改的判斷如下:
          • 若 X<Y,則該表的自增值不變;
          • 若 X≥Y,則需要修改該表的自增值為 X + auto_increment_increment(步長(zhǎng))。
        • 如果插入數(shù)據(jù)時(shí)自增字段未指定值或指定為 0、null,則把該表當(dāng)前的自增值(即 Y)填到自增字段,并修改該表的自增值為 Y + auto_increment_increment(步長(zhǎng))。

        實(shí)際上,MySQL 維護(hù)著兩個(gè)系統(tǒng)參數(shù):auto_increment_offset 和 auto_increment_increment,分別用來(lái)表示自增的初始值和步長(zhǎng),默認(rèn)值都為 1。MySQL 修改數(shù)據(jù)表自增值是從 auto_increment_offset 開始,以 auto_increment_increment 為步長(zhǎng),持續(xù)疊加,直到找到第一個(gè)大于 X 的值,作為新的自增值。

        自增值的修改時(shí)機(jī)

        **數(shù)據(jù)表的自增值修改實(shí)際上是在真正插入數(shù)據(jù)的操作之前。如果沒(méi)有插入成功,MySQL 也不會(huì)將自增值再改回去。也就是說(shuō),自增主鍵有可能會(huì)出現(xiàn)不連續(xù)的情況。**比如在插入數(shù)據(jù)時(shí)出錯(cuò)(如違反唯一鍵約束),或者事務(wù)回滾的情況下,都會(huì)導(dǎo)致自增主鍵不連續(xù)。

      • 設(shè)置自增鍵的初始值

      • 自增列的自增步長(zhǎng)是可以改變的, 不常用所以不贅述了。

    • 列中的值唯一

      一張表往往有很多字段需要唯一性,數(shù)據(jù)不能重復(fù);但是一張表只能有一個(gè)字段為主鍵,那么唯一鍵(unique key),就可以解決表中有多個(gè)字段需要唯一性約束的問(wèn)題。

      使用unique key標(biāo)識(shí)

    • 插入列數(shù)據(jù)前進(jìn)行條件檢查
      check(列值需要符合的條件),符和條件時(shí)插入數(shù)據(jù)。當(dāng)插入的數(shù)據(jù)符合列的條件時(shí)插入數(shù)據(jù)

    ②數(shù)據(jù)表信息修改
    a. 修改表名

    ? alter table 表名 rename 新表名

    b. 增加或刪除或修改列
    • 增加

      ALTER TABLE table ADD [COLUMN] column_name_1 column_1_definition [FIRST|AFTER existing_column], ADD [COLUMN] column_name_2 column_2_definition [FIRST|AFTER existing_column], ···;
    • 刪除

      ALTER TABLE <表名> DROP COLUMN column_1, DROP COLUMN column_2,
    • 修改列

      • 修改列名
      ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段類型 約束條件
      • 還可以設(shè)置列的默認(rèn)值,是否是主鍵,唯一鍵,外碼等
    d. 獲取表的基本信息

    show columns from <表名>

    ③數(shù)據(jù)表信息修改

    drop table 表名

    總結(jié)

    以上是生活随笔為你收集整理的Mysql数据库和数据表的创建和信息更改的常用指令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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