MySQL札记7_DML(数据操作语言)

DML,data manipulation language数据操作语言, 主要是对数据库中的表记录进行操作的语言,包含表中插入数据、表中数据的更新、表的删除等:

  • 表中插入数据
  • 表中数据更新
  • 删除表

复习创建表

在对表中的数据进行操作之前复习DDL(数据定义语言)中关于如何在数据库中创建一个表user

# 一个主键+6个字段
mysql> create table user(
    -> id int(10) unsigned not null auto_increment comment "user_id",
    -> user_name varchar(20) not null comment "user_name",
    -> user_email varchar(20) not null comment "user_email",
    -> user_age tinyint unsigned not null comment "user_age",
    -> fee decimal(10,2) not null default 0.00 comment "user_fee",
    -> created_at timestamp not null comment "created_time",
    -> primary key(id) 
    -> );
Query OK, 0 rows affected (0.07 sec)

删除和增减字段

created_at字段进行删除,同时在指定位置添加字段:

  • 删除字段drop
mysql> alter table user drop created_at;    # 删除字段
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0
  • 指定位置添加字段add
mysql> alter table user add password char(30) not null comment "user_password" after user_age;

查看重新建好的表

mysql> desc user;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| user_name  | varchar(20)         | NO   |     | NULL    |                |
| user_email | varchar(20)         | NO   |     | NULL    |                |
| user_age   | tinyint(3) unsigned | NO   |     | NULL    |                |
| password   | char(30)            | NO   |     | NULL    |                |
| fee        | decimal(10,2)       | NO   |     | 0.00    |                |
+------------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

插入数据

经常说的“增”就是指向某个表中插入数据,关键词:insert,格式为:

insert into 表名 (字段1,字段2, 字段3....)  values (值1, 值2, 值3....)   

特点

  • 字段中id可以不用写,默认是自增的
  • 字段和值一一对应关系,否则插入失败
  • 字符串的字段必须加上引号
  • 密码字段有时需要使用password()函数
  • 如果省去字段部分,values后面需要加上id

栗子

列出字段和值进行插入

mysql> insert into user (user_name, user_email, user_age, password, fee) values("peter", "12345@163.com", 28, "123321", 25.28);    # 插入数据
Query OK, 1 row affected (0.01 sec)

# 看结果
mysql> select * from user;   # 查看数据,属于DQL(数据查询语言)内容,先学习下
+----+-----------+---------------+----------+----------+-------+
| id | user_name | user_email    | user_age | password | fee   |
+----+-----------+---------------+----------+----------+-------+
|  1 | peter     | 12345@163.com |       28 | 123321   | 25.28 |
+----+-----------+---------------+----------+----------+-------+
1 row in set (0.00 sec)

插入部分字段

mysql> insert into user (user_name, user_age) values("Jack", 24);
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql> select * from user;
+----+-----------+---------------+----------+----------+-------+
| id | user_name | user_email    | user_age | password | fee   |
+----+-----------+---------------+----------+----------+-------+
|  1 | peter     | 12345@163.com |       28 | 123321   | 25.28 |
|  2 | Jack      |               |       24 |          |  0.00 |
+----+-----------+---------------+----------+----------+-------+
2 rows in set (0.00 sec)

直接插入values

mysql> insert into user values(3, "Tom", "987123@163.com", 20, "678543", 87.24);
Query OK, 1 row affected (0.01 sec)

# 查看
mysql> select * from user;
+----+-----------+----------------+----------+----------+-------+
| id | user_name | user_email     | user_age | password | fee   |
+----+-----------+----------------+----------+----------+-------+
|  1 | peter     | 12345@163.com  |       28 | 123321   | 25.28 |
|  2 | Jack      |                |       24 |          |  0.00 |
|  3 | Tom       | 987123@163.com |       20 | 678543   | 87.24 |
+----+-----------+----------------+----------+----------+-------+
3 rows in set (0.00 sec)

用这种方式插入需要注意的是:一定要带上id,不然报错

image.png

更新表中数据

  • 更新数据的关键词是update
  • 同时一定要带上where条件,一般是id号;不然后果严重
  • 语法:
update 表名 set 字段1=值1,字段2=值2 where 条件

修改一个字段

mysql> update user set user_name="Jim" where id=3;     # id为3的名字修改
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from user;
+----+-----------+----------------+----------+----------+-------+
| id | user_name | user_email     | user_age | password | fee   |
+----+-----------+----------------+----------+----------+-------+
|  1 | peter     | 12345@163.com  |       28 | 123321   | 25.28 |
|  2 | Jack      |                |       24 |          |  0.00 |
|  3 | Jim       | 987123@163.com |       20 | 678543   | 87.24 |
+----+-----------+----------------+----------+----------+-------+
3 rows in set (0.00 sec)
  • 字段作为where条件
mysql> update user set user_email="987456@163.com" where user_name="Jack";   # 字段作为where条件
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from  user;
+----+-----------+----------------+----------+----------+--------+
| id | user_name | user_email     | user_age | password | fee    |
+----+-----------+----------------+----------+----------+--------+
|  1 | peter     | 12345@163.com  |       28 | 123321   | 500.00 |
|  2 | Jack      | 987456@163.com |       22 | 101010   | 500.00 |
|  3 | Jim       | 987123@163.com |       20 | 678543   | 500.00 |
+----+-----------+----------------+----------+----------+--------+
3 rows in set (0.00 sec)
image.png

修改多个字段

mysql> update user set user_age=22,password="101010" where id=2;   # 多个字段修改
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from user;
+----+-----------+----------------+----------+----------+-------+
| id | user_name | user_email     | user_age | password | fee   |
+----+-----------+----------------+----------+----------+-------+
|  1 | peter     | 12345@163.com  |       28 | 123321   | 25.28 |
|  2 | Jack      |                |       22 | 101010   |  0.00 |
|  3 | Jim       | 987123@163.com |       20 | 678543   | 87.24 |
+----+-----------+----------------+----------+----------+-------+
3 rows in set (0.00 sec)

注意:多个字段之间用逗号隔开,否则报错

image.png

使用运算符修改

  • !=:不等于
mysql> update user set fee=28 where id!=1;    # 不等于运算符
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from user;
+----+-----------+----------------+----------+----------+-------+
| id | user_name | user_email     | user_age | password | fee   |
+----+-----------+----------------+----------+----------+-------+
|  1 | peter     | 12345@163.com  |       28 | 123321   | 25.28 |
|  2 | Jack      |                |       22 | 101010   | 28.00 |
|  3 | Jim       | 987123@163.com |       20 | 678543   | 28.00 |
+----+-----------+----------------+----------+----------+-------+
3 rows in set (0.00 sec)
image.png
  • in的用法
mysql> update user set fee=100 where id in(1, 3);   # in的用法
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from user;
+----+-----------+----------------+----------+----------+--------+
| id | user_name | user_email     | user_age | password | fee    |
+----+-----------+----------------+----------+----------+--------+
|  1 | peter     | 12345@163.com  |       28 | 123321   | 100.00 |
|  2 | Jack      |                |       22 | 101010   |  28.00 |
|  3 | Jim       | 987123@163.com |       20 | 678543   | 100.00 |
+----+-----------+----------------+----------+----------+--------+
3 rows in set (0.00 sec)
image.png
  • between...and...的用法
mysql> update user set fee=500 where id between 1 and 3;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> select * from user;
+----+-----------+----------------+----------+----------+--------+
| id | user_name | user_email     | user_age | password | fee    |
+----+-----------+----------------+----------+----------+--------+
|  1 | peter     | 12345@163.com  |       28 | 123321   | 500.00 |
|  2 | Jack      |                |       22 | 101010   | 500.00 |
|  3 | Jim       | 987123@163.com |       20 | 678543   | 500.00 |
+----+-----------+----------------+----------+----------+--------+
3 rows in set (0.00 sec)
image.png

小结

  • 插入形式多样
  • 同时插入多个,一定要带上逗号
  • where条件不能省略

删除表

删除表有两种情况:

  • delete:删除表,插入数据从上一次结束id号开始继续插入;删除的记录仍存在
  • truncate:清空表,重新插入数据id从1开始;不占内存空间

delete

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

mysql> select * from user;
+----+-----------+----------------+----------+----------+--------+
| id | user_name | user_email     | user_age | password | fee    |
+----+-----------+----------------+----------+----------+--------+
|  1 | peter     | 12345@163.com  |       28 | 123321   | 500.00 |
|  2 | Jack      | 987456@163.com |       22 | 101010   | 500.00 |
+----+-----------+----------------+----------+----------+--------+
2 rows in set (0.00 sec)

mysql> insert into user (user_name, user_email, fee) values("Tom", "987123@163.com", 87.24);
Query OK, 1 row affected, 2 warnings (0.01 sec)

mysql> select * from user;
+----+-----------+----------------+----------+----------+--------+
| id | user_name | user_email     | user_age | password | fee    |
+----+-----------+----------------+----------+----------+--------+
|  1 | peter     | 12345@163.com  |       28 | 123321   | 500.00 |
|  2 | Jack      | 987456@163.com |       22 | 101010   | 500.00 |
|  4 | Tom       | 987123@163.com |        0 |          |  87.24 |
+----+-----------+----------------+----------+----------+--------+
3 rows in set (0.00 sec)
image.png
  • truncate
# 删除数据
mysql> truncate table user;
Query OK, 0 rows affected (0.05 sec)

mysql> select * from user;
Empty set (0.00 sec)

# 重新插入数据
mysql> insert into user (user_name, user_email, user_age, password, fee) values ("peter", "123456a@163.com", 27, password("101010"), 28.87);
Query OK, 1 row affected, 2 warnings (0.01 sec)

mysql> select * from user;
+----+-----------+-----------------+----------+--------------------------------+-------+
| id | user_name | user_email      | user_age | password                       | fee   |
+----+-----------+-----------------+----------+--------------------------------+-------+
|  1 | peter     | 123456a@163.com |       27 | *C3BC3E91915DCAE22014892F9827D | 28.87 |
+----+-----------+-----------------+----------+--------------------------------+-------+
1 row in set (0.00 sec)
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267