菜鸟笔记
提升您的技术认知

mysql数据库 表操作 ️-ag真人游戏

脑图

查看所有表

show tables;

mysql> show tables;
empty set (0.00 sec)
mysql> show tables from db12;
empty set (0.00 sec)

创建班级表 grade

id 主键
grade_name 班名 varchar(100)

mysql> create table grade(
    -> id int primary key auto_increment,
    -> grade_name varchar(100) comment "班级名字"
    -> );
query ok, 0 rows affected (0.06 sec)

创建学生表 stu,添加外键约束

id 主键
name 学生姓名 varchar(100) not null
sex 学生性别

创建数据表 stu ,并在表 stu 上创建外键约束,让它的键 gradeid 作为外键关联到表 grade 的主键 id ,sql这样写

[constraint <外键名>] foreign key 字段名 [,字段名2,…]
references <主表名> 主键列1 [,主键列2,…]
create table stu (
  id int primary key auto_increment,
  name varchar (100) not null,
  age int (3),
  bir date,
  english int (3),
  chinese int (3),
  gradeid int,
  constraint fk_stu_grade foreign key (gradeid) references grade (id)
) ;

注意:从表的外键关联的必须是主表的主键,且主键和外键的数据类型必须一致。例如,两者都是 int 类型,或者都是 char 类型。如果不满足这样的要求,在创建从表时,就会出现“error 1005(hy000): can’t create table”错误

在修改表时添加外键约束

假如在创建表时,没有添加外键约束,那么可以在创建表后通过修改表给表添加外键约束,语法如下

alter table <数据表名> add constraint <外键名>
foreign key(<列名>) references <主表名> (<列名>);
create table stu (
  id int primary key auto_increment,
  name varchar (100) not null,
  age int (3),
  bir date,
  english int (3),
  chinese int (3),
  gradeid int
) ;
alter table stu 
  add constraint fk_stu_grage foreign key (gradeid) references grade (id) ;

注意:在为已经创建好的数据表添加外键约束时,要确保添加外键约束的列的值全部来源于主键列,并且外键列不能为空。

删除外键约束

通过外键名删除外键,这里演示一下,删除之后会继续添加上的,因为需要这个外键约束

alter table <表名> drop foreign key <外键约束名>;
alter table stu drop foreign key fk_stu_grage;

查看表结构

desc stu;

显示存储引擎的状态信息

show engines;

修改表

修改表名 rename to

mysql> alter table stu rename to stus;
query ok, 0 rows affected (0.03 sec)
mysql> show tables;
 ---------------- 
| tables_in_db12 |
 ---------------- 
| grade          |
| stus           |
 ---------------- 
2 rows in set (0.00 sec)

添加一列 add

alter table 表名 add 列名 列数据类型;

修改数据类型 modify

alter table 表名 modify 列名 新的数据类型;

修改字段位置置顶 first

alter table 表名 modify 字段名 字段属性 first;

修改字段位置再什么之后 after

alter table 表名 modify 字段 字段属性 after 字段;

修改列名和数据类型 change

alter table 表名 change 原列名 新列名 新数据类型;

删除列 drop

alter table 表名 drop 列名;

删除表

直接删除

drop table 表名;

判断存在再删除

drop table if exists 表名;

脑图

语法

insert into 表名(字段,字段……) values(与字段对应);

mysql> desc stus;
 --------- -------------- ------ ----- --------- ---------------- 
| field   | type         | null | key | default | extra          |
 --------- -------------- ------ ----- --------- ---------------- 
| id      | int(11)      | no   | pri | null    | auto_increment |
| gradeid | int(11)      | yes  | mul | null    |                |
| name    | varchar(100) | no   |     | null    |                |
| age     | int(3)       | yes  |     | null    |                |
| bir     | date         | yes  |     | null    |                |
| english | int(3)       | yes  |     | null    |                |
| chinese | int(3)       | yes  |     | null    |                |
 --------- -------------- ------ ----- --------- ---------------- 
7 rows in set (0.00 sec)
mysql> desc grade;
 ------------ -------------- ------ ----- --------- ---------------- 
| field      | type         | null | key | default | extra          |
 ------------ -------------- ------ ----- --------- ---------------- 
| id         | int(11)      | no   | pri | null    | auto_increment |
| grade_name | varchar(100) | yes  |     | null    |                |
 ------------ -------------- ------ ----- --------- ---------------- 
2 rows in set (0.01 sec)

给指定列添加数据

insert into stus(name,age,bir,english,gradeid) values("周棋洛",18,"2002-06-01",78,1);
mysql> select * from stus;
 ---- --------- ----------- ------ ------------ --------- --------- 
| id | gradeid | name      | age  | bir        | english | chinese |
 ---- --------- ----------- ------ ------------ --------- --------- 
|  1 |       1 | 周棋洛    |   18 | 2002-06-01 |      78 |    null |
 ---- --------- ----------- ------ ------------ --------- --------- 
1 row in set (0.00 sec)

给全部列添加数据

mysql> insert into stus values(2,2,"张郁苗",18,"2002-11-07",130,120);
query ok, 1 row affected (0.03 sec)

给全部列添加数据时,可以简写,不建议,因为代码可读性变差,推荐写成下面这样,一眼就能知道要插入的字段是什么

mysql> insert into stus(gradeid,name,age,bir,english,chinese) values
    -> (1,"小猪佩奇",6,"2015-06-10",34,23);
query ok, 1 row affected (0.03 sec)
mysql> select * from stus;
 ---- --------- -------------- ------ ------------ --------- --------- 
| id | gradeid | name         | age  | bir        | english | chinese |
 ---- --------- -------------- ------ ------------ --------- --------- 
|  1 |       1 | 周棋洛       |   18 | 2002-06-01 |      78 |    null |
|  2 |       2 | 张郁苗       |   18 | 2002-11-07 |     130 |     120 |
|  3 |       1 | 小猪佩奇     |    6 | 2015-06-10 |      34 |      23 |
 ---- --------- -------------- ------ ------------ --------- --------- 
3 rows in set (0.00 sec)

一次添加多条数据

mysql> insert into stus(gradeid,name,age,bir,english,chinese) values
    -> (3,"猪妈妈",7,"2012-09-11",56,78),
    -> (2,"谷歌",6,"2000-11-11",100,110);
query ok, 2 rows affected (0.00 sec)
records: 2  duplicates: 0  warnings: 0
mysql> select * from stus;
 ---- --------- -------------- ------ ------------ --------- --------- 
| id | gradeid | name         | age  | bir        | english | chinese |
 ---- --------- -------------- ------ ------------ --------- --------- 
|  1 |       1 | 周棋洛       |   18 | 2002-06-01 |      78 |    null |
|  2 |       2 | 张郁苗       |   18 | 2002-11-07 |     130 |     120 |
|  3 |       1 | 小猪佩奇     |    6 | 2015-06-10 |      34 |      23 |
|  4 |       3 | 猪爸爸       |    8 | 2012-09-12 |      34 |      56 |
|  5 |       3 | 猪妈妈       |    7 | 2012-09-11 |      56 |      78 |
|  6 |       2 | 谷歌         |    6 | 2000-11-11 |     100 |     110 |
 ---- --------- -------------- ------ ------------ --------- --------- 
6 rows in set (0.00 sec)

查看最后一次添加的主键值

select last_insert_id();

mysql> select last_insert_id();
 ------------------ 
| last_insert_id() |
 ------------------ 
|                5 |
 ------------------ 
1 row in set (0.03 sec)

脑图

语法

update 表 set 要更新字段 = 要更新成啥 where 更新条件;

注意:如果不使用 where 字句进行限制,就会把表里所有记录都修改了,凉凉了,可别怪本帅哥没提醒你

更新一个字段

修改stus表名字叫周棋洛的生日,改为 2001-06-01

mysql> update stus set bir = "2001-06-01" where name = "周棋洛";
query ok, 1 row affected (0.02 sec)
rows matched: 1  changed: 1  warnings: 0
mysql> select * from stus;
 ---- --------- -------------- ------ ------------ --------- --------- 
| id | gradeid | name         | age  | bir        | english | chinese |
 ---- --------- -------------- ------ ------------ --------- --------- 
|  1 |       1 | 周棋洛       |   18 | 2001-06-01 |      78 |    null |
|  2 |       2 | 张郁苗       |   18 | 2002-11-07 |     130 |     120 |
|  3 |       1 | 小猪佩奇     |    6 | 2015-06-10 |      34 |      23 |
|  4 |       3 | 猪爸爸       |    8 | 2012-09-12 |      34 |      56 |
|  5 |       3 | 猪妈妈       |    7 | 2012-09-11 |      56 |      78 |
|  6 |       2 | 谷歌         |    6 | 2000-11-11 |     100 |     110 |
 ---- --------- -------------- ------ ------------ --------- --------- 
6 rows in set (0.00 sec)

更新多个字段

把id为6的名字改为 胡歌,年龄改为24

mysql> update stus set name = "胡歌",age = 24 where id = 6;
query ok, 1 row affected (0.00 sec)
rows matched: 1  changed: 1  warnings: 0
mysql> select * from stus;
 ---- --------- -------------- ------ ------------ --------- --------- 
| id | gradeid | name         | age  | bir        | english | chinese |
 ---- --------- -------------- ------ ------------ --------- --------- 
|  1 |       1 | 周棋洛       |   18 | 2001-06-01 |      78 |    null |
|  2 |       2 | 张郁苗       |   18 | 2002-11-07 |     130 |     120 |
|  3 |       1 | 小猪佩奇     |    6 | 2015-06-10 |      34 |      23 |
|  4 |       3 | 猪爸爸       |    8 | 2012-09-12 |      34 |      56 |
|  5 |       3 | 猪妈妈       |    7 | 2012-09-11 |      56 |      78 |
|  6 |       2 | 胡歌         |   24 | 2000-11-11 |     100 |     110 |
 ---- --------- -------------- ------ ------------ --------- --------- 
6 rows in set (0.00 sec)

ignore关键字

当使用update语句进行多行更新,如果在更新过程中出错了,则整个update语句都会被取消,恢复到更新之前,如果你想即使发生错误,也继续进行更新,可以使用ignore关键字

语法:

update ignore 表 set 要更新字段 = 要更新成啥 where 更新条件;

设置为null

当我们想要将记录的某个字段或多个字段改为空,就可以将它修改为 null ,而不是空字符串,mysql中的空为null

例如:
修改id为3的中文成绩为null空

mysql> update stus set chinese = null where id = 3;
query ok, 1 row affected (0.03 sec)
rows matched: 1  changed: 1  warnings: 0
mysql> select * from stus;
 ---- --------- -------------- ------ ------------ --------- --------- 
| id | gradeid | name         | age  | bir        | english | chinese |
 ---- --------- -------------- ------ ------------ --------- --------- 
|  1 |       1 | 周棋洛       |   18 | 2001-06-01 |      78 |    null |
|  2 |       2 | 张郁苗       |   18 | 2002-11-07 |     130 |     120 |
|  3 |       1 | 小猪佩奇     |    6 | 2015-06-10 |      34 |    null |
|  4 |       3 | 猪爸爸       |    8 | 2012-09-12 |      34 |      56 |
|  5 |       3 | 猪妈妈       |    7 | 2012-09-11 |      56 |      78 |
|  6 |       2 | 胡歌         |   24 | 2000-11-11 |     100 |     110 |
 ---- --------- -------------- ------ ------------ --------- --------- 
6 rows in set (0.00 sec)

脑图

语法

delete from 表 where 限制条件;

删除一行记录

删除id为6的数据

mysql> delete from stus where id = 6;
query ok, 1 row affected (0.03 sec)
mysql> select * from stus;
 ---- --------- -------------- ------ ------------ --------- --------- 
| id | gradeid | name         | age  | bir        | english | chinese |
 ---- --------- -------------- ------ ------------ --------- --------- 
|  1 |       1 | 周棋洛       |   18 | 2001-06-01 |      78 |    null |
|  2 |       2 | 张郁苗       |   18 | 2002-11-07 |     130 |     120 |
|  3 |       1 | 小猪佩奇     |    6 | 2015-06-10 |      34 |    null |
|  4 |       3 | 猪爸爸       |    8 | 2012-09-12 |      34 |      56 |
|  5 |       3 | 猪妈妈       |    7 | 2012-09-11 |      56 |      78 |
 ---- --------- -------------- ------ ------------ --------- --------- 
5 rows in set (0.00 sec)

删除所有记录

警告:不要省略 where 子句,如果不使用 where 子句进行限制,别怪我没提醒你,你会把表中所有行全部干掉,准备后事吧!兄弟

delete from stus;

这里就不执行了

注意:delete语句从表中删除行,甚至删除表中所有行,但是,delete不删除表本身

删除所有记录(效率高)

如果你想从表中删除所有数据,不要使用delete,可以使用 truncate 表名,它完成相同的工作,但是速度更快,因为它实际上是删除原来的表并重新创建一张表,而不是逐行删除表中的数据

mysql> select * from user;
 ------ ------ 
| id   | name |
 ------ ------ 
|    1 | hah1 |
 ------ ------ 
1 row in set (0.00 sec)
mysql> truncate user;
query ok, 0 rows affected (0.06 sec)
mysql> select * from user;
empty set (0.00 sec)
网站地图