MySQL序列以及生成主鍵編號記錄

廣告

預留-------花茶(決明子 菊花 枸杞 紅豆薏米茶 五寶茶 增發茶 等等 )
聯繫人 我

操作MySQL常用命令

#啓動mysql服務器
net start mysql
#關閉 
net stop mysql
#登錄mysql
mysql -u root -p
#退出MYSQL命令
exit

生成主鍵編號記錄

##生成主鍵編號
select (select CONCAT('S','012345678912',DATE_FORMAT(now(),'%Y%m%d'),LPAD(nextval('SEQ_TEST'),4,'0'))) as xxzjbh from dual;
#1: 使用CONCAT(str,str,..)函數拼接 將多個字符串連接成一個字符串
#2: 使用DATE_FORMAT(now(),'%Y%m%d') 生成八位年月日
#3: 使用LPAD()函數 lpad(str,len,padstr)  用字符串 padstr對 str進行左邊填補直至它的長度達到 len個字符長度,然後返回 str。如果 str的長度長於 len',那麼它將被截除到 len個字符。
#4: 調用自己的nextval()函數,用於生成序列
CREATE DEFINER = `root` @`localhost` FUNCTION `nextval` ( str VARCHAR ( 50 ) ) RETURNS INT ( 11 ) BEGIN
DECLARE
	i INT;

SET i = ( SELECT start_value FROM mysql_seq WHERE NAME = str );
UPDATE mysql_seq 
SET start_value = i + increment_value 
WHERE
	NAME = str;
RETURN i;

END
#5: 在寫函數之前要新建序列表 mysql_seq
-- 創建序列專用表   序列名 初始值 步長1
create table mysql_seq (
	name varchar(50) not null primary key,
	start_value int not null,
	increment_value int not null default 1
);
-- 創建序列
insert into mysql_seq values('SEQ_TEST',1,1);

MySQL時間類型筆記

select * from student where time <= DATE_FORMAT('2019-10-31','%Y/%m/%d 23:59:59') and time >= DATE_FORMAT('2019-10-31','%Y/%m/%d 00:00:00') order by time desc

--當前時間 年月日 時分秒
select now();
--當前日期
select current_date();
--當前時間
select current_time();
--獲取時間格式
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s');
SELECT DATE_FORMAT('2018-10-22 16:08:07','%Y年%m月%d日 %H時%i分%s秒');

--時間格式
		date_format(date,'%Y-%m-%d') -------------->oracle中的to_char();
  str_to_date(date,'%Y-%m-%d') -------------->oracle中的to_date();
  %Y:代表4位的年份
  %y:代表2爲的年份
  %m:代表月, 格式爲(01……12)
  %c:代表月, 格式爲(1……12)
  %d:代表月份中的天數,格式爲(00……31)
  %e:代表月份中的天數, 格式爲(0……31)
  %H:代表小時,格式爲(00……23)
  %k:代表 小時,格式爲(0……23)
  %h: 代表小時,格式爲(01……12)
  %I: 代表小時,格式爲(01……12)
  %l :代表小時,格式爲(1……12)
  %i: 代表分鐘, 格式爲(00……59)
  %r:代表 時間,格式爲12 小時(hh:mm:ss [AP]M)
  %T:代表 時間,格式爲24 小時(hh:mm:ss)
  %S:代表 秒,格式爲(00……59)
  %s:代表 秒,格式爲(00……59)
  SELECT DATE_FORMAT(20130111191640,'%Y-%m-%d %H:%i:%s') as time
  select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s') as time

select STR_TO_DATE(now(),'%Y-%m-%d %H:%i:%s') as time


--函數
--返回字符串str的第一個字符的ASCII值(str是空串的時候返回0)
select ASCII('10')

序列的創建

##mysql 在創建函數的時候一定要先開啓函數功能
##查看函數功能是否打開
show variables like '%func%';  
##設置函數功能打開or關閉      等於 1 開啓 
set global log_bin_trust_function_creators=1; 


-- 創建序列專用表   序列名 初始值 步長1
create table mysql_seq (
	name varchar(50) not null primary key,
	start_value int not null,
	increment_value int not null default 1
);
 
-- 創建序列
insert into mysql_seq values('SEQ_TEST',1,1);
 
 
-- 定義獲取序列函數
DELIMITER //
create  function nextval(str varchar(50)) returns integer
begin
	declare i int;
	set i=(select start_value from mysql_seq where name=str);
	update mysql_seq
		set start_value=i+increment_value
	where name=str;
return i;
end;
//
 
 
-- 使用序列
select nextval('SEQ_TEST');
select nextval('SEQ_TEST');
select nextval('SEQ_TEST');

############################# 和上一個同樣 就是命名不一樣

##1.創建表emp_seq,用來存放sequence值:
create table emp_seq (
name varchar(50) not null primary key,
start_value int not null,
increment_value int not null default 1
);

##2.手動插入數據:
insert into emp_seq values('empno',1,1);


##3.定義函數 nextval:
DELIMITER //
create function nextval(str varchar(50)) returns integer
begin
declare i int;
set i=(select start_value from emp_seq where name=str);
update emp_seq
set start_value=i+increment_value
where name=str;
return i;
end;
//

##4.恢復默認的語句結束符:
DELIMITER ;
 
select nextval('empno') from dual;

MySQL中文轉漢語拼音(未解決多音字,生僻字等問題)

使用場景 在查詢姓名的時候,只知道名字讀音但是不清楚漢字,所以需要把中文轉成漢語拼音,進行查詢,但是無法解決多音字問題以及生僻字等問題;
個人覺得在入信息的時候,就把姓名的漢語拼音給記錄上,這樣方便之後查詢

-- 創建漢字拼音對照臨時表
CREATE TABLE IF NOT EXISTS `t_base_pinyin` (
  `pin_yin_` varchar(255) CHARACTER SET gbk NOT NULL,
  `code_` int(11) NOT NULL,
  PRIMARY KEY (`code_`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- 插入數據
INSERT INTO t_base_pinyin (pin_yin_,code_)  VALUES ("a", 20319),("ai", 20317),("an", 20304),("ang", 20295),("ao", 20292),("ba", 20283),("bai", 20265),("ban", 20257),("bang", 20242),("bao", 20230),("bei", 20051),("ben", 20036),("beng", 20032),("bi", 20026),("bian", 20002),("biao", 19990),("bie", 19986),("bin", 19982),("bing", 19976),("bo", 19805),("bu", 19784),("ca", 19775),("cai", 19774),("can", 19763),("cang", 19756),("cao", 19751),("ce", 19746),("ceng", 19741),("cha", 19739),("chai", 19728),("chan", 19725),("chang", 19715),("chao", 19540),("che", 19531),("chen", 19525),("cheng", 19515),("chi", 19500),("chong", 19484),("chou", 19479),("chu", 19467),("chuai", 19289),("chuan", 19288),("chuang", 19281),("chui", 19275),("chun", 19270),("chuo", 19263),("ci", 19261),("cong", 19249),("cou", 19243),("cu", 19242),("cuan", 19238),("cui", 19235),("cun", 19227),("cuo", 19224),("da", 19218),("dai", 19212),("dan", 19038),("dang", 19023),("dao", 19018),("de", 19006),("deng", 19003),("di", 18996),("dian", 18977),("diao", 18961),("die", 18952),("ding", 18783),("diu", 18774),("dong", 18773),("dou", 18763),("du", 18756),("duan", 18741),("dui", 18735),("dun", 18731),("duo", 18722),("e", 18710),("en", 18697),("er", 18696),("fa", 18526),("fan", 18518),("fang", 18501),("fei", 18490),("fen", 18478),("feng", 18463),("fo", 18448),("fou", 18447),("fu", 18446),("ga", 18239),("gai", 18237),("gan", 18231),("gang", 18220),("gao", 18211),("ge", 18201),("gei", 18184),("gen", 18183),("geng", 18181),("gong", 18012),("gou", 17997),("gu", 17988),("gua", 17970),("guai", 17964),("guan", 17961),("guang", 17950),("gui", 17947),("gun", 17931),("guo", 17928),("ha", 17922),("hai", 17759),("han", 17752),("hang", 17733),("hao", 17730),("he", 17721),("hei", 17703),("hen", 17701),("heng", 17697),("hong", 17692),("hou", 17683),("hu", 17676),("hua", 17496),("huai", 17487),("huan", 17482),("huang", 17468),("hui", 17454),("hun", 17433),("huo", 17427),("ji", 17417),("jia", 17202),("jian", 17185),("jiang", 16983),("jiao", 16970),("jie", 16942),("jin", 16915),("jing", 16733),("jiong", 16708),("jiu", 16706),("ju", 16689),("juan", 16664),("jue", 16657),("jun", 16647),("ka", 16474),("kai", 16470),("kan", 16465),("kang", 16459),("kao", 16452),("ke", 16448),("ken", 16433),("keng", 16429),("kong", 16427),("kou", 16423),("ku", 16419),("kua", 16412),("kuai", 16407),("kuan", 16403),("kuang", 16401),("kui", 16393),("kun", 16220),("kuo", 16216),("la", 16212),("lai", 16205),("lan", 16202),("lang", 16187),("lao", 16180),("le", 16171),("lei", 16169),("leng", 16158),("li", 16155),("lia", 15959),("lian", 15958),("liang", 15944),("liao", 15933),("lie", 15920),("lin", 15915),("ling", 15903),("liu", 15889),("long", 15878),("lou", 15707),("lu", 15701),("lv", 15681),("luan", 15667),("lue", 15661),("lun", 15659),("luo", 15652),("ma", 15640),("mai", 15631),("man", 15625),("mang", 15454),("mao", 15448),("me", 15436),("mei", 15435),("men", 15419),("meng", 15416),("mi", 15408),("mian", 15394),("miao", 15385),("mie", 15377),("min", 15375),("ming", 15369),("miu", 15363),("mo", 15362),("mou", 15183),("mu", 15180),("na", 15165),("nai", 15158),("nan", 15153),("nang", 15150),("nao", 15149),("ne", 15144),("nei", 15143),("nen", 15141),("neng", 15140),("ni", 15139),("nian", 15128),("niang", 15121),("niao", 15119),("nie", 15117),("nin", 15110),("ning", 15109),("niu", 14941),("nong", 14937),("nu", 14933),("nv", 14930),("nuan", 14929),("nue", 14928),("nuo", 14926),("o", 14922),("ou", 14921),("pa", 14914),("pai", 14908),("pan", 14902),("pang", 14894),("pao", 14889),("pei", 14882),("pen", 14873),("peng", 14871),("pi", 14857),("pian", 14678),("piao", 14674),("pie", 14670),("pin", 14668),("ping", 14663),("po", 14654),("pu", 14645),("qi", 14630),("qia", 14594),("qian", 14429),("qiang", 14407),("qiao", 14399),("qie", 14384),("qin", 14379),("qing", 14368),("qiong", 14355),("qiu", 14353),("qu", 14345),("quan", 14170),("que", 14159),("qun", 14151),("ran", 14149),("rang", 14145),("rao", 14140),("re", 14137),("ren", 14135),("reng", 14125),("ri", 14123),("rong", 14122),("rou", 14112),("ru", 14109),("ruan", 14099),("rui", 14097),("run", 14094),("ruo", 14092),("sa", 14090),("sai", 14087),("san", 14083),("sang", 13917),("sao", 13914),("se", 13910),("sen", 13907),("seng", 13906),("sha", 13905),("shai", 13896),("shan", 13894),("shang", 13878),("shao", 13870),("she", 13859),("shen", 13847),("sheng", 13831),("shi", 13658),("shou", 13611),("shu", 13601),("shua", 13406),("shuai", 13404),("shuan", 13400),("shuang", 13398),("shui", 13395),("shun", 13391),("shuo", 13387),("si", 13383),("song", 13367),("sou", 13359),("su", 13356),("suan", 13343),("sui", 13340),("sun", 13329),("suo", 13326),("ta", 13318),("tai", 13147),("tan", 13138),("tang", 13120),("tao", 13107),("te", 13096),("teng", 13095),("ti", 13091),("tian", 13076),("tiao", 13068),("tie", 13063),("ting", 13060),("tong", 12888),("tou", 12875),("tu", 12871),("tuan", 12860) ,("tui", 12858),("tun", 12852),("tuo", 12849),("wa", 12838),("wai", 12831),("wan", 12829),("wang", 12812),("wei", 12802),("wen", 12607),("weng", 12597),("wo", 12594),("wu", 12585),("xi", 12556),("xia", 12359),("xian", 12346),("xiang", 12320),("xiao", 12300),("xie", 12120),("xin", 12099),("xing", 12089),("xiong", 12074),("xiu", 12067),("xu", 12058),("xuan", 12039),("xue", 11867),("xun", 11861),("ya", 11847),("yan", 11831),("yang", 11798),("yao", 11781),("ye", 11604),("yi", 11589),("yin", 11536),("ying", 11358),("yo", 11340),("yong", 11339),("you", 11324),("yu", 11303),("yuan", 11097),("yue", 11077),("yun", 11067),("za", 11055),("zai", 11052),("zan", 11045),("zang", 11041),("zao", 11038),("ze", 11024),("zei", 11020),("zen", 11019),("zeng", 11018),("zha", 11014),("zhai", 10838),("zhan", 10832),("zhang", 10815),("zhao", 10800),("zhe", 10790),("zhen", 10780),("zheng", 10764),("zhi", 10587),("zhong", 10544),("zhou", 10533),("zhu", 10519),("zhua", 10331),("zhuai", 10329),("zhuan", 10328),("zhuang", 10322),("zhui", 10315),("zhun", 10309),("zhuo", 10307),("zi", 10296),("zong", 10281),("zou", 10274),("zu", 10270),("zuan", 10262),("zui", 10260),("zun", 10256),("zuo", 10254);


-- 建立漢字轉換拼音函數
DROP FUNCTION IF EXISTS to_pinyin;
DELIMITER $
CREATE FUNCTION to_pinyin(NAME VARCHAR(255) CHARSET gbk)
RETURNS VARCHAR(255) CHARSET gbk
BEGIN
    DECLARE mycode INT;
    DECLARE tmp_lcode VARCHAR(2) CHARSET gbk;
    DECLARE lcode INT;
    DECLARE tmp_rcode VARCHAR(2) CHARSET gbk;
    DECLARE rcode INT;
    DECLARE mypy VARCHAR(255) CHARSET gbk DEFAULT '';
    DECLARE lp INT;
    SET mycode = 0;
    SET lp = 1;
    SET NAME = HEX(NAME);
    WHILE lp < LENGTH(NAME) DO
        SET tmp_lcode = SUBSTRING(NAME, lp, 2);
        SET lcode = CAST(ASCII(UNHEX(tmp_lcode)) AS UNSIGNED);
        SET tmp_rcode = SUBSTRING(NAME, lp + 2, 2);
        SET rcode = CAST(ASCII(UNHEX(tmp_rcode)) AS UNSIGNED);
        IF lcode > 128 THEN
            SET mycode =65536 - lcode * 256 - rcode ;
            SELECT CONCAT(mypy,pin_yin_) INTO mypy FROM t_base_pinyin WHERE CODE_ >= ABS(mycode) ORDER BY CODE_ ASC LIMIT 1;
            SET lp = lp + 4;
        ELSE
            SET mypy = CONCAT(mypy,CHAR(CAST(ASCII(UNHEX(SUBSTRING(NAME, lp, 2))) AS UNSIGNED)));
            SET lp = lp + 2;
        END IF;
    END WHILE;
    RETURN LOWER(mypy);
END;
$
DELIMITER ;

--使用
select to_pinyin('王佳');

case when else end 語句

需求: 對一個code表中的數據進行要求排序,要求 橘子 排在第一個,第二個是 香蕉 其他的隨便排

select * from code_fruit

查詢數據 :

code name
34 蘋果
25 葡萄
66 橘子
26 香蕉
22 獼猴桃
45 火龍果

要求排序,使用 case when else end 語句, 根據code 字段值構建一個字段sort進行排序,當state = 66的時候,讓sort的值爲 1, 當code = 26 的時候,讓sort的值爲2,最後對sort進行排序

select *,(case when code = '66' then '1' when code = '26' then '2' else '3' end) as sort from code_fruit order by sort asc

查詢數據:

code name sort
66 橘子 1
26 香蕉 2
34 蘋果 3
25 葡萄 3
22 獼猴桃 3
45 火龍果 3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章