# 新建bigData数据库

CREATE DATABASE bigData;

USE bigData;

# 创建dept表

CREATE TABLE dept(

    id        INT        UNSIGNED     PRIMARY KEY     AUTO_INCREMENT,

    deptno        MEDIUMINT    UNSIGNED     NOT NULL     DEFAULT 0,

    dname        VARCHAR(20)    NOT NULL    DEFAULT '',

    loc        VARCHAR(13)    NOT NULL    DEFAULT ''

)ENGINE=INNODB DEFAULT CHARSET=UTF8;

# 新建emp表

CREATE TABLE emp(

    id     INT         UNSIGNED    PRIMARY KEY     AUTO_INCREMENT, 

    empno     MEDIUMINT     UNSIGNED     NOT NULL     DEFAULT 0,

    ename     VARCHAR(20)    NOT NULL     DEFAULT '',

    job     VARCHAR(9)     NOT NULL     DEFAULT '',

    mgr     MEDIUMINT     UNSIGNED     NOT NULL     DEFAULT 0,

    hiredate         DATE         NOT NULL,

    sal     DECIMAL(7,2)     NOT NULL,

    comm     DECIMAL(7,2)     NOT NULL,

    deptno    MEDIUMINT     UNSIGNED     NOT NULL     DEFAULT 0

)ENGINE=INNODB DEFAULT CHARSET=UTF8;

# 查询数据库中所有表

SHOW TABLES;

# =============================================================================

# 创建函数,假如报错:This function has none of DETERMINISTIC……

# 是因为开启了过慢查询日志,我们开启了bin-log,我们就必须为function指定一个参数。

# =============================================================================

# 通过以下SQL语句,查询到log_bin_trust_function_creators 参数值为:OFF

SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

# 通过以下SQL语句,设置 log_bin_trust_function_creators 参数值为:ON

SET GLOBAL log_bin_trust_function_creators = 1;

# 再次通过查询, 发现 log_bin_trust_function_creators 参数值为:ON

# ====》上述添加了参数以后,如果MySQL重启,上述参数又将会丢失, 永久方法如下:

# =============================================================================

# windows下my.ini配置中[mysqld]标签下加上

# log_bin_trust_function_creators = 1

# linux下/etc/my.cnf配置[mysqld]标签下加上

# log_bin_trust_function_creators = 1

# =============================================================================

# 查询emp表结构,希望ename和deptno是随机产生的随机数

DESC emp;

# now()就是一个函数

SELECT NOW() FROM DUAL;

# =============================================================================

# DELIMITER $$ 

# 因为SQL是以分号结束,当SQL语句使用了分号时就执行语句,但是因为创建的一个函数

# 需要使用到多个SQL语句,而语句又有以分号结尾,所以要修改结束符号。

# 使用了后,要想执行SQL语句要输入$$,表示执行SQL语句。结束符$$可自己定义。

# 比如说定义成三个$$$或四个$$$$不等

# 

# 编写函数:随机产生一个字符串

# =============================================================================

DELIMITER $$

# CREATE FUNCTION,创建一个函数,

# rand_string(n INT),函数名rand_string自行定义,并且有一个参数为整数

# RETURNS VARCHAR(255),返回一个定长255字节的字符串

CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)

# 函数开始

BEGIN

# DECLARE chars_str,声明一个变量,变量名为chars_str,

# VARCHAR(100),变量类型

# DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',返回值

DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';#单条语句结束

# DECLARE return_str VARCHAR(255) DEFAULT '',定义变量return_str,变更为VARCHAR(255),默认值DEFAULT ''

DECLARE return_str VARCHAR(255) DEFAULT '';

# 定义循环变量i,从0开始

DECLARE i INT DEFAULT 0;

# WHILE循环

WHILE i < n DO

SET return_str = CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));

SET i = i + 1;

# 结束循环

END WHILE;

# 函数返回值

RETURN return_str;

END $$

# 假如要删除

# DROP FUNCTION rand_string;

# 再次使用以下语句查询时,需要加上$$方表示语句结束。(在CMD命令行形式操作需要加上$$)

SELECT NOW() FROM DUAL;$$

# 随机产生部门编号

DELIMITER $$

CREATE FUNCTION rand_num() RETURNS INT(5)

BEGIN

DECLARE i INT DEFAULT 0;

SET i = FLOOR(100 + RAND()*10);

RETURN i;

END $$

# 假如要删除

# DROP FUNCTION rand_num;

# 创建存储过程

# =============================================================================

# 编写存储过程:往emp表中插入数据的存储过程:

# 比如要插入1000W条数据,但真正生产时会分批次插入,如先插入50W,分20次插入

# =============================================================================

DELIMITER $$

# CREATE PROCEDURE insert_emp创建存储过程,没有返回值

# 有两个参数从start开始,结束于max_num,数据类型均为INT(10)型

CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))

BEGIN

DECLARE i INT DEFAULT 0;

# SET autocommit = 0把自动提交设置为0,因为你使用insert into语句时会自动调用autocommit

# 当你插入50W条时,每一条都自动调用自动提交,数据库性能很Low。所以设置为0先关闭自动提交

# 等50W条记录插入完成后,再一次提交。

SET autocommit = 0;

# REPEAT,重复执行

REPEAT

SET i = i + 1;

INSERT INTO emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES(

    (START + i),rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,RAND_NUM()

);

UNTIL i = max_num

END REPEAT;

# 一次性全部提交

COMMIT;

END $$

# 创建存储过程

# =============================================================================

# 编写存储过程:往dept表中插入数据的存储过程:

# =============================================================================

DELIMITER $$

CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))

BEGIN

DECLARE i INT DEFAULT 0;

SET autocommit = 0;

REPEAT

SET i = i + 1;

INSERT INTO dept(deptno,dname,loc) VALUES((START + i),rand_string(10),rand_string(8));

UNTIL i = max_num

END REPEAT;

COMMIT;

END $$

# 删除存储过程的语句

# DROP PROCEDURE insert_dept;

# =============================================================================

# 之前为避免在创建函数或存储过程时(可能有多条分号结束的语句),使用分号导致语句

# 结束而引起创建函数或存储过程失败,使用了有别于分号的$$自定义符号

# 现在重新定义分号为结束符号

# =============================================================================

DELIMITER ;

SELECT * FROM dept;

# 调用存储过程

# 使用CALL 存储过程调用名

# 从100开始,插入10记录

CALL insert_dept(100,10);

SELECT * FROM emp;

CALL insert_emp(100001,500000);

# 查看存储过程

SELECT `name` FROM mysql.`proc` WHERE db = 'bigdata' AND `type` = 'procedure';

SHOW PROCEDURE STATUS;

# 查看函数

SELECT `name` FROM mysql.`proc` WHERE db = 'bigdata' AND `type` = 'function';

SHOW FUNCTION STATUS;

# 查看存储过程或函数的创建代码

SHOW CREATE PROCEDURE insert_dept;

SHOW CREATE FUNCTION rand_num;

DROP TABLE dept;

Mysql 表创建语句的更多相关文章

  1. MySQL 表查询语句练习题

    MySQL 表查询语句练习题: 一.  设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表 ...

  2. 查看mysql表结构和表创建语句的方法(转)

    查看mysql表结构的方法有三种:1.desc tablename;例如:要查看jos_modules表结构的命令:desc jos_modules;查看结果:mysql> desc jos_m ...

  3. 【转】查看mysql表结构和表创建语句的方法

    转自:http://blog.csdn.net/business122/article/details/7531291 查看mysql表结构的方法有三种: 1.desc tablename; 例如: ...

  4. [MySQL]表创建外键失败:ERROR 1005 (HY000): Can't create table (errno: 150)

    在数据库中建立一个新表(表引擎为InnoDB)时, 需要用到外键, 所以就在建表的时候加了一句foreign key (column) references table_name.但是执行时出现 ER ...

  5. shell 提取mysql指定数据库下表创建语句为单文件

    dbcn="mysql -h172.16.1.194 -uroot -p123456"; db=dsp_ad_center; ii=0; ct=`$dbcn -N -e " ...

  6. Mysql 表 创建 / 删除(基础3)

    创建表 语法:  #进入数据库 mysql> use mydb123; Database changedmysql> select database();+------------+| d ...

  7. Mysql表创建外键报错

    数据库表A: CREATE TABLE task_desc_tab ( id INT(11) PRIMARY KEY NOT NULL COMMENT '自增主键' AUTO_INCREMENT, t ...

  8. mysql表创建好后添加外键

     命令:alter table 需加外键的表 add constraint 外键名 foreign key(需加外键表的字段名) referencnes 关联表名(关联字段名); 注意:外键名不能重复

  9. PLSQL查看表创建语句

    在我们想要查看的表上右键选择view:

随机推荐

  1. JS知识点整理(一)

    前言 本文把平时的一些读书笔记和理解进行了整理归纳,包含一些易混淆.遗漏的知识点,也会配上一些例子,可能不是很完整,还会有点杂,但也许会有你需要的(目前先整理了一部分,笔记有点多,后续会持续更新). ...

  2. Linux-- 查看文件 more与其它

    more 翻页查看 用法:more 文件名 nl 显示行号打印(不常用) 1.不打印空白行行号:nl -b t 文件名 类似 cat -b 文件名 2.打印所有行行号:nl -b a 文件名 类似 c ...

  3. 清理 Xcode 10 记录

    1,清理 ~/Library/Developer/CoreSimulator/Devices 说明:该目录存放当前的所有模拟器,每个标识符代表一台机器,清理掉避免存在旧版本的模拟器缓存 执行: 关闭模 ...

  4. c++类模板分文件编写存在的问题

    c++分文件编写的编译机制: 各个文件独立编译,如果在某.cpp文件中出现了函数调用,但是在此.cpp文件并没有对应函数的实现.此时就会在函数调用出生成特定的符号,在之后的链接过程完成函数调用. C+ ...

  5. Tarjan算法初探(3):求割点与桥以及双连通分量

    接上一节Tarjan算法初探(2):缩点 在此首先提出几个概念: 割点集合:一个无向连通图G 若删除它的一个点集 以及点集中所有点相连的边(任意一端在点集中)后 G中有点之间不再连通则称这个点集是它的 ...

  6. functional filter()

    #include "pch.h" #include <iostream> #include <deque> #include <string> ...

  7. [已解决]Vistual Stdio 2015 installer Bootstrapper Packages 路径

    VS2015 installer 的预装包的地址变更成 C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper\Pac ...

  8. 苹果cms网站漏洞修复解决办法

    苹果cms系统,是目前很多电影网站都在使用的一套网站系统,开源,免费,扩展性较好,支持一键采集,伪静态化,高并发的同时承载,获得的很多站长的喜欢,于近日被网站安全检测发现,maccms存在网站漏洞,s ...

  9. PCB布线设计(1)

    在PCB设计的时候,初学的时候对布线设计一无所知,那个时候老师布置  AT91SAM7X-开发板 作为学习例板  ,最终采用自动布线的结果如下 也并非全为自动布线,自动布线对于这种元器件稍多的很难全部 ...

  10. Go语言反射之值反射

    1 概述 反射不仅可以获取值的类型信息,还可操作变量的值.使用 reflect.Value 类型操作变量的值. 2 值反射对象 reflect.ValueOf() 方法可以获取一个值的反射对象,之后可 ...