mariadb不能导入与mysql可以,mysql/mariadb知识点总结(12):insert语句总结
這篇文章總結了mysql中的insert語句,delete、update、select等DML語句將會在其他文章中單獨總結。
在本博客中,”mysql”是一個系列文章,這些文章主要對mysql/mariadb的常用知識點進行了總結,每一篇博客總結的知識點有所不同,具體內容可參考mysql文章列表。
mysql文章列表直達鏈接:mysql知識點總結
insert常用語句
mysql中insert語句的語法如下
insert into tablename(字段1名稱,字段2名稱,…) values(字段1值,字段2值,…)
示例如下:
向表tb1中插入一條數據,插入數據對應的字段為name和age,name的值為tom,age為33。
insert?into?tb1?(name,age)?values('tom',33);
向表tb1中插入多條數據,具體含義同上,只不過是插入多條語句。
insert?into?tb1?(name,age)?values('jerry',22),('naruto',28);
也可以不指定字段,表示對應每個字段都會有插入的數據。
insert?into?tb1?values?(4,'Sasuke',28),(5,'hinata',25);
其實,除了使用上述的語法插入數據,我們還能夠使用如下語法
insert into tablename set 字段1名稱=字段1值,字段2名稱=字段2值
示例如下:
insert?into?tbl2?set?id=2,name="test",age=18,gender='M';
聰明如你一定發現了,上述兩種語法的不同之處在于,字段名稱與字段值是否分開了,使用set的方式字段名與字段值是在一起的。
除了這一點不同之處,其實,他們還有另外一點不同,就是,使用set的方式插入數據時,insert語句中字段的順序可以與表中字段的順序不同,而第一種語法中,字段順序必須與表中字段的順序相同。
還需要注意的是,mysql默認的sqlmode為寬松模式,這意味著即使插入的數據并不是完全符合數據類型的要求,也有可能也能插入數據。示例如下:
可以從上圖中看到,tb表中的name字段的數據類型為char(5),也就是說name字段最多只能插入5個字符,當我們插入的數據為naruto時,超過了5個字符的長度,但是仍然插入成功了,插入的數據自動被截取為narut,少了一個字母”o”,同理,age字段的值的最大取值為255,當我們插入大于255的數據時,數據自動變為了255,這樣雖然能夠插入數據,但是跟我們預期不一樣,這種情況就屬于對數據的校驗不嚴格導致的,我們再看另一種情況,如下圖:
tb1表中的name字段是不允許為空的,并且name字段沒有對應的默認值,但是我們如果不對name字段設置對應的值,數據也能插入,mysql自動將其值設置為了空字符串,如果按照嚴格的標準,這樣應該不允許插入數據。上述兩種情況都屬于對數據的校驗不嚴格造成的。
如果我們不期望這樣的事情發生,可以通過設置sql_mode參數的值進行嚴格限制,我們可以通過運行時設置的方式(參考”mysql數據庫變量(參數)管理“)與修改配置文件的方式設置sql_mode, 此時,如果你想要在不重啟的mysql情況讓以后的所有連接都遵循嚴格的限制,需要先在運行時設置中,將global.sql_mode變量的值設置為TRADITIONAL(使用的存儲引擎為innodb),同時在配置文件中設置sql_mode=TRADITIONAL(使用的存儲引擎為innodb),以免重啟后失效。
sql_mode最常用的幾種重要模式如下:
ANSI:寬松模式,對插入數據進行校驗,如果不符合定義類型或長度,對數據截斷保存,報警告信息,默認應該就是這種。
STRICT_TRANS_TABLES:只在事務型表中進行嚴格限制。
STRICT_ALL_TABLES:對所有表進行嚴格限制。
TRADITIONAL :嚴格模式,當插入數據時,進行數據的嚴格校驗,錯誤的數據將不能被插入,報error錯誤。用于事物時,會進行事物的回滾,官方提醒我們說,如果我們使用的存儲引擎是非事務型的存儲引擎(比如myisam),當我們使用這種模式時,?如果執行非法的插入或更新數據操作時,可能會出現部分完成的情況。
sql_mode更多模式可以官方文檔
總結
以上是生活随笔為你收集整理的mariadb不能导入与mysql可以,mysql/mariadb知识点总结(12):insert语句总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++图像处理类
- 下一篇: TOPAS 命令详解