电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL數(shù)據(jù)操作-DML語句的使用

瀏覽:2日期:2023-10-09 12:55:37

說明

DML(Data Manipulation Language)數(shù)據(jù)操作語言,是指對數(shù)據(jù)庫進行增刪改的操作指令,主要有INSERT、UPDATE、DELETE三種,代表插入、更新與刪除,這是學(xué)習(xí)MySQL必要掌握的基本知識。

方語法中 [] 中內(nèi)容可以省略。

INSERT操作

逐行插入

語法格式如下:

insert into t_name[(column_name1,columnname_2,...)] values (val1,val2); 或者 insert into t_name set column_name1 = val1,column_name2 = val2;

1、字段名稱和值需要保證數(shù)量一直,類型一直,位置一 一對應(yīng),否則可能導(dǎo)致異常。

2、not null的字段需要保證有插入的值,否則會報非空的異常信息。允許null的字段如果不想輸入數(shù)據(jù),字段和值都不出現(xiàn),或者value用null代替。

3、數(shù)值類型,值不需要用單引號括起來,其他的如字符型或日期類型,值需要用單引號括起來;

4、如果表名后面的column_name 省略不寫,則代表覆蓋該表的所有字段。值的順序和表中字段順序須保持一致。

5、上述第二種語法的寫法更繁瑣,現(xiàn)在比較少使用。

測試一下:

mysql> desc `user1`;+---------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+---------+--------------+------+-----+---------+----------------+| id | bigint(20) | NO | PRI | NULL | auto_increment || name | varchar(20) | NO | | NULL ||| age | int(11) | NO | | 0 ||| address | varchar(255) | YES | | NULL ||+---------+--------------+------+-----+---------+----------------+4 rows in setmysql> insert into `user1`(name,age,address) values(’brand’,20,’fuzhou’);Query OK, 1 row affectedmysql> insert into `user1`(age,address) values(20,’fuzhou’);1364 - Field ’name’ doesn’t have a default valuemysql> insert into `user1` values(’sol’,21,’xiamen’);1136 - Column count doesn’t match value count at row 1mysql> insert into `user1` values(null,’sol’,21,’xiamen’);Query OK, 1 row affectedmysql> select * from `user1`;+----+-------+-----+---------+| id | name | age | address |+----+-------+-----+---------+| 3 | brand | 20 | fuzhou || 4 | sol | 21 | xiamen |+----+-------+-----+---------+2 rows in set

批量插入

語法格式如下:

insert into t_name [(column_name1,column_name2)] values (val1_1,val1_2),(val2_1,val2_2)...); 或者 insert into t_name [(column_name1,column_name2)] select o_name1,o_name2 from o_t_name [where condition];

1、上述第一個語法,values 后面的值個數(shù)需要同等配對 column的數(shù)量,可以設(shè)置多個,逗號隔開,提高數(shù)據(jù)插入效率。

2、第二個語法,select查詢的字段和插入數(shù)據(jù)的字段數(shù)量、順序、類型需要一致。 insert的字段可以省略,代表插入t_name表所有字段。條件可選。

測試一下:

mysql> insert into `user1`(name,age,address) values(’brand’,20,’fuzhou’),(’sol’,21,’xiamen’);Query OK, 2 rows affectedRecords: 2 Duplicates: 0 Warnings: 0mysql> select * from `user1`;+----+-------+-----+---------+| id | name | age | address |+----+-------+-----+---------+| 5 | brand | 20 | fuzhou || 6 | sol | 21 | xiamen |+----+-------+-----+---------+2 rows in set

mysql> desc `user2`;+---------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+---------+--------------+------+-----+---------+----------------+| id | bigint(20) | NO | PRI | NULL | auto_increment || name | varchar(20) | NO | | NULL ||| age | int(11) | NO | | 0 ||| address | varchar(255) | YES | | NULL ||| sex | int(11) | NO | | 1 ||+---------+--------------+------+-----+---------+----------------+5 rows in setmysql> insert into `user2` (name,age,address,sex) select name,age,address,null from `user1`;Query OK, 2 rows affectedRecords: 2 Duplicates: 0 Warnings: 0mysql> select * from `user2`;+----+-------+-----+---------+------+| id | name | age | address | sex |+----+-------+-----+---------+------+| 7 | brand | 20 | fuzhou | 1 || 8 | sol | 21 | xiamen | 1 |+----+-------+-----+---------+------+2 rows in set

UPDATE操作

數(shù)據(jù)更新

語法格式如下:

update t_name [[as] alias] set [ alias.]column_name1 = val1,[alias.]column_name2 = val2 [where condition];

1、alias 是別名的意思,別名越簡單識別性越強越好,容易辨認,方便操作,沒有別名情況下,表名就是別名

2、as alias 中as也是可選的,where 條件也是可選的,所以用戶可以選擇需要的,符合特定條件的部分數(shù)據(jù)進行更新。

測試一下:

mysql> select * from `user2`;+----+-------+-----+---------+------+| id | name | age | address | sex |+----+-------+-----+---------+------+| 7 | brand | 20 | fuzhou | NULL || 8 | sol | 21 | xiamen | NULL |+----+-------+-----+---------+------+2 rows in setmysql> update `user2` as u2 set u2.name = ’hero’,u2.age=23,u2.sex=1 where id=7;Query OK, 1 row affectedRows matched: 1 Changed: 1 Warnings: 0mysql> select * from `user2`;+----+------+-----+---------+------+| id | name | age | address | sex |+----+------+-----+---------+------+| 7 | hero | 23 | fuzhou | 1 || 8 | sol | 21 | xiamen | NULL |+----+------+-----+---------+------+2 rows in set

還有一種方式是同時更新多個表,使用不同的別名以及一些條件去限制,不過不建議這么做,操作易錯,并且不好維護。

DELETE操作

delete方式刪除

語法格式如下:

delete [alias] from t_name [[as] alias] [where condition];

1、跟上面一樣,alias代表別名,沒有別名情況下,表名就是別名

2、如果表設(shè)置了別名,則delete后面必須跟上別名,否則數(shù)據(jù)庫會報異常。

測試一下:

mysql> select * from `user2`;+----+------+-----+---------+------+| id | name | age | address | sex |+----+------+-----+---------+------+| 7 | hero | 23 | fuzhou | 1 || 8 | sol | 21 | xiamen | NULL |+----+------+-----+---------+------+2 rows in setmysql> delete from `user2` as alias where sex=1;1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’as alias where sex=1’ at line 1mysql> delete alias from `user2` as alias where sex=1;Query OK, 1 row affectedmysql> select * from `user2`;+----+------+-----+---------+------+| id | name | age | address | sex |+----+------+-----+---------+------+| 8 | sol | 21 | xiamen | NULL |+----+------+-----+---------+------+1 row in set

3、如果刪除表中所有的數(shù)據(jù),則后面不帶上where條件即可,不過要謹慎使用喲。

mysql> select * from `user2`;+----+-------+-----+----------+-----+| id | name | age | address | sex |+----+-------+-----+----------+-----+| 8 | sol | 21 | xiamen | 0 || 10 | brand | 21 | fuzhou | 1 || 11 | helen | 20 | quanzhou | 0 |+----+-------+-----+----------+-----+3 rows in setmysql> delete from `user2`;Query OK, 3 rows affectedmysql> select * from `user2`;Empty set

truncate方式刪除

語法格式如下:

truncate t_name;

mysql> select * from `user2`;+----+-------+-----+----------+-----+| id | name | age | address | sex |+----+-------+-----+----------+-----+| 12 | brand | 21 | fuzhou | 1 || 13 | helen | 20 | quanzhou | 0 || 14 | sol | 21 | xiamen | 0 |+----+-------+-----+----------+-----+3 rows in setmysql> truncate `user2`;Query OK, 0 rows affectedmysql> select * from `user2`;Empty set

看起來跟delete很像,但是重新插入數(shù)據(jù)會發(fā)現(xiàn),他的自增主鍵會重新從1開始,但是delete的是直接在原來的所以自增值之后往上加。看下面id字段。

mysql> insert into `user2` (name,age,address,sex) values(’brand’,21,’fuzhou’,1),(’helen’,20,’quanzhou’,0),(’sol’,21,’xiamen’,0);Query OK, 3 rows affectedRecords: 3 Duplicates: 0 Warnings: 0mysql> select * from `user2`;+----+-------+-----+----------+-----+| id | name | age | address | sex |+----+-------+-----+----------+-----+| 1 | brand | 21 | fuzhou | 1 || 2 | helen | 20 | quanzhou | 0 || 3 | sol | 21 | xiamen | 0 |+----+-------+-----+----------+-----+3 rows in set

那 truncate 和 delete有什么區(qū)別呢?我們來梳理下。

truncate和delete的比較

1、truncate 指的是清空表的數(shù)據(jù)、釋放表的空間,但不刪除表的架構(gòu)定義(表結(jié)構(gòu))。因為不包含Where條件,所以不是刪除具體行,而是將整個表清空了。

2、而delete 語句是刪除表中的數(shù)據(jù)行,可以在后面帶上條件控制刪除的維度、范圍,它每次從表中刪除一行,會同時將該行的刪除操作作為事務(wù)保存在日志中,用于進行可能的回滾操作。

3、truncate 和 delete 一樣的地方是:只是刪除數(shù)據(jù),涉及到的表結(jié)構(gòu)及其列、約束、索引等均不會變。

4、如果被外鍵 foreign key 約束,不能使用truncate ,只能使用不帶where子句的delete語句。

5、truncate 操作會記錄在日志中,delete操作會放到 rollback segement 中,執(zhí)行時要等事務(wù)被commit才會生效;所以delete 會觸發(fā)刪除觸發(fā)器(如果有的話),truncate 不會。

6、如果像上面我們測試的那樣,包含自增字段,truncate方式清空之后,自增列的值會被初始化從1開始。

delete方式要分情況判斷(如果數(shù)據(jù)全部delete,數(shù)據(jù)庫未被重啟,則按照之前max+1;數(shù)據(jù)庫重啟了,則一樣會重新開始計算自增列的初始值)。

7、還有drop,drop語句會刪除表包括 結(jié)構(gòu)、數(shù)據(jù)、依賴該表的約束(constrain),觸發(fā)器(trigger)索引(index)等。

以上就是MySQL數(shù)據(jù)操作-DML語句的使用的詳細內(nèi)容,更多關(guān)于MySQL dml語句的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

相關(guān)文章:
主站蜘蛛池模板: 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 超声波清洗机_细胞破碎仪_实验室超声仪器_恒温水浴-广东洁盟深那仪器 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 福州甲醛检测-福建室内空气检测_环境检测_水质检测-福建中凯检测技术有限公司 | 市政路灯_厂家-淄博信达电力科技有限公司| 小小作文网_中小学优秀作文范文大全| 不锈钢闸阀_球阀_蝶阀_止回阀_调节阀_截止阀-可拉伐阀门(上海)有限公司 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 模具钢_高速钢_不锈钢-万利钢金属材料| 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 江西自考网-江西自学考试网| 深圳善跑体育产业集团有限公司_塑胶跑道_人造草坪_运动木地板 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 123悬赏网_发布悬赏任务_广告任务平台| 电子天平-华志电子天平厂家| 北京银联移动POS机办理_收银POS机_智能pos机_刷卡机_收银系统_个人POS机-谷骐科技【官网】 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 脑钠肽-白介素4|白介素8试剂盒-研域(上海)化学试剂有限公司 | Duoguan 夺冠集团 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 数年网路-免费在线工具您的在线工具箱-shuyear.com | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 粘度计NDJ-5S,粘度计NDJ-8S,越平水分测定仪-上海右一仪器有限公司 | 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 路斯特伺服驱动器维修,伦茨伺服驱动器维修|万骏自动化百科 | 温室大棚建设|水肥一体化|物联网系统| 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 混合气体腐蚀试验箱_盐雾/硫化氢/气体腐蚀试验箱厂家-北京中科博达 | 筛分机|振动筛分机|气流筛分机|筛分机厂家-新乡市大汉振动机械有限公司 | 煤机配件厂家_刮板机配件_链轮轴组_河南双志机械设备有限公司 |