Rumah > Tutorial sistem > LINUX > Ringkasan pembelajaran Mariadb (4): sisipan data, pemadaman dan pengubahsuaian

Ringkasan pembelajaran Mariadb (4): sisipan data, pemadaman dan pengubahsuaian

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2024-07-18 19:06:39
asal
1244 orang telah melayarinya
INSERT插入数据

INSERT语句格式:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
 [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]
 {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
 [ ON DUPLICATE KEY UPDATE
   col=expr
     [, col=expr] ... ]
Salin selepas log masuk

表结构如下:

MariaDB [mydb]> DESC user;
+----------+-------------+------+-----+---------------------+----------------+
| Field    | Type        | Null | Key | Default             | Extra          |
+----------+-------------+------+-----+---------------------+----------------+
| id       | int(11)     | NO   | PRI | NULL                | auto_increment |
| username | varchar(10) | NO   |     | NULL                |                |
| password | varchar(10) | NO   |     | NULL                |                |
| regtime  | timestamp   | NO   |     | CURRENT_TIMESTAMP   |                |
| logtime  | timestamp   | NO   |     | 0000-00-00 00:00:00 |                |
| logip    | varchar(20) | YES  |     | NULL                |                |
+----------+-------------+------+-----+---------------------+----------------+
6 rows in set (0.01 sec)
Salin selepas log masuk
插入单条数据
MariaDB [mydb]> INSERT INTO user VALUES(1,'test','test',NOW(),NOW(),'127.0.0.1');
Salin selepas log masuk

因为在很多时候有些值是默认的,所以我们可以指定为哪些列插入数据,而其他列则使用默认值,如下:

MariaDB [mydb]> INSERT INTO user(username,password) VALUES('test2','test2');
Salin selepas log masuk

同样的,插入特定列数据还可以这样写:

MariaDB [mydb]> INSERT INTO user SET username='test3',password='test3';
Salin selepas log masuk

这样就仅仅插入了用户名和密码,其他值则使用默认。

MariaDB [mydb]> SELECT * FROM user;
+----+----------+----------+---------------------+---------------------+-----------+
| id | username | password | regtime             | logtime             | logip     |
+----+----------+----------+---------------------+---------------------+-----------+
|  1 | test     | test     | 2018-02-24 15:43:41 | 2018-02-24 15:43:41 | 127.0.0.1 |
|  2 | test2    | test2    | 2018-02-24 15:45:16 | 0000-00-00 00:00:00 | NULL      |
|  3 | test3    | test3    | 2018-02-24 15:46:56 | 0000-00-00 00:00:00 | NULL      |
+----+----------+----------+---------------------+---------------------+-----------+
3 rows in set (0.00 sec)
Salin selepas log masuk
插入多行数据

很多时候我们会有使用一条INSERT语句向数据表插入多条记录的需求,就可以这样写:

MariaDB [mydb]> INSERT INTO user(username,password) VALUES('test4','test4'),('test5',
    -> 'test5');
Salin selepas log masuk
莫名其妙的优先级?

Ringkasan pembelajaran Mariadb (4): sisipan data, pemadaman dan pengubahsuaian

当使用的存储引擎(MyISAM, MEMORY, MERGE)使用表级锁的时候,可以使用LOW_PRIORITY| HIGH_PRIORITY这两个关键字:
    当使用LOW_PRIORITY关键字时,当没有客户端再读取该表时才写入数据。
    当使用HIGH_PRIORITY时,INSERT语句具有同SELECT语句一样的优先级。(默认策略)

所以,当INSERT语句执行前有SELECT语句执行时,INSERT阻塞并等待SELECT读取完毕,但此时,如果有SELECT再次进入调度,则SELECT被阻塞(按理读锁可以直接读)但此时因为INSERT语句跟SELECT语句有同样的优先级,所以SELECT要等INSERT结束才能执行,所以INSERT可以加LOW_PRIORITY来优化读取速度。

这里慢慢看吧,对锁这个东西懂的不是很多。

修改数据

UPDATE语句语法如下:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference 
  [PARTITION (partition_list)]
  SET col1={expr1|DEFAULT} [,col2={expr2|DEFAULT}] ...
  [WHERE where_condition]
  [ORDER BY ...]
  [LIMIT row_count]
Salin selepas log masuk
更新所有

当不使用WHERE子句约束选择条件的时候,则更新所有数据,例如,修改user表所有记录的登陆时间为现在:

MariaDB [mydb]> UPDATE user SET logtime=NOW();
Query OK, 5 rows affected (0.01 sec)
Rows matched: 5  Changed: 5  Warnings: 0
Salin selepas log masuk
更新最早注册的三个人的登录IP为127.0.0.1
MariaDB [mydb]> UPDATE user SET logip='127.0.0.1' ORDER BY regtime LIMIT 3;
Salin selepas log masuk

ORDER BY语句可以用于SELECT UPDATE DELETE等,是指示该表输出、删除、更新时遵循该表哪个字段排列。
例如以上,ORDER BY regtime就是根据注册时间来正序排列更新,并且配合LIMIT语句只更新了前三行。

再使用DESC来指定倒叙排列,例如:ORDER BY regtime DESC

LIMIT语句:用于限制查询结果的条数。
用法:

LIMIT[位置偏移量,]行数
Salin selepas log masuk

第一行从0开始,所以以下:

SELECT * FROM user LIMIT 2,2;  //从第3行开始,取两行,即取第3、4条记录。
Salin selepas log masuk
使用WHERE语句选中特定行更新
MariaDB [mydb]> UPDATE user SET logip='192.168.1.2' WHERE username='test2';
Salin selepas log masuk

因为WHERE子句也有很多东西,这里就不过多贴内容了。

LOW_PRIORITY:这个跟INSERT的LOW_PRIORITY是一样的。

REPLACE语句
MariaDB [mydb]> REPLACE INTO user VALUES(1,'test111','test111',NOW(),NOW(),'192.168.1.1');
Salin selepas log masuk

以上这条语句是MariaDB的扩展SQL,相当于删除重复(主键或唯一索引)的记录再添加新的记录。

好像有点鸡肋?....

删除数据

DELETE语语法:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] 
    FROM tbl_name [PARTITION (partition_list)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
    [RETURNING select_expr 
      [, select_expr ...]]
Salin selepas log masuk
删除所有数据

不使用WHERE语句来约束条件时,则删除所有数据,如下:

MariaDB [mydb]> DELETE FROM user;
Salin selepas log masuk
使用WHERE语句约束选中行
MariaDB [mydb]> DELETE FROM user WHERE username='test1';
Salin selepas log masuk

那么?这篇文章就简单写到这吧~~

Atas ialah kandungan terperinci Ringkasan pembelajaran Mariadb (4): sisipan data, pemadaman dan pengubahsuaian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan