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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

22-05-10 西安 mysql基础篇(02) 修改表 、修改列、commit和rollback、表数据之增删改 DML 、列级约束、表级约束

發(fā)布時(shí)間:2024/1/18 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 22-05-10 西安 mysql基础篇(02) 修改表 、修改列、commit和rollback、表数据之增删改 DML 、列级约束、表级约束 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們的情緒背后藏著動(dòng)機(jī),動(dòng)機(jī)總是正面的,因?yàn)橐庾R(shí)從來不會(huì)傷害自己,只是誤以為某些行為可以滿足自己的這份動(dòng)機(jī)。


結(jié)果去重?distinct

select distinct 字段列表 from 表名稱 【where 條件】;?

創(chuàng)建表和修改表

創(chuàng)建表create?table

要自增的列必須是主鍵

1.?新建表

# 新建表 CREATE TABLE dept1(`id` INT(7),`name` VARCHAR(25) -- name是關(guān)鍵字可以用`` );

2. 基于現(xiàn)有表創(chuàng)建新表? ?as關(guān)鍵字

# 基于現(xiàn)有表創(chuàng)建新表(相當(dāng)于表的復(fù)制) CREATE TABLE dept2 AS SELECT * FROM `departments`;

第2種創(chuàng)建表的方式,不想要表數(shù)據(jù)時(shí),只要表結(jié)構(gòu) 可以加一個(gè) where 1=2;


修改表alter table

1.添加列,有無默認(rèn)值 add
2.修改列的類型和長度。modify
3.重命名列 ?change [也可以修改列的類型]
4.刪除列,drop?
5.重命名表 rename

-- 修改表 ALTER TABLE -- 修改表emp5-- 添加列 可以有默認(rèn)值 DEFAULT 0; ALTER TABLE emp5 ADD test_column VARCHAR(2);-- 修改列 修改列的類型和長度 ALTER TABLE emp5 MODIFY gender VARCHAR(20);-- 重命名列 重命名的同時(shí)也可以修改列的類型和長度 ALTER TABLE emp5 CHANGE gender gender222 VARCHAR(2);-- 刪除列 ALTER TABLE emp5 DROP COLUMN gender222;-- 重命名表 ALTER TABLE emp5 RENAME empy6;

清空和刪除表

清空表 truncate 【表結(jié)構(gòu)還存在,ddl,這個(gè)刪除數(shù)據(jù)刪了就徹底完蛋,不可以回滾】

truncate清空表原理:會(huì)刪除原來的表,再重新創(chuàng)建一張表

刪除表 drop?DROP則刪除整個(gè)表(結(jié)構(gòu)和數(shù)據(jù))
delete from表名? ?刪除表中數(shù)據(jù)[可以用rollback回滾表中數(shù)據(jù)]

-- 清空表 TRUNCATE 【表結(jié)構(gòu)還存在,ddl,刪了就徹底完蛋,不可以回滾】 TRUNCATE TABLE empy6;-- 刪除表 DROP 【表數(shù)據(jù)和表結(jié)構(gòu)都會(huì)不存在】 DROP TABLE emp5;-- 刪除表 刪除表中數(shù)據(jù),表結(jié)構(gòu)還有,可以用rollback回滾表中數(shù)據(jù) DELETE FROM emp5;

提交和回滾

  • commit 提交,對(duì)數(shù)據(jù)的操作永久生效
  • rollback 回滾,本次提交后就沒辦法回滾了,默認(rèn)回滾到上一次commit。DML操作了但是沒提交可以回滾

事務(wù):一個(gè)commit和一個(gè)rollback的一個(gè)或多個(gè)dml稱為一個(gè)事務(wù)

MySQL默認(rèn)DML語句自動(dòng)提交。

關(guān)閉自動(dòng)提交 SET AUTOCOMMIT = FALSE;

ddl不能回滾,即每一個(gè)ddl是一個(gè)事務(wù)。dml可以回滾【如上面提到的2種刪除表數(shù)據(jù)的區(qū)別】

事務(wù)詳細(xì)參考:

22-05-13 西安 jdbc(03) 事務(wù)的ACID屬性、并發(fā)問題、隔離級(jí)別;事務(wù)傳播行為、本地事務(wù)_£小羽毛的博客-CSDN博客


數(shù)據(jù)處理之增刪改?DML?

向表中插入空值
隱式方式: 在列名表中省略該列的值
顯示方式: 在VALUES 子句中指定空值

1、添加一條記錄到表"anchor"

#值列表中的值的順序、類型、個(gè)數(shù)必須與表結(jié)構(gòu)一一對(duì)應(yīng) INSERT INTO anchor VALUES (NULL,'騷白','斗魚'); #也可以這樣寫 INSERT INTO anchor (`name`,plat) VALUES ('純皇','斗魚');

2、添加多條記錄到表"anchor"

每一個(gè)值列表直接使用逗號(hào)分隔

#值列表中的值的順序、類型、個(gè)數(shù)必須與(字段列表)一一對(duì)應(yīng) INSERT INTO anchor (`name`,plat) VALUES('張大仙','虎牙'), ('慢慢','斗魚');#一個(gè)insert語句有幾個(gè)(值列表)就表示添加幾行記錄 INSERT INTO anchor VALUES (NULL,'慕少','花樣'), (NULL,'二蛋','虎牙');

3、帶條件修改

不帶條件修改,會(huì)對(duì)表中所有行修改,慎重!!!

#不帶條件修改,會(huì)對(duì)表中所有行修改,慎重 UPDATE anchor SET `name`='韓涵',plat='虎牙' WHERE id=5;

4、刪除表數(shù)據(jù)

DELETE FROM anchor WHERE id=2; -- 刪除現(xiàn)存數(shù)據(jù) DELETE FROM [不寫where會(huì)清空表] 可以回滾 DELETE FROM anchor;

約束:對(duì)表中數(shù)據(jù)做限制

約束是表級(jí)的強(qiáng)制規(guī)定
方式1:可以在創(chuàng)建表時(shí)規(guī)定約束(通過 CREATE TABLE 語句),
方式2:或者在表創(chuàng)建之后也可以(通過 ALTER TABLE 語句)

  • 鍵約束和檢查約束是表級(jí)約束,即不僅要看約束字段當(dāng)前單元格的數(shù)據(jù),還要看其他單元格的數(shù)據(jù)。
  • 非空約束和默認(rèn)值約束都是列級(jí)約束,即約束字段只看當(dāng)前單元格的數(shù)據(jù)即可,和其他單元格無關(guān)。

  • 1.非空約束? ? ?

    not null 聲明列的同時(shí)去指定約束,叫列級(jí)約束。not null只支持列級(jí)約束

    mysql注意:not null約束后,在插入數(shù)據(jù)時(shí)顯示加不進(jìn)去,隱式可以加null可以

    所有的類型的值都可以是null,包括int、float等數(shù)據(jù)類型? ? ? ? ? ? ? ? ? ? ? ? ? ?

    -- NOT NULL 非空約束,規(guī)定某個(gè)字段不能為空 CREATE TABLE emp1(id INT(10),`name` VARCHAR(20) NOT NULL );-- 對(duì)現(xiàn)有表添加非空約束 ALTER TABLE emp2 MODIFY NAME VARCHAR(20) NOT NULL;-- 刪除非空約束 ALTER TABLE emp2 MODIFY NAME VARCHAR(20) NULL;

    2.唯一約束 unique

    列都聲明好了,再加約束。是表級(jí)約束,constraint

    -- UNIQUE 唯一約束,規(guī)定某個(gè)字段在整個(gè)表中是唯一的 CREATE TABLE emp3(id INT(10),NAME VARCHAR(20),phone VARCHAR(30),CONSTRAINT emp3_phone_un UNIQUE(phone) -- 起名--給唯一約束起名emp3_phone_un );-- 表已經(jīng)創(chuàng)建好添加唯一約束 ALTER TABLE emp3 ADD CONSTRAINT emp3_name_un UNIQUE(NAME);-- 刪除唯一約束 drop index[mysql會(huì)為唯一約束列添加索引] ALTER TABLE emp3 DROP INDEX emp3_name_un;

    3.主鍵約束【非空并且唯一】

    primary key 可以鎖定唯一一條數(shù)據(jù),

    -- 主鍵(非空且唯一),通常利用逐漸鎖定一條數(shù)據(jù)從 -- PRIMARY KEY ?添加主鍵約束方式1 CREATE TABLE emp4(id INT(10) PRIMARY KEY,NAME VARCHAR(20) );-- 添加主鍵約束方式2 CREATE TABLE emp5(id INT(10),NAME VARCHAR(20),CONSTRAINT emp5_id_pk PRIMARY KEY(id) );-- 添加主鍵約束方式3 ALTER TABLE emp6 ADD CONSTRAINT emp6_id_pk PRIMARY KEY(id);-- 刪除主鍵約束 【只把唯一約束刪除了,沒有刪除非空約束】 ALTER TABLE emp6 DROP PRIMARY KEY;

    4.外鍵約束

    某字段關(guān)聯(lián)另外一個(gè)表的主鍵
    出現(xiàn)在外鍵表【有外鍵限制的表】中的數(shù)據(jù)一定要出現(xiàn)在主鍵表

    在多方表中定義外鍵,指向一方表的主鍵

    -- FOREIGN KEY 外鍵:通常關(guān)聯(lián)另一個(gè)表的主鍵,出現(xiàn)在外鍵表中的數(shù)據(jù),一定出現(xiàn)在主鍵表中 FOREIGN KEY: 在表級(jí)指定子表中的列 REFERENCES: 標(biāo)示在父表中的列CREATE TABLE dept1(dept_id INT(10) PRIMARY KEY,dept_name VARCHAR(20) );CREATE TABLE emp7(id INT(10) PRIMARY KEY,NAME VARCHAR(20),depart_id INT(10),CONSTRAINT emp7_departId_fk FOREIGN KEY(depart_id) REFERENCES dept1(dept_id)-- ON DELETE CASCADE -- (級(jí)聯(lián)刪除): 當(dāng)父表中的列被刪除時(shí),子表中相對(duì)應(yīng)的列也被刪除ON DELETE SET NULL -- (級(jí)聯(lián)置空): 子表中相應(yīng)的列置空 );#添加外鍵約束 ALTER TABLE emp7 ADD CONSTRAINT emp7_depart_id_fk FOREIGN KEY(depart_id) REFERENCES dept1(dept_id);#刪除外鍵約束 ALTER TABLE emp7 DROP FOREIGN KEY emp7_departId_fk;

    5.約束等級(jí)

    約束等級(jí),沒有設(shè)置,則默認(rèn)不允許刪除或修改操作

    在從表上設(shè)置主外鍵依賴關(guān)系,設(shè)置約束等級(jí)時(shí)建議使用可視化,如下:

    ?1.在倆張表中添加數(shù)據(jù),不加級(jí)聯(lián)置空和級(jí)聯(lián)刪除,普通主外鍵的情況下

    ?

    -- 因?yàn)橹魍怄I關(guān)系直接刪除會(huì)報(bào)錯(cuò) DELETE FROM dept1 WHERE dept_id=10

    2.on delete set null; 級(jí)聯(lián)置空 平和。刪除主表數(shù)據(jù)時(shí),

    DELETE FROM dept1 WHERE dept_id=10

    3.on delete cascade [.級(jí)聯(lián)刪除] ? 危險(xiǎn)

    ?


    6.檢查約束

    mysql5.7不支持check約束,不支持不是用的時(shí)候報(bào)錯(cuò),是不起作用,mysql8.0才有效果。

    -- CHECK 檢查約束 MySQL 8.0 CREATE TABLE emp8(id INT(10),NAME VARCHAR(20),salary DOUBLE(10, 2),CONSTRAINT emp8_salary_ck CHECK(salary > 3000) );

    此時(shí),執(zhí)行如下sql會(huì)報(bào)錯(cuò)

    INSERT INTO emp8 VALUES(101, '張三', 1000);


    7.default約束

    給某個(gè)字段/某列指定默認(rèn)值,一旦設(shè)置默認(rèn)值,在插入數(shù)據(jù)時(shí),如果此字段沒有顯示賦值,則賦值為默認(rèn)值

    創(chuàng)建表:

    CREATE TABLE test_default( id INT, last_name VARCHAR(15), salary DECIMAL(10,2) DEFAULT 2000 )DESC test_default;

    測試:

    INSERT INTO test_default VALUES(1,'tom',2500);-- 如果salary字段沒有顯示賦值,則賦值為默認(rèn)值 INSERT INTO test_default (id,last_name) VALUES(1,'tom');

    總結(jié)

    以上是生活随笔為你收集整理的22-05-10 西安 mysql基础篇(02) 修改表 、修改列、commit和rollback、表数据之增删改 DML 、列级约束、表级约束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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