/*
mysql資料庫練習
需求:建立一張表,包含四個字段(pid,name,age,***),然後使用儲存過程實現新增資料,要求
1 pid 為自增主鍵
2 插入資料的時候值新增姓名和年齡
3 性別採用隨機數的方式生成
測試資料如下:
張珊 23
李四 22
王五 33
田七 27
趙六 32*/
-- 建立測試資料庫
create database exer ;
-- 使用資料庫
use exer;
-- 建立表
drop table if exists tb_person;
create table tb_person(
pid varchar(10),
name varchar(20),
age integer,
*** varchar(1),
primary key(pid));
-- 建立儲存過程,如果以前的存在,先刪除
drop procedure if exists rand***;
delimiter //
create procedure rand***(in `name` varchar(20),in age int)
begin
-- 宣告字串變數pkey存放表的pid,***存放年齡
declare pkey,*** varchar(10);
-- 宣告int變數,用於存放生成性別的隨機數0 - 1
declare var int;
-- 查詢表tb_person的最大pid,存入pkey中
select max(pid) into pkey from tb_person;
-- 如果pkey是空的,就設定初始值為'p_0001'
if pkey is null then
set pkey = 'p_0001';
else
/*pkey存在
1 擷取pkey中的數字部分,加1後重新拼接成 'p_0001'的形式
2 重新賦值給pkey
*/set pkey = concat('p_',lpad(substring(pkey,instr(pkey,'_')+1)+1,4,0));
end if;
-- 設定var為rand()函式*2取整數既 0 或者 1
set var = floor(rand()*2);
/*如果var = 1 設定***為男,否則設定為女
*/if var = 1 then
set *** ='男';
else
set *** = '女';
end if;
-- 拼接新增sql,將引數傳遞進去
set @sqlcmd = concat('insert into tb_person(pid,name,age,***) value(\'',pkey,'\',\'',name,'\',',age,',\'',***,'\')');
-- 傳遞給 stmt
prepare stmt from @sqlcmd;
-- 執行sql
execute stmt;
deallocate prepare stmt;
-- 檢視拼接的sql
select @sqlcmd as `sql`;
end;
//delimiter;
-- 測試
call rand***('張珊',23);
call rand***('李四',22);
call rand***('王五',33);
call rand***('田七',27);
call rand***('趙六',32);
--檢視結果
mysql 主鍵自增語句 MySQL 自增主鍵
以下僅考慮 innodb 儲存引擎。自增主鍵有兩個性質需要考慮 單調性每次插入一條資料,其 id 都是比上一條插入的資料的 id 大,就算上一條資料被刪除。連續性插入成功時,其資料的 id 和前一次插入成功時資料的 id 相鄰。自增主鍵的單調性 為何會有單調性的問題?這主要跟自增主鍵最大值的獲取方式...
MySQL設定主鍵自增和非主鍵自增
mysql 每張表只能有1個自動增長字段,這個自動增長字段即可作為主鍵,也可以用作非主鍵使用,但是請注意將自動增長字段當做非主鍵使用時必須必須為其新增唯一索引,否則系統將會報錯。例如 將自動增長字段設定為主鍵 create table t1 id int auto increment primary...
mysql的自增主鍵
autotest表是測試表 mysql版本為5.7 結構如下 1.insert into指定自增主鍵的值時,自增主鍵會變嗎?以下是表中資料的初始值 接著插入自增主鍵9 如果insert指定自增主鍵的值不會導致auto increment值的變化的話,那麼接著不指定自增主鍵的值執行insert語句時,...