精华内容
下载资源
问答
  • MySql存储过程动态创建表并插入数据

    万次阅读 热门讨论 2015-07-31 20:45:54
    MySql存储过程动态创建表并插入数据  最近做的一个项目,数据库用的是MySql,对于MySql不是很熟练,只是会简单的应用,毕竟简单的sql语句还是相通的,但是随着项目的深入复杂的sql语句开始慢慢多起来,其中一个小...

    MySql存储过程动态创建表并插入数据

             最近做的一个项目,数据库用的是MySql,对于MySql不是很熟练,只是会简单的应用,毕竟简单的sql语句还是相通的,但是随着项目的深入复杂的sql语句开始慢慢多起来,其中一个小难点就是要根据当天的日期动态创建表,并且向其中插入数据。

             具体逻辑可以理解为,先去数据库查询有没有当天的记录表,如果没有则创建表,然后执行当天的日志写入。

             Mysql的可视化工具我们用的是navicat,相对来说还是比较好用,当然没有sqlserver 那么人性化(很多快捷键不支持,操作累赘)。下面我就来说一说用navicat如何动态创建数据库表并且插入数据。

             一:创建存储过程

             二:用concat函数拼接动态创建表的语句并执行

             三:同样用concat函数拼接向动态创建的表写入数据的语句并执行

                       因为数据库表都是固定前缀加当前日期的形式,所以无论创建表还是写入数据其实都是根据动态表来的,所以不能向原来那种固定表一样来写简单的insert 语句,另外,传给存储过程的参数id,并不能直接传给存储的insert语句,会报sql语句错误,所以需要引入局部参数,可能并不是最好的办法,但是目前作者还没找到更好的写法,如果大家有什么更好的或者觉得哪里可以改进的希望多多交流。

            

             对于mysql,我们不可忽视其强大,mysql还有很多需要学习的,接下来既然每天都动态生成记录表了,那么肯定需要一个job,来按照一定的时间规律来清除或者备份数据库表,接下来就要研究mysql的job,慢慢来,要学的还很多。

            

             

    展开全文
  • SpringBoot+Mybatis 自动创建数据表

    万次阅读 2018-06-21 13:49:31
    Mybatis和Hibernate是两个比较热门的持久层框架。使用起来也各有利弊(个人使用了几个月的Hibernate后还是决定回到...那时候觉得这个特别好用,大概的过程是这样的在数据库中先建好配置好几个xml文件(一般都是...

    MybatisHibernate是两个比较热门的持久层框架。使用起来也各有利弊(个人使用了几个月的Hibernate后还是决定回到Mybatis的怀抱)


    Mybatis用了快两年了,在我手上的发展史大概是这样的
    第一个阶段

    利用Mybatis-Generator自动生成实体类DAO接口Mapping映射文件。那时候觉得这个特别好用,大概的过程是这样的

    1. 在数据库中先建好表
    2. 配置好几个xml文件(一般都是复制粘贴上一个项目的),然后根据数据库中的表,生成实体类DAO接口Mapping映射文件
    3. 当需要添加数据操作的时候,先在xml中写好CRUD语句,然后在DAO接口层写接口,最后到映射文件

    渐渐地,我忽然发现,这种方式越来越烦。改一个字段,要修改很多的配置文件,正常的修改一些查询操作,也需要依次修改三个文件。

    第二个阶段

    在学长指导之下,走向了无xmlMybatis之路。在这个阶段,数据操作的过程大概是这样的

    1. 新建需要的实体层
    2. 根据实体层,在数据库中建表(非自动建表)
    3. 当需要进行增删改查的时候,只需要在Mapper映射文件中,用对应的注解@Select@Delete等进行相应的操作即可

    相比于第一个阶段的使用,在这个阶段脱离了xml的束缚,修改数据操作也只需要更改mapper层的数据即可。但是还是有很多的问题。比如,没有自动生成的代码,所有基础的增删改查都要自己写。如果一个POJO的属性有20个,那你的insert怕是有点长了。

    第三个阶段

    这个阶段是上一个阶段的扩展,用泛型实现了一个通用的mapper,所有的mapper映射都继承这个通用的mapper,基础的增删改查就不需要自己写了。

    再有就是这篇文章要写的,不需要自己创建数据表,可以根据实体层,自动创建数据表,也就是省去了第二个阶段中的第2步。

    这是一个我很喜欢的功能,奈何只在Hibernate中才有。不过在网上搜到一位大佬写的框架,可以实现mybatis自动创建数据表(目前仅限mysql

    原文链接:A.CTable开源框架Mybatis增强自动创建表/更新表结构/实现类似hibernate共通的增删改查

    但是由于这个博文中的内容是基于SpringMvc的,所以附上一份自己修改后的基于SpringBoot的简单Demo(如果项目使用的是SpringMVC,建议去看此框架开发者写的博文)

    SpringBoot整合A.CTable

    • 项目目录
    - com
      - config
        - MyBatisMapperScannerConfig.java
        - TestConfig.java
      - entity
        - Test.java
      - mapper
        - TestMapper.java
    - DemoApplication.java
    
    
    • 依赖包
    <dependency>
        <groupId>com.gitee.sunchenbin.mybatis.actable</groupId>
        <artifactId>mybatis-enhance-actable</artifactId>
        <version>1.0.3</version>
    </dependency>
    
    • application.properties属性配置文件
    mybatis.table.auto=update
    mybatis.model.pack=com.example.entity
    mybatis.database.type=mysql
    

    mybatis.table.auto=create时,系统启动后,会将所有的表删除掉,然后根据model中配置的结构重新建表,该操作会破坏原有数据。

    mybatis.table.auto=update时,系统会自动判断哪些表是新建的,哪些字段要修改类型等,哪些字段要删除,哪些字段要新增,该操作不会破坏原有数据。

    mybatis.table.auto=none时,系统不做任何处理。

    mybatis.model.pack这个配置是用来配置要扫描的用于创建表的对象的包名

    • Spring配置文件
    @Configuration
    @ComponentScan(basePackages = {"com.gitee.sunchenbin.mybatis.actable.manager.*"})
    public class TestConfig {
    
        @Value("${spring.datasource.driver-class-name}")
        private String driver;
    
        @Value("${spring.datasource.url}")
        private String url;
    
        @Value("${spring.datasource.username}")
        private String username;
    
        @Value("${spring.datasource.password}")
        private String password;
    
        @Bean
        public PropertiesFactoryBean configProperties() throws Exception{
            PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
            PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            propertiesFactoryBean.setLocations(resolver.getResources("classpath*:application.properties"));
            return propertiesFactoryBean;
        }
    
        @Bean
        public DruidDataSource dataSource() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setDriverClassName(driver);
            dataSource.setUrl(url);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            dataSource.setMaxActive(30);
            dataSource.setInitialSize(10);
            dataSource.setValidationQuery("SELECT 1");
            dataSource.setTestOnBorrow(true);
            return dataSource;
        }
    
        @Bean
        public DataSourceTransactionManager dataSourceTransactionManager() {
            DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
            dataSourceTransactionManager.setDataSource(dataSource());
            return dataSourceTransactionManager;
        }
    
        @Bean
        public SqlSessionFactoryBean sqlSessionFactory() throws Exception{
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setDataSource(dataSource());
            PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml"));
            sqlSessionFactoryBean.setTypeAliasesPackage("com.example.entity.*");
            return sqlSessionFactoryBean;
        }
    
    }
    
    @Configuration
    @AutoConfigureAfter(TestConfig.class)
    public class MyBatisMapperScannerConfig {
    
        @Bean
        public MapperScannerConfigurer mapperScannerConfigurer() throws Exception{
            MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
            mapperScannerConfigurer.setBasePackage("com.example.mapper.*;com.gitee.sunchenbin.mybatis.actable.dao.*");
            mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
            return mapperScannerConfigurer;
        }
    
    }
    

    注意MyBatisMapperScannerConfigTestConfig不能合并,不然会出现@Value为空的错误

    • 实体层
    @Table(name = "test")
    public class Test extends BaseModel{
    
        private static final long serialVersionUID = 5199200306752426433L;
    
        @Column(name = "id",type = MySqlTypeConstant.INT,length = 11,isKey = true,isAutoIncrement = true)
        private Integer id;
    
        @Column(name = "name",type = MySqlTypeConstant.VARCHAR,length = 111)
        private String  name;
    
        @Column(name = "description",type = MySqlTypeConstant.TEXT)
        private String  description;
    
        @Column(name = "create_time",type = MySqlTypeConstant.DATETIME)
        private Date    create_time;
    
        @Column(name = "update_time",type = MySqlTypeConstant.DATETIME)
        private Date    update_time;
    
        @Column(name = "number",type = MySqlTypeConstant.BIGINT,length = 5)
        private Long    number;
    
        @Column(name = "lifecycle",type = MySqlTypeConstant.CHAR,length = 1)
        private String  lifecycle;
    
        @Column(name = "dekes",type = MySqlTypeConstant.DOUBLE,length = 5,decimalLength = 2)
        private Double  dekes;
    
        //省略Setter、Getter
    
    }
    

    属性上的注解定义了创建表时的各个字段的属性

    在配置文件中的,com.example.entity.*需要换成自己项目中的实体层目录,com.example.mapper.*需要换成自己项目中的mapper目录

    Github源码地址:
    https://github.com/zyf970617/mybatis-auto-create-table

    要是对你有用就点个赞把~



    作者:徐森威
    链接:https://www.jianshu.com/p/25db002b0367
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
    展开全文
  • 1、创建数据表(CREATE TABLE语句)

    千次阅读 2020-10-10 10:11:53
    创建数据表过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程。接下来我们介绍一下创建数据表的语法形式。 基本语法 在 MySQL 中,可以使用 CREATE TABLE...

    在创建数据库之后,接下来就要在数据库中创建数据表。所谓创建数据表,指的是在已经创建的数据库中建立新表。

    创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程。接下来我们介绍一下创建数据表的语法形式。

    基本语法

    在 MySQL 中,可以使用 CREATE TABLE 语句创建表。其语法格式为:

    CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];
    

    其中,[表定义选项]的格式为:

    <列名1> <类型1> [,] <列名n> <类型n>
    

    CREATE TABLE 命令语法比较多,其主要是由表创建定义(create-definition)、表选项(table-options)和分区选项(partition-options)所组成的。

    这里首先描述一个简单的新建表的例子,然后重点介绍 CREATE TABLE 命令中的一些主要的语法知识点。

    CREATE TABLE 语句的主要语法及使用说明如下:

    • CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限。
    • <表名>:指定要创建表的名称,在 CREATE TABLE 之后给出,必须符合标识符命名规则。表名称被指定为db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。在当前数据库中创建表时,可以省略db-name。如果使用加引号的识别名,则应对数据库和表名称分别加引号。例如,‘mydb’.‘mytbl’ 是合法的,但 ‘mydb.mytbl’ 不合法。
    • <表定义选项>:表创建定义,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。

    默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。

    提示:使用 CREATE TABLE 创建表时,必须指定以下信息:

    • 要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。
    • 数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。

    在指定的数据库中创建表

    数据表属于数据库,在创建数据表之前,应使用语句“USE<数据库>”指定操作在哪个数据库中进行,如果没有选择数据库,就会抛出 No database selected 的错误。

    例 1
    创建员工表 tb_emp1,结构如下表所示。.

    在这里插入图片描述
    选择创建表的数据库 test_db,创建 tb_emp1 数据表,输入的 SQL 语句和运行结果如下所示。

    mysql> USE test_db;
    Database changed
    mysql> CREATE TABLE tb_emp1
        -> (
        -> id INT(11),
        -> name VARCHAR(25),
        -> deptId INT(11),
        -> salary FLOAT
        -> );
    

    语句执行后,便创建了一个名称为 tb_emp1 的数据表,使用 SHOW TABLES;语句查看数据表是否创建成功,如下所示。

    mysql> SHOW TABLES;
    +--------------------+
    | Tables_in_test_db  |
    +--------------------+
    | tb_emp1            |
    +--------------------+
    
    展开全文
  • SAP中创建数据表过程

    千次阅读 2016-11-17 10:23:21
    在database table字段输入你想要创建数据表(透明)的名字 然后点击create按钮 然后你就开始添加字段,确认类型,点击保存按钮就可以了 但是如果你匆忙点击 会报错如下 (指定参考和参考字段) ...

    使用事务码SE11


    在database table字段输入你想要创建的数据表(透明表)的名字

    然后点击create按钮


    然后你就开始添加字段,确认类型,点击保存按钮就可以了

    但是如果你匆忙点击  会报错如下 (指定参考表和参考字段)


    因为你需要在Currency / Quantity Fields字段 添加参考内容

    添加完以后,你再按这个按钮  还是会报错

    这个时候如果你使用SE14 ,你会发现这个表根本没有被创建

    原因是你还没有维护 

    请点击这个按钮


    按上述框中的内容填写,然后保存

    然后回到前面的画面


    然后激活这个新建的表,就可以了





    展开全文
  • SpringBoot+Mybatis 自动创建数据表(适用mysql)

    万次阅读 热门讨论 2019-05-28 09:57:26
    Mybatis和Hibernate是两个比较热门的持久层框架。使用起来也各有利弊(个人使用了几个月的Hibernate后还是决定回到Mybatis的怀抱) ...那时候觉得这个特别好用,大概的过程是这样的 在数据库中先...
  • 最近用MySQL做了一个每月1号00:00:00创建一张并将上个月的表数据导入到新创建中,在此做个小记。1. 要做这个之前先要: -- 设置好时区 set time_zone = '+8:00'; -- 开启事件调度器 set GLOBAL event_...
  • 使用laravel的migrate创建数据表

    万次阅读 2018-07-31 14:58:31
    laravel中可以使用migration创建数据表,这使得数据库的迁移非常便利,下面介绍一下laravel中使用migration创建数据表过程。数据库使用的是mysql,laravel版本为5.5 1. 创建并连接数据库 创建数据库 在命令行...
  • 1 file --&gt; new --&gt; sqlwindow 2 输入建表语句 3 选中tables --&...4 关闭创建表的sql窗口 5 找到新建的 6 双击打开 7 在新打开的sql窗口中输入插入语句 8 重新执行查询...
  • 要求:请安装Kingbase数据库软件,在数据库软件中创建一个自己名字的模式,在该模式下创建学生关系数据表、课程、选课表。 插入一些数据,尝试查询、更新、删除 二、相关原理与知识 (完成实验所用到的相关原理...
  • 1.创建用户CREATE TABLE user100w( id INT NOT NULL AUTO_INCREMENT, first_name VARCHAR(10) NOT NULL, last_name VARCHAR(10) NOT NULL, sex VARCHAR(5) NOT NULL, score INT NOT NULL, copy_id INT NOT N
  • 首先在test数据库中先创建一个test: CREATE TABLE test(  ID INT PRIMARY KEY AUTO_INCREMENT , test_name VARCHAR(20), ...现在,我们来创建一个存储过程,实现向表里循环插入数据; delimiter $
  • 创建存储过程中循环添加数据

    千次阅读 2014-05-08 17:42:18
    CREATE PROCEDURE dowhile() BEGIN  DECLARE n int; set n=1; WHILE n do INSERT into hasindex(num) VALUES (n); set n=n+1; END WHILE; END; CALL dowhile();
  • 在oracle存储过程创建临时

    千次阅读 2018-12-19 11:51:10
    首先需要对Oracle中临时有个大概的了解: 1简介  ORACLE数据库除了可以保存永久外,还可以建立临时temporary tables。...但是临时的结构以及元数据还存储在用户的数据字典中。  临时只在ora...
  • sqoop从sqlserver导入数据操作指令及hive创建表过程#sqoop从sqlserver导入数据到HDFS上,指定存储目录。设置m(mr)数量bin/sqoop import \--connect 'jdbc:sqlserver://xx.xx.xx.xxx:1433;database=库名' \--username...
  • CREATE PROCEDURE P_TEST1 IS V_SQL VARCHAR2(1000); BEGIN v_sql := 'CREATE TABLE P_TEST1_TABLE(P_ID NUMBER)'; EXECUTE IMMEDIATE v_sql; FOR i IN 1..100 LOOP ...过程名 P_TEST1 表名  P_TEST1_TABLE
  • 此前在客户一个繁体系统的sql server中执行存储过程的时候出现乱码,经查发现创建临时后,往临时中插入数据时得到的数据是乱码的,所以查看创建表的sql脚本,经查需要将变量类型设置为 nvarchar即可解决此问题
  • 创建存储过程批量插入数据

    万次阅读 2018-03-08 09:12:13
    什么是存储过程,简单来说存储过程是一组为了完成特定功能的的SQL语句集。先看脚本:#! /bin/bash host="xxx" port="xxx" userName="xxx" password="xxx" dbname="...
  • 千万级别数据表创建索引

    万次阅读 2017-09-25 12:52:10
    业务背景最近一个开发维护的公众号管理系统用户(user_info)数据已经达到15,000k了,而此时有一个业务场景需要将公众号的用户信息重新同步一次,且后台原有过针对单个公众号的用户同步,但是已经非常难以使用,...
  • SQL将存储过程数据保存到临时

    千次阅读 2018-12-20 22:19:45
    --创建临时 create table #temp_student ( StudentID varchar(50), ...--将存储过程数据保存到临时 insert into #temp_student exec [dbo].[Procedure_Test] --查询临时 select * from #temp_student --删...
  • 1.创建一个过程,向dept中添加一个新记录。(in参数) 创建过程: create or replace procedure Insert_dept ( num_dept in number ,v_ename in varchar3)is begin insert into dept values(num_dept,v_...
  • >>> create table if not ...如上代码表示创建一个名为people的数据表。有时在程序中,如果people这个已经存在,如果执行下面的语句就会报错>>> create table people(name text,age int(2),gender char(1));if no
  • 创建存储过程: CREATE OR REPLACE PROCEDURE "TEST_PROC"(NAME IN VARCHAR2,DM IN VARCHAR2) IS ZJ VARCHAR2(40); JH VARCHAR2(10); VERRINFO VARCHAR2(200); USER_COUNT NUMBER; B...
  • 从一张往另一张插入数据时,有一个字段没有需要手动填入,使用了SUBSTRING方法,代码如下CREATE DEFINER=`root`@`%` PROCEDURE `insertPresale`() BEGIN #Routine body goes here... DECLARE done INT DEFAULT...
  • oracle_存储过程_删除数据表

    千次阅读 2017-04-06 17:31:03
    --用于删除数据表(via tablename) create or replace procedure DropTable(tablename in varchar) is ls_sql varchar2(4000); v_count number; v_tablename varchar2(400); begin  v_tablename:=upper...
  • (1)为什么很多人使用传统的数据库用惯了,觉得存储过程就不是那么重要?存储过程到底有什么用呢?...建立员工档案管理的结构(1)首先在连接完数据库后,自己创建数据库:----创建数据库create database Em...
  • create procedure aa()  begin   DECLARE i INT DEFAULT 1;   WHILE (i &lt;= 1000) DO   INSERT INTO users (name) VALUES ('张三');   SET i = i + 1;   END WHILE;...创建完了...
  • 我现在有两张A,B,两张有外键关联,现在我想使用mysql的存储结构删除A(关联B)的数据,怎么写啊
  • 需求介绍: 有两个相同的,一个是主A,有一部分数据被修改乱了,一个是新B,由原来不乱的数据,还有一些新的数据。 A需要根据B进行更新。...创建存储过程代码: CREATE PROCEDURE [dbo].[Q...
  • 知识点:数据库的相关概念、创建数据库的方法、设计数据库、向数据库中插入数据、建立不同数据库之间的关系、删除数据库。 1、数据表相关的一些概念 1.1 数据库里的数据是如何保存的? 数据库...
  • 如果想在oracle存储过程中新建后往表里插入数据,可能会这样写。其中i为前面定义的number变量。可以看到我想在新建的的第一列插入其他的的字段的数据user_id。然后在第二列插入-1这个值。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,283,166
精华内容 913,266
关键字:

如何创建数据表的过程