MySQL学习笔记8

MySQL的数据的增删改查(重点):

增加:insert

删除:delete

更改:update

查询:select

1、数据的增加操作:

特别注意的是:在SQL语句中,除了数字,其他类型的值,都需要用引号引起来,否则插入时会报错。

准备一个数据表。

mysql> create table tb_user (
    -> id int,
    -> username varchar(20),
    -> age tinyint unsigned,
    -> gender enum('male','female','secret'),
    -> address varchar(255)
    -> )engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.01 sec)


mysql> desc tb_user;
+----------+--------------------------------+------+-----+---------+-------+
| Field    | Type                           | Null | Key | Default | Extra |
+----------+--------------------------------+------+-----+---------+-------+
| id       | int(11)                        | YES  |     | NULL    |       |
| username | varchar(20)                    | YES  |     | NULL    |       |
| age      | tinyint(3) unsigned            | YES  |     | NULL    |       |
| gender   | enum('male','female','secret') | YES  |     | NULL    |       |
| address  | varchar(255)                   | YES  |     | NULL    |       |
+----------+--------------------------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

说明:

unsigned:代表无符号型,只有0到正数。

enum代表枚举型,只能从给定的值中选择一个。

插入数据:

前面不写字段信息。

mysql> insert into tb_user values(1,'李小刚',24,'male','广东省广州市');
Query OK, 1 row affected (0.01 sec)

mysql>
mysql> select * from tb_user;
+------+-----------+------+--------+--------------------+
| id   | username  | age  | gender | address            |
+------+-----------+------+--------+--------------------+
|    1 | 李小刚    |   24 | male   | 广东省广州市       |
+------+-----------+------+--------+--------------------+
1 row in set (0.00 sec)

前面写字段:

mysql> insert into tb_user(id,username,age) values(2,'李大刚',35);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> select * from tb_user;
+------+-----------+------+--------+--------------------+
| id   | username  | age  | gender | address            |
+------+-----------+------+--------+--------------------+
|    1 | 李小刚    |   24 | male   | 广东省广州市       |
|    2 | 李大刚    |   35 | NULL   | NULL               |
+------+-----------+------+--------+--------------------+
2 rows in set (0.00 sec)

NULL:表示没有值。NULL表示关键字NULL本身,'NULL'表示包含字符NULL的直义字符串。

insert into t1 select * from t2;
insert into t1(name) select name from t2;
说明:
1.插入的数据来自于另外一张表
2.一定要保证两张表的结构一致(插入表里字段数和后面表查找出来的字段要相匹配)
3.两张表结构完全一致;或者人造让两边字段一致

数据的查询操作:

基本语法:

1)查询表里的所有记录:

mysql> select * from tb_user;
+------+-----------+------+--------+--------------------+
| id   | username  | age  | gender | address            |
+------+-----------+------+--------+--------------------+
|    1 | 李小刚    |   24 | male   | 广东省广州市       |
|    2 | 李大刚    |   35 | NULL   | NULL               |
+------+-----------+------+--------+--------------------+
2 rows in set (0.00 sec)

案例:查询id=2的人员信息:

mysql> select id,username,age from tb_user where id=2;
+------+-----------+------+
| id   | username  | age  |
+------+-----------+------+
|    2 | 李大刚    |   35 |
+------+-----------+------+
1 row in set (0.00 sec)

mysql>
mysql> select * from tb_user where age > 23;
+------+-----------+------+--------+--------------------+
| id   | username  | age  | gender | address            |
+------+-----------+------+--------+--------------------+
|    1 | 李小刚    |   24 | male   | 广东省广州市       |
|    2 | 李大刚    |   35 | NULL   | NULL               |
+------+-----------+------+--------+--------------------+
2 rows in set (0.00 sec)

查询年龄大于23岁的人员信息。

数据的修改操作:

update 表名 set 字段1=新值,字段2=新值,... where 更新条件;

特别说明:如果更新数据的时候不指定where更新条件,则其会把这个数据表的数据都更新一遍。

如果这个误操作,会导致所有数据都会发生变化。更新之前要做好备份。也要注意有where这个更新条件。

mysql> update tb_user set gender='male',address='广东省深圳市' where username='李大刚';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from tb_user where username='李大刚';
+------+-----------+------+--------+--------------------+
| id   | username  | age  | gender | address            |
+------+-----------+------+--------+--------------------+
|    2 | 李大刚    |   35 | male   | 广东省深圳市       |
+------+-----------+------+--------+--------------------+
1 row in set (0.00 sec)

案例:今年是2023年,假设到了2024年,现在存储的学员的年龄都差1岁,整体进行一次更新。

mysql> update tb_user set age=age+1;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql>
mysql> select * from tb_user;
+------+-----------+------+--------+--------------------+
| id   | username  | age  | gender | address            |
+------+-----------+------+--------+--------------------+
|    1 | 李小刚    |   25 | male   | 广东省广州市       |
|    2 | 李大刚    |   36 | male   | 广东省深圳市       |
+------+-----------+------+--------+--------------------+
2 rows in set (0.00 sec)

数据的删除操作:

1)基本语法:

delete from 数据表名称 where 删除条件;

案例:删除tb_user表中的id=1的用户信息:

mysql> delete from tb_user where id=1;
Query OK, 1 row affected (0.01 sec)

mysql>
mysql> select * from tb_user;
+------+-----------+------+--------+--------------------+
| id   | username  | age  | gender | address            |
+------+-----------+------+--------+--------------------+
|    2 | 李大刚    |   36 | male   | 广东省深圳市       |
+------+-----------+------+--------+--------------------+
1 row in set (0.00 sec)

delete/truncate/drop区别

  • delete:删除==数据记录==

    • 数据操作语言(DML)

    • 在事务控制里,DML语句要么commit,要么rollback

    • 删除==大量==记录速度慢,==只删除数据==不回收高水位线

    • 可以==带条件==删除

  • truncate:删除==所有数据记录==

    • 数据定义语言(DDL)

    • ==不在==事务控制里,DDL语句执行前会提交前面所有未提交的事务

    • 清里大量数据==速度快==,回收高水位线(high water mark)

    • ==不能带条件删除==

  • drop:删除==数据库对象==

    • 数据定义语言(DDL)

    • 数据库对象包括库、表、用户等。

delete from操作案例:

mysql> delete from tb_user;
Query OK, 1 row affected (0.01 sec)

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

truncate操作案例:

mysql> select * from tb_user;
+------+-----------+------+--------+--------------------+
| id   | username  | age  | gender | address            |
+------+-----------+------+--------+--------------------+
|    1 | 李小刚    |   24 | male   | 广东省广州市       |
|    2 | 李大刚    |   35 | male   | 广东省深圳市       |
+------+-----------+------+--------+--------------------+
2 rows in set (0.00 sec)

mysql>
mysql>
mysql> truncate tb_user;
Query OK, 0 rows affected (0.00 sec)

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

自动增长(对某个字段进行自动编号)

create table tb_user (
	id int not null auto_increment,
	username varchar(20),
	age tinyint unsigned,
	gender enum('male','female','secret'),
	address varchar(255)
)engine=innodb default charset=utf8;

not null:不能为空。

auto_increment:  自动增长。

主键约束:(非空、唯一)

两种方法:

create table tb_user (
	id int not null auto_increment primary key ,
	username varchar(20),
	age tinyint unsigned,
	gender enum('male','female','secret'),
	address varchar(255)
)engine=innodb default charset=utf8;

create table tb_user (
	id int not null auto_increment,
	username varchar(20),
	age tinyint unsigned,
	gender enum('male','female','secret'),
	address varchar(255),
	primary key(id)
)engine=innodb default charset=utf8;

高水位线的概念:如果是truncate,那么id就是重置从1开始。如果是delete,那么id就是不回收,那是在原来删除的基础上增加。

mysql> create table tb_user (
    -> id int not null auto_increment,
    -> username varchar(20),
    -> age tinyint unsigned,
    -> gender enum('male','female','secret'),
    -> address varchar(255),
    -> primary key(id)
    -> )engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql>
mysql> desc tb_user;
+----------+--------------------------------+------+-----+---------+----------------+
| Field    | Type                           | Null | Key | Default | Extra          |
+----------+--------------------------------+------+-----+---------+----------------+
| id       | int(11)                        | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)                    | YES  |     | NULL    |                |
| age      | tinyint(3) unsigned            | YES  |     | NULL    |                |
| gender   | enum('male','female','secret') | YES  |     | NULL    |                |
| address  | varchar(255)                   | YES  |     | NULL    |                |
+----------+--------------------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

插入数据时,id位置直接写NULL即可。

mysql> insert into tb_user values(NULL,'李小刚',24,'male','广东省广州市');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tb_user(id,username,age) values(NULL,'李大刚',35);
Query OK, 1 row affected (0.01 sec)

mysql>
mysql> select * from tb_user;
+----+-----------+------+--------+--------------------+
| id | username  | age  | gender | address            |
+----+-----------+------+--------+--------------------+
|  1 | 李小刚    |   24 | male   | 广东省广州市       |
|  2 | 李大刚    |   35 | NULL   | NULL               |
+----+-----------+------+--------+--------------------+
2 rows in set (0.00 sec)

mysql> ^C
mysql> insert into tb_user(id,username,age) values(NULL,'李大刚',35);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tb_user;
+----+-----------+------+--------+--------------------+
| id | username  | age  | gender | address            |
+----+-----------+------+--------+--------------------+
|  1 | 李小刚    |   24 | male   | 广东省广州市       |
|  2 | 李大刚    |   35 | NULL   | NULL               |
|  3 | 李大刚    |   35 | NULL   | NULL               |
+----+-----------+------+--------+--------------------+
3 rows in set (0.00 sec)

我们可以看到id主键都在自动增加。

mysql> insert into tb_user values(NULL,'上官',18,'female','湖南省长沙市');
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> insert into tb_user values(NULL,'马鹏',23,'male','广东省广州市');
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> select * from tb_user;
+----+-----------+------+--------+--------------------+
| id | username  | age  | gender | address            |
+----+-----------+------+--------+--------------------+
|  1 | 李小刚    |   24 | male   | 广东省广州市       |
|  4 | 上官      |   18 | female | 湖南省长沙市       |
|  5 | 马鹏      |   23 | male   | 广东省广州市       |
+----+-----------+------+--------+--------------------+
3 rows in set (0.00 sec)

我做了删除操作,但是id仍然是网上升的。

如果用truncate tb_user,那么id就是从1开始。
 

你可能感兴趣的:(MySQL,mysql)