mysql插入数据自增

本文介绍了一个学生信息管理系统的设计与实现过程,包括创建数据库、学生表、课程表及成绩表,并进行了数据填充。通过SQL语句实现了数据的存储与管理。
create database stuDB;
/*更改数据库的编码格式*/
ALTER DATABASE stuDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use stuDB;


/*创建学生表*/
create table stuInfo
(
sno       varchar(10)  not null  primary key,
name      varchar(10)  not null,
sex  char(2) not null,
birthday  datetime not null,
phone     varchar(20)  not null,
address   varchar(50)  not null,
remark  text(500)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*更改表的编码格式*/
ALTER TABLE stuinfo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


insert into stuInfo(sno,name,sex,birthday,phone,address)
values('T123001','张三','男','1990-12-3','13156785958','大学城');
insert into stuInfo(sno,name,sex,birthday,phone,address)
values('T123002','李四','男','1989-7-29','13156786744','大学城');
insert into stuInfo(sno,name,sex,birthday,phone,address)
values('T123003','王五','女','1972-1-31','13767545673','杨家坪');
insert into stuInfo(sno,name,sex,birthday,phone,address)
values('T123004','周六','女','1992-1-31','13767545673','杨家坪');
insert into stuInfo(sno,name,sex,birthday,phone,address)
values('T123005','周杰伦','男','1994-1-31','13767545173','杨家坪');
insert into stuInfo(sno,name,sex,birthday,phone,address)
values('T123006','王大爷','女','2002-1-31','13767545673','杨家坪');
insert into stuInfo(sno,name,sex,birthday,phone,address)
values('T123007','欧巴','女','2001-1-31','16767545673','杨家坪');
insert into stuInfo(sno,name,sex,birthday,phone,address)
values('T123008','路飞','女','1982-1-31','18767545673','陈家沟');
insert into stuInfo(sno,name,sex,birthday,phone,address)
values('T123009','黑崎一护','女','1992-1-31','15767545673','杨家坪');
insert into stuInfo(sno,name,sex,birthday,phone,address)
values('T123010','宇智波鼬','男','1993-2-1','15767545673','杨家坪');


/*创建课程表*/
create table course
(
cno    int not null primary key AUTO_INCREMENT,
cname  varchar(30) not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*设置表的自增初始值从1开始*/
alter table course AUTO_INCREMENT=1;


/*更改表的编码格式*/
ALTER TABLE course DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


/*插入数据,一定要在表名后面跟上要插入的字段,不然不能自增*/
insert into course(cname) values('html');
insert into course(cname) values('stb');
insert into course(cname) values('c');
insert into course(cname) values('html');
insert into course(cname) values('sql');
insert into course(cname) values('c#');
insert into course(cname) values('java');


/*创建学生表*/
create table score
(
no   int not null primary key AUTO_INCREMENT,
sno  varchar(10)  not null references stuInfo(sno),
cno  int not null references course(cno),
cj   int not null check(cj>=0 and cj<=100) 
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


/*更改表的编码格式*/
ALTER TABLE score DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


/*插入数据,一定要在表名后面跟上要插入的字段,不然不能自增*/
insert into score(sno,cno,cj) values('T123001',1,89);
insert into score(sno,cno,cj) values('T123001',2,75);
insert into score(sno,cno,cj) values('T123001',3,60);
insert into score(sno,cno,cj) values('T123002',1,100);
insert into score(sno,cno,cj) values('T123002',3,50);
insert into score(sno,cno,cj) values('T123003',2,80);
insert into score(sno,cno,cj) values('T123003',3,70);
insert into score(sno,cno,cj) values('T123004',3,90);
insert into score(sno,cno,cj) values('T123005',2,72);
insert into score(sno,cno,cj) values('T123006',1,50);
insert into score(sno,cno,cj) values('T123015',2,50);



### 在 MySQL插入数据后返回自主键的方法 在 MySQL 中,当向表中插入数据时,如果该表包含一个定义为 `AUTO_INCREMENT` 的字段,则可以通过特定的语句或函数获取插入记录后生成的自主键值。以下是实现此功能的几种方法: #### 方法一:使用 `LAST_INSERT_ID()` 函数 `LAST_INSERT_ID()` 是 MySQL 提供的一个内置函数,用于返回当前会话中最后一次插入操作生成的自主键值[^1]。此函数的作用范围仅限于当前会话,因此不会受到其他会话的影响。 ```sql INSERT INTO main_user (id, sid) VALUES (1, 1); SELECT LAST_INSERT_ID() AS auto_increment_id; ``` 上述代码中,`INSERT` 语句完成数据插入后,`SELECT LAST_INSERT_ID()` 将返回插入记录的自主键值。 #### 方法二:结合编程语言接口 在使用编程语言(如 PHP、Python 等)与 MySQL 进行交互时,大多数数据库连接库都提供了直接获取自主键的功能。例如,在 Python 的 `pymysql` 库中,执行 `insert` 操作后可以调用 `cursor.lastrowid` 获取自主键值[^3]。 以下是一个 Python 示例: ```python import pymysql # 创建数据库连接 connection = pymysql.connect(host='localhost', user='root', password='password', database='test') try: with connection.cursor() as cursor: # 插入数据 sql = "INSERT INTO main_user (id, sid) VALUES (%s, %s)" cursor.execute(sql, (1, 1)) connection.commit() # 获取自主键 last_insert_id = cursor.lastrowid print(f"插入记录的自主键值为: {last_insert_id}") finally: connection.close() ``` #### 方法三:创建自序列临时表 如果需要更灵活地管理自字段,可以创建一个专门的自序列表,并通过事务控制手动分配自值[^4]。这种方式适用于需要跨多个表共享自序列的场景。 ```sql -- 创建自序列表 CREATE TABLE `sequence` ( `name` varchar(50) NOT NULL, `current_value` bigint(20) unsigned NOT NULL DEFAULT '0', `increment` int(11) NOT NULL DEFAULT '1', PRIMARY KEY (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 获取并更新自值 START TRANSACTION; UPDATE sequence SET current_value = current_value + increment WHERE name = 'main_user'; SELECT current_value FROM sequence WHERE name = 'main_user'; COMMIT; ``` 以上方法展示了如何通过自定义逻辑实现类似 `AUTO_INCREMENT` 的功能。 --- #### 注意事项 - `LAST_INSERT_ID()` 返回的是当前会话中最后一次插入操作生成的自主键值,因此在多线程或多用户环境下,确保每个会话独立操作。 - 如果表中存在多个 `AUTO_INCREMENT` 字段,则会导致语法错误[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值