mysql增删改查

一、基本概念

1.1 行和列

行(记录):用来描述一个对象的信息

列(字段):用来描述对象的一个属性

1.2 常用的数据类型

int :整型

float :单精度浮点 4字节32位

double :双精度浮点 8字节64位

char :固定长度的字符类型

varchar :可变长度的字符类型

text :文本

image :图片

decimal(5,2) :5个有效长度数字,小数点后面有2位

1.3 数据类型大全

整型

MySQL数据类型含义(有符号)
tinyint(m)1个字节 范围(-128~127)
smallint(m)2个字节 范围(-32768~32767)
mediumint(m)3个字节 范围(-8388608~8388607)
int(m)4个字节 范围(-2147483648~2147483647)
bigint(m)8个字节 范围(±9.22*10的18次方)

浮点数

MySQL数据类型含义
float(m,d)单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d)双精度浮点型 16位精度(8字节) m总个数,d小数位

设一个字段定义为float(6,3)

如果插入一个数123.45678,实际数据库里存的是123.457;

如果插入数12.123456,存储的是12.123;

如果插入12.12,存储的是12.120。

字符串

MySQL数据类型含义
char(n)固定长度,最多255个字符
varchar(n)固定长度,最多65535个字符
tinytext可变长度,最多255个字符
text可变长度,最多65535个字符
mediumtext可变长度,最多2的24次方-1个字符
longtext可变长度,最多2的32次方-1个字符

char和varchar的比较:

char相应速度快,但是占用固定大小;

varchar变长,但是会产生数据碎片;

二、查看数据库

在这里插入图片描述

在这里插入图片描述

2.1 查看当前服务器中的数据库

#大小写不区分,分号“;”表示结束

SHOW DATABASES;	

在这里插入图片描述

2.2 查看数据库中包含的表

法一:进入库查看 
USE 数据库名;
SHOW TABLES; 

在这里插入图片描述

法二:在库外查看 
show tables from mysql; 

在这里插入图片描述

2.3 查看表的结构(字段)

法一:在库内查看 
use mysql; 
describe user; 
desc user; #简写 

法二:在库外查看 d
esc mysql.user; 

注: desc user \G;  #以列来显示每条记录 

在这里插入图片描述

在这里插入图片描述

2.4 查看mysql版本

#在mysql内查看mysql版本 
select version(); 

在这里插入图片描述

#在linux系统中查看mysql版本 
mysql -V 

在这里插入图片描述

三、SQL语句

SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。

SQL语句分类:

语句 代表的意思

DDL 数据定义语言,用于创建数据库对象,如库、表、索引等(create )

DML 数据操纵语言,用于对表中的数据进行管理(insert drop delete update )

DQL 数据查询语言,用于从数据表中查找符合条件的数据记录(select )使用最多

DCL 数据控制语言,用于设置或者更改数据库用户或角色权限(grant )

查询语句使用的熟练就是DBA(数据库管理员)

3.1创建及删除数据库和表

3.1.1 创建新的数据库

CREATE DATABASE 数据库名;  
#创建一个名为student的数据库 
mysql> create database student; 

在这里插入图片描述

3.1.2 创建新的表

主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);

use student; 
create table info(id int,name char(10) not null,age int,sex char(4),score decimal(5,2)); 
desc info;  

在这里插入图片描述

3.1.3 删除指定的数据表

在数据库内删

mysql> create table info1(id int,name char(10) not null,age int,sex char(4),sccore decimal(5,2)); 
mysql> drop table info1; 

在这里插入图片描述

在数据库外删

在这里插入图片描述

3.1.4删除指定的数据库

DROP DATABASE 数据库名; 
mysql> drop database student; 

在这里插入图片描述

3.2 管理表中的数据记录

3.2.1向数据表中插入新的数据记录

#向数据表中插入新的数据记录
insert into 表名(字段1,字段2,字段3values(字段1的值,字段2的值,字段3的值);

mysql> insert into info(id,name,age,sex,score) values(1,'小强',20,'男',95.5);
Query OK, 1 row affected (0.00 sec)

mysql> insert into info(id,name,age,sex,score) values(2,'小红',19,'女',90.9);
Query OK, 1 row affected (0.00 sec)

mysql> select * from info;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | score |
+------+--------+------+------+-------+
|    1 | 小强   |   20 || 95.50 |
|    2 | 小红   |   19 || 90.90 |
+------+--------+------+------+-------+
2 rows in set (0.00 sec)

在这里插入图片描述

直接使用表明加入字段
mysql> insert into info values(3,'小明',25,'男',99.99);
Query OK, 1 row affected (0.00 sec)

mysql> select * from info;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | score |
+------+--------+------+------+-------+
|    1 | 小强   |   20 || 95.50 |
|    2 | 小红   |   19 || 90.90 |
|    3 | 小明   |   25 || 99.99 |
+------+--------+------+------+-------+
3 rows in set (0.00 sec)

在这里插入图片描述

可以指定字段添加
mysql> insert into info(id,name,age)values(4,'小芳',18);
Query OK, 1 row affected (0.00 sec)

mysql> select * from info;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | score |
+------+--------+------+------+-------+
|    1 | 小强   |   20 || 95.50 |
|    2 | 小红   |   19 || 90.90 |
|    3 | 小明   |   25 || 99.99 |
|    4 | 小芳   |   18 | NULL |  NULL |
+------+--------+------+------+-------+
4 rows in set (0.00 sec)

在这里插入图片描述

3.2.2 查询数据记录

#格式
SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
 
#示例1:查看所有数据
mysql> select * from info;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | score |
+------+--------+------+------+-------+
|    1 | 小强   |   20 || 95.50 |
|    2 | 小红   |   19 || 90.90 |
|    3 | 小明   |   25 || 99.99 |
|    4 | 小芳   |   18 | NULL |  NULL |
+------+--------+------+------+-------+
4 rows in set (0.00 sec)
#示例2:查询指定数据
 mysql> select name from info where id=1;
+--------+
| name   |
+--------+
| 小强   |
+--------+
1 row in set (0.00 sec)
#示例3:只显示头2行
mysql> select * from info limit 2;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | score |
+------+--------+------+------+-------+
|    1 | 小强   |   20 || 95.50 |
|    2 | 小红   |   19 || 90.90 |
+------+--------+------+------+-------+
2 rows in set (0.00 sec)

mysql> select * from info where id<=2;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | score |
+------+--------+------+------+-------+
|    1 | 小强   |   20 || 95.50 |
|    2 | 小红   |   19 || 90.90 |
+------+--------+------+------+-------+
2 rows in set (0.00 sec)
 
 
#示例4:显示2-4行
mysql> select * from info limit 2,2;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | score |
+------+--------+------+------+-------+
|    3 | 小明   |   25 || 99.99 |
|    4 | 小芳   |   18 | NULL |  NULL |
+------+--------+------+------+-------+
2 rows in set (0.01 sec)
mysql> select * from info where id>2 and id<=4;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | score |
+------+--------+------+------+-------+
|    3 | 小明   |   25 || 99.99 |
|    4 | 小芳   |   18 | NULL |  NULL |
+------+--------+------+------+-------+
2 rows in set (0.00 sec)

示例1:查看所有数据

在这里插入图片描述

示例2:查询指定数据

在这里插入图片描述

示例3:只显示头2行

在这里插入图片描述

示例4:显示2-4行

在这里插入图片描述

3.3修改、更新数据表中的数据记录

#格式
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
 
#修改分数
mysql> select * from info where id=4;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | score |
+------+--------+------+------+-------+
|    4 | 小芳   |   18 | NULL | 85.00 |
+------+--------+------+------+-------+
1 row in set (0.00 sec)

在这里插入图片描述

3.4 在数据表中删除指定的数据记录

#格式:
DELETE FROM 表名 [WHERE 条件表达式];
 
删除表中id为4的记录
mysql> delete from info where id=4;
Query OK, 1 row affected (0.00 sec)

mysql> select * from info;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | score |
+------+--------+------+------+-------+
|    1 | 小强   |   20 || 95.50 |
|    2 | 小红   |   19 || 90.90 |
|    3 | 小明   |   25 || 99.99 |
+------+--------+------+------+-------+
3 rows in set (0.00 sec)

在这里插入图片描述

3.5修改表名和表结构

3.5.1 修改表名

ALTER TABLE 旧表名 RENAME 新表名;
 
#将表名info修改成base
mysql> alter table info rename base;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| base              |
| test1             |
| test2             |
+-------------------+
3 rows in set (0.00 sec)

在这里插入图片描述

3.5.2 扩展表结构(增加字段)

#default 'default值':表示此字段设置默认值 地址未填写!;可与 NOT NULL 配合使用
ALTER TABLE 表名 ADD address varchar(50) default 'default值';

#alter table base add address char(100) default 'china';

在这里插入图片描述

3.5.3修改字段(列)名,添加唯一键

唯一键的作用,设置这个字段不能重复,比如说身份证、手机号,一般不作为主键,但也不能重复,就设置为唯一键

#格式
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];
#示例:
mysql> alter table base change id snum char(4) unique key;
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> desc base;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| snum    | char(4)      | YES  | UNI | NULL    |       |
| name    | char(10)     | NO   |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| sex     | char(4)      | YES  |     | NULL    |       |
| score   | decimal(5,2) | YES  |     | NULL    |       |
| address | char(100)    | YES  |     | china   |       |
+---------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

#删除唯一约束
drop table info unique(key);

在这里插入图片描述

3.5.4删除字段

#格式
ALTER TABLE 表名 drop 字段名;
#示例
mysql> alter table base drop age;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from base;
+------+--------+------+-------+---------+
| snum | name   | sex  | score | address |
+------+--------+------+-------+---------+
| 1    | 小强   || 95.50 | china   |
| 2    | 小红   || 90.90 | china   |
| 3    | 小明   || 99.99 | china   |
+------+--------+------+-------+---------+
3 rows in set (0.00 sec)

在这里插入图片描述

3.6 使用 if 判断 创建表并测试自增和填充

create table if not exists stevelu (
id int(4) zerofill primary key auto_increment,
name char(20) not null,
sid int(18) not null unique key,
ge int(3) not null,
address char(10insert0));

解析:
if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建

int(4) zerofill:表示若数值不满4位数,则前面用“0”填充,例0001

auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;
自增长字段必须是主键;
如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次;
如果插入记录时给定id,下一次自增长根据最大的id开始自增长

unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键

not null:表示此字段不允许为NULL

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四、数据表高级操作

4.1克隆表——将数据表的数据记录生成到新的表中

法一:先创建再导入

#通过 LIKE 方法,复制 info 表结构生成 test01 表
create table test1 like info;		
#导入数据
insert into test1 select * from info;

 
mysql> create table test1 like info;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test1 select * from info;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test1;
+------+--------+------+-------+---------+
| snum | name   | sex  | score | address |
+------+--------+------+-------+---------+
| 1    | 小强   || 95.50 | china   |
| 2    | 小红   || 90.90 | china   |
| 3    | 小明   || 99.99 | china   |
+------+--------+------+-------+---------+
3 rows in set (0.00 sec)	

在这里插入图片描述

法二:创建的时候同时导入

crmysql> create table test2 (select * from info);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test2;
+------+--------+------+-------+---------+
| snum | name   | sex  | score | address |
+------+--------+------+-------+---------+
| 1    | 小强   || 95.50 | china   |
| 2    | 小红   || 90.90 | china   |
| 3    | 小明   || 99.99 | china   |
+------+--------+------+-------+---------+
3 rows in set (0.00 sec)

在这里插入图片描述

#获取数据表的表结构、索引等信息

 show create table test1\G; 

在这里插入图片描述

4.2 清空表——删除表内的所有数据

4.2.1 deldte删除

DELETE清空表后,返回的结果内有删除的记录条目;DELETE工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 后面继续自增写入记录。

#delete from 表名; 
mysql> delete from test1; 
Query OK, 3 rows affected (0.00 sec)

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

在这里插入图片描述

4.2.2 truncate删除

TRUNCATE 清空表后,没有返回被删除的条目;TRUNCATE 工作时是将表结构按原样重新建立,因此在速度上 TRUNCATE 会比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表内数据后,ID 会从 1 开始重新记录(相当于格式化)

truncate table info; 

4.2.3创建临时表

临时表创建成功之后,使用SHOW TABLES命令是看不到创建的临时表的,临时表会在连接退出后被销毁。 如果在退出连接之前,也可以可执行增删改查等操作,比如使用 DROP TABLE 语句手动直接删除临时表。

#创建临时表test03
create temporary table test03 (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null,
cardid int(18) not null unique key,
score varchar(50));

在这里插入图片描述

临时表在重新登录数据库后会被自动销毁

4.3 创建外键约束

保证数据的完整性和一致性

外键的定义:如果同一个属性字段x在表一中是主键,而在表二中不是主键,则字段x称为表二的外键。

主键表与外键表的理解:

(1)以公共关键字作主键的表为主键表(父表、主表)

(2)以公共关键字作为外键的表为外键表(从表、外表)

与外键关联的子表的字段必须设置为主键。要求主表外键字段和子表的字段具备相同的数据类型、字符长度和约束。

专业课程表

课程ID课程名称
1云计算
2大数据
3JAVA
4前端
主键

学生信息表

学号姓名年龄课程ID
1zhangsan181
2lisi202
3wangwu224
4zhaoliu231
5zhuba242
外键
#为主表设置主键
mysql> alter table class add constraint PK_CID primary key(cid);

#主表插入记录
mysql> insert into class values(1,'云计算');
mysql> insert into class values(2,'大数据');
mysql> insert into class values(3,'java');
mysql> insert into class values(4,'前端');

#为从表设置外键
mysql> alter table student ADD constraint FK_CLASSID foreign key(classid) references class(cid);

#从表插入记录
mysql> insert into student values(1,'zhangsan',18,1);
mysql> insert into student values(2,'lisi',20,2);
mysql> insert into student values(3,'wangwu',22,4);
mysql> insert into student values(4,'zhaoliu',23,1);
mysql> insert into student values(5,'zhuba',24,2);

主表:class表结构、记录如下

子表:student表结构、记录如下

在这里插入图片描述

在这里插入图片描述

删除主表记录失败,只有将从表中与之关联的记录删掉,主表才能删掉该记录

在这里插入图片描述

在这里插入图片描述

此时不可以删除主表,因为主表被外表引用,要查看和删除外键约束 ,如果要删除外键约束字段先删除外键约束,再删除外键名

删除外键步骤:

1.查看外键别名
mysql> show create table student\G;
2.删除外键约束
mysql> alter table student drop foreign key FK_CLASSID;
3.删除别名
mysql> alter table student drop key FK_CLASSID;

在这里插入图片描述

在这里插入图片描述

做了外键约束后,

要插入新的数据记录时,需要先在主键表中插入相关数据,才能在外键表插入相关数据,插入数据时,是先主后从

要删除数据记录时,要先删除外键表的相关数据,才能在主键表删除相关数据记录,删除数据时,是先从再主

总结

六种常见的约束

约束名命令含义
主键约束primary key一个表只能有一个主键,该字段不能为空
外键约束foreign key保证数据的完整性和一致性(插入数据时,是先主后从,删除数据时,是先从再主)
非空约束not null不能为空
唯一性约束unique[keylindex]不能重复
默认值约束default没有指定值的时候用默认值填充
自增约束auto_increment必须在主键上,每添加一条记录自增1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Steve lu

感谢大佬的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值