国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        mysql 操作合集(二)

        6.1.3

        刪除unique約束

        alter table persons drop index uc_PersonID;Query OK, 3 rows affected (0.02 sec)Records: 3  Duplicates: 0  Warnings: 0desc persons;+-----------+--------------+------+-----+---------+-------+| Field     | Type         | Null | Key | Default | Extra |+-----------+--------------+------+-----+---------+-------+| id        | int(11)      | NO   |     | NULL    |       || lastname  | varchar(255) | NO   |     | NULL    |       || firstName | varchar(255) | YES  |     | NULL    |       || city      | varchar(255) | YES  |     | NULL    |       |+-----------+--------------+------+-----+---------+-------+

        6.2 not null約束

        6.2.1

        not null 約束強制列不接受null值。

        再拿6.1.3的表persons做說明,可以看到id和lastname字段是存在not null約束的,所以在insert時必須要傳入這兩個字段的值

        insert into persons(id,lastname) values (3,'q');Query OK, 1 row affected (0.00 sec)

        插入成功,下面試一下insert時不給id賦值的情況:

        insert into persons(lastname) values ('q');ERROR 1364 (HY000): Field 'id' doesn't have a default value

        成功的報錯了,除非你有給id定一個default(默認值),否則在insert時不給id賦值一定會報錯。

        select * from persons;+----+----------+-----------+------+| id | lastname | firstName | city |+----+----------+-----------+------+|  1 | z        | q         | NULL ||  2 | z        | q         | NULL ||  2 | zz       | q         | NULL ||  3 | q        | NULL      | NULL |+----+----------+-----------+------+

        總結:有not null約束的字段一定要賦值,沒有not null約束的比如city字段在insert時不賦值會自動為null

        6.2.2

        刪除not null 約束

        alter table persons modify id int null;desc persons;+-----------+--------------+------+-----+---------+-------+| Field     | Type         | Null | Key | Default | Extra |+-----------+--------------+------+-----+---------+-------+| id        | int(11)      | YES  |     | NULL    |       || lastname  | varchar(255) | NO   |     | NULL    |       || firstName | varchar(255) | YES  |     | NULL    |       || city      | varchar(255) | YES  |     | NULL    |       |+-----------+--------------+------+-----+---------+-------+

        6.3 check 約束

        6.3.1

        ALTER TABLE Persons ADD CHECK (id>0);insert into persons(id,lastname) values (-2,'qq');Query OK, 1 row affected (0.00 sec)

        非常奇怪,check約束明明加進去了,但是id=-2還可以被插入;

        select * from persons;+------+----------+-----------+------+| id   | lastname | firstName | city |+------+----------+-----------+------+|    1 | z        | q         | NULL ||    2 | z        | q         | NULL ||    2 | zz       | q         | NULL ||    3 | q        | NULL      | NULL ||   -2 | qq       | NULL      | NULL |+------+----------+-----------+------+

        剛剛insert的數據已經進入表中了。。。

        6.3.2

        百度以后,發現這個mysql本身的問題,想要達到約束效果可以使用type=enum();具體方法如下:

        在原表基礎上加入gender字段,規定gender只能為male或者female;

        alter table persons add gender enum('male' ,'female');desc persons;+-----------+-----------------------+------+-----+---------+-------+| Field     | Type                  | Null | Key | Default | Extra |+-----------+-----------------------+------+-----+---------+-------+| id        | int(11)               | YES  |     | NULL    |       || lastname  | varchar(255)          | NO   |     | NULL    |       || firstName | varchar(255)          | YES  |     | NULL    |       || city      | varchar(255)          | YES  |     | NULL    |       || gender    | enum('male','female') | YES  |     | NULL    |       |+-----------+-----------------------+------+-----+---------+-------+

        表persons的gender成功變為type為enum('male' ,'female');

        insert into persons1(id,lastname,gender) values (3,'qqq','male1');ERROR 1265 (01000): Data truncated for column 'gender' at row 1insert into persons1(id,lastname,gender) values (3,'qqq','male');Query OK, 1 row affected (0.00 sec)

        6.3.3

        刪除enum('male' ,'female')約束

        alter table persons modify gender varchar(255);desc persons;+-----------+--------------+------+-----+---------+-------+| Field     | Type         | Null | Key | Default | Extra |+-----------+--------------+------+-----+---------+-------+| id        | int(11)      | YES  |     | NULL    |       || lastname  | varchar(255) | NO   |     | NULL    |       || firstName | varchar(255) | YES  |     | NULL    |       || city      | varchar(255) | YES  |     | NULL    |       || gender    | varchar(255) | YES  |     | NULL    |       |+-----------+--------------+------+-----+---------+-------+

        6.4 default 約束

        6.4.1

        創建default 約束

        alter table persons alter city set default '上海';Query OK, 0 rows affected (0.01 sec)Records: 0  Duplicates: 0  Warnings: 0desc persons;+-----------+--------------+------+-----+---------+-------+| Field     | Type         | Null | Key | Default | Extra |+-----------+--------------+------+-----+---------+-------+| id        | int(11)      | YES  |     | NULL    |       || lastname  | varchar(255) | NO   |     | NULL    |       || firstName | varchar(255) | YES  |     | NULL    |       || city      | varchar(255) | YES  |     | 上海    |       || gender    | varchar(255) | YES  |     | NULL    |       |+-----------+--------------+------+-----+---------+-------+

        6.4.2

        刪除default 約束

        alter table persons alter city drop  default;Query OK, 0 rows affected (0.01 sec)Records: 0  Duplicates: 0  Warnings: 0desc persons;+-----------+--------------+------+-----+---------+-------+| Field     | Type         | Null | Key | Default | Extra |+-----------+--------------+------+-----+---------+-------+| id        | int(11)      | YES  |     | NULL    |       || lastname  | varchar(255) | NO   |     | NULL    |       || firstName | varchar(255) | YES  |     | NULL    |       || city      | varchar(255) | YES  |     | NULL    |       || gender    | varchar(255) | YES  |     | NULL    |       |+-----------+--------------+------+-----+---------+-------+

        6.5 primary key

        primary key約束:

        用來唯一標識數據庫表中的每條記錄;主鍵必須包含唯一的值且不能含有null值。與6.1unique約束不同的是,unique約束能同時對好幾個字段增加唯一約束,而primary約束只能對某一列創建唯一約束。在一個表中只能有一個primary約束。

        6.5.1創建primary 約束

        alter table persons add primary key(id);ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'

        原因:給表persons的id字段增加primary約束,這需要id字段的內容保持唯一性,而現在id=2有好幾條數據,所以報錯。

        先將表中id=2的字段刪除,再給id增加primary約束

        delete from persons where id=2;alter table persons add primary key(id);desc persons;+-----------+--------------+------+-----+---------+-------+| Field     | Type         | Null | Key | Default | Extra |+-----------+--------------+------+-----+---------+-------+| id        | int(11)      | NO   | PRI | NULL    |       || lastname  | varchar(255) | NO   |     | NULL    |       || firstName | varchar(255) | YES  |     | NULL    |       || city      | varchar(255) | YES  |     | NULL    |       || gender    | varchar(255) | YES  |     | NULL    |       |+-----------+--------------+------+-----+---------+-------+

        6.5.2 刪除primary 約束

        alter table persons drop primary key;desc persons;+-----------+--------------+------+-----+---------+-------+| Field     | Type         | Null | Key | Default | Extra |+-----------+--------------+------+-----+---------+-------+| id        | int(11)      | NO   |     | NULL    |       || lastname  | varchar(255) | NO   |     | NULL    |       || firstName | varchar(255) | YES  |     | NULL    |       || city      | varchar(255) | YES  |     | NULL    |       || gender    | varchar(255) | YES  |     | NULL    |       |+-----------+--------------+------+-----+---------+-------+

        6.6 foreign key

        6.6.1

        ALTER TABLE a ADD FOREIGN KEY (P_Id) REFERENCES b(P_Id)

        給表a增加外鍵P_Id;且此外鍵的參照為表b的P_Id列;關聯的操作為刪除和更新;

        注意:表b為為主表,表a為從表,表b的更新和刪除時將會聯動表a中外鍵與其關聯對應的記錄做更新或刪除操作

        6.6.2

        在做這個操作時,表newstudent和表test都是有數據的,所以就一直報錯

        alter table newstudent add foreign key (id) references testdatabase.test(id);ERROR 3734 (HY000): Failed to add the foreign key constraint. Missing column 'userid' for constraint 'newstudent_ibfk_1' in the referenced table 'test'

        通過這兩步,將表中的數據都刪除;

        delete from newstudent;Query OK, 7 rows affected (0.01 sec)delete from test;Query OK, 7 rows affected (0.01 sec)

        6.6.3

        alter table newstudent add foreign key (id) references testdatabase.test(id);Query OK, 0 rows affected (0.05 sec)Records: 0  Duplicates: 0  Warnings: 0

        此時,給表newstudent增加外鍵id;且此外鍵的參照為表test的id項;這時表test為主表;表newstudent為從表

        重點:主表和從表一定要分清楚,因為主表的更新和刪除時將會聯動從表中外鍵與其關聯對應的記錄做更新或刪除操作

        6.6.4

        之前沒有注意,在兩個表都為空表時,先給從表newstudent賦值插入,結果就是報錯

        insert into newstudent(userid,id,name,gender,score)  values(100,2,'張三我','男',85);ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`testdatabase`.`newstudent`, CONSTRAINT `newstudent_ibfk_1` FOREIGN KEY (`id`) REFERENCES `test` (`id`))

        先給test賦值,id=2;再給newstudent賦值id=2的數據,就可以成功插入

        insert into test(id,name,score,course) values(2,'王五的',90,'語文');Query OK, 1 row affected (0.00 sec)insert into newstudent(userid,id,name,gender,score)  values(100,2,'張三我','男',85);Query OK, 1 row affected (0.00 sec)

        6.6.5

        如果給newstudent賦值id=3會報錯,因為這個時候test表沒有id=3的數據

        insert into newstudent(userid,id,name,gender,score)  values(100,3,'張三我','男',85);ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`testdatabase`.`newstudent`, CONSTRAINT `newstudent_ibfk_1` FOREIGN KEY (`id`) REFERENCES `test` (`id`))

        那在重新給newstudent賦值id=1的數據呢?結果也是報錯,因為id有primary約束,不能重復插入

        insert into newstudent(userid,id,name,gender,score)  values(100,1,'張三我','男',85);ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

        6.6.6

        外鍵起到的作用就是保持連接的數據表的一致性,當對主表進行刪除或更新操作時,從表也會一起刪除或更新;

        update test set id=3;ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`testdatabase`.`newstudent`, CONSTRAINT `newstudent_ibfk_1` FOREIGN KEY (`id`) REFERENCES `test` (`id`))

        不能刪除或更新這一行,存在外鍵約束

        我們在更新與刪除時遇到的外鍵約束解決方案分別對應設置Update rule與Delete rule。有如下四個選項:

        1.CASCADE:從父表刪除或更新且自動刪除或更新子表中匹配的行。

        2.SET NULL:從父表刪除或更新行,并設置子表中的外鍵列為NULL。如果使用該選項,必須保證子表列沒有指定NOT NULL。

        3.RESTRICT:拒絕對父表的刪除或更新操作。

        4.NO ACTION:標準SQL的關鍵字,在MySQL中與RESTRICT相同。

        6.6.7

        所以將foreign約束刪除后重新構建:

        alter table newstudent drop foreign key newstudent_ibfk_1;Query OK, 0 rows affected (0.04 sec)Records: 0  Duplicates: 0  Warnings: 0

        要點:newstudent_ibfk_1是在之前的報錯中找到的CONSTRAINT `newstudent_ibfk_1`

        delete from test;Query OK, 0 rows affected (0.00 sec)delete from newstudent;Query OK, 2 rows affected (0.00 sec)

        將表中的內容刪除干凈

        6.6.8

        alter table newstudent add foreign key (id) references testdatabase.test(id) on update cascade on delete cascade;Query OK, 0 rows affected (0.04 sec)Records: 0  Duplicates: 0  Warnings: 0

        on update cascade表示更新關聯;on delete cascade表示刪除關聯。

        6.6.9

        將表test的id=2更新為id=3,看看表newstudent和表test有什么變化

        update test set id=3 where id=2;Query OK, 1 row affected (0.00 sec)Rows matched: 1  Changed: 1  Warnings: 0
        select * from test;+----+-----------+--------+-------+| id | name      | course | score |+----+-----------+--------+-------+|  1 | 王五      | 語文   |    90 ||  3 | 王五的    | 語文   |    90 |+----+-----------+--------+-------+

        test表的id從2變成了3;

        select * from newstudent;+--------+----+-----------+--------+-------+| userid | id | name      | gender | score |+--------+----+-----------+--------+-------+|    100 |  1 | 張三      | 男     | 65    ||    100 |  3 | 張三我    | 男     | 85    |+--------+----+-----------+--------+-------+

        此時newstudent表的id也從2變成了3;(此時沒有直接對newstudent表有過任何操作)

        6.6.10

        delete from test where id=3;Query OK, 1 row affected (0.00 sec)

        將主表test中id=3的刪除

        select * from test;+----+--------+--------+-------+| id | name   | course | score |+----+--------+--------+-------+|  1 | 王五   | 語文   |    90 |+----+--------+--------+-------+
        select * from newstudent;+--------+----+--------+--------+-------+| userid | id | name   | gender | score |+--------+----+--------+--------+-------+|    100 |  1 | 張三   | 男     | 65    |+--------+----+--------+--------+-------+

        這時表newstudent的id=3的數據也刪除了

        <上一頁  1  2  
        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          人工智能 獵頭職位 更多
          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 口爆人妻| 双牌县| 男人天堂网址| mm1313亚洲国产电影精品| 无码18禁成人免费| 国产xxxxxxx| www97| 阜南县| 国产精品va| 精品合集播放| 在线免费熟女| 2025AV在线| 亚洲AV熟女| 固原市| 蜜臂av| 大香蕉一区二区三区| 图片| 18岁以下禁止观看的网站| 国产激情久久久久成熟影院苍井空| 亚洲一区av| 五十路熟妇| 色大成| 久久福利电影| 枝江市| 国产在线你懂| 亚洲日韩?国产丝袜?在线精品 | 中文字幕第56页| 精品网站999www| av狼友| 高陵县| 国产av中文字幕| 文化| 中文字幕一级A片免费看| 伊金霍洛旗| 国产黄色视屏| 大埔县| 愛爱视频在线3| 午夜无码福利| 台前县| 玉龙| 亚卅精品|