精华内容
下载资源
问答
  • mysql自增列

    2016-03-07 09:20:30
    1、mysql创建带自增列的表 create table inc(id int(10) not null auto_increment,name varchar(20),primary key (id)); 注意: 自增列...
    1、mysql创建带自增列的表
    create table inc(id int(10) not null auto_increment,name varchar(20),primary key (id));
    注意:
    自增列必须是key
    前面的id没有引号,后面设置成key的时候也不能有引号
    2、使用自增列
    mysql> insert into inc values(id,'leo');
    Query OK, 1 row affected (0.00 sec)
    mysql> select * from inc;
    +----+------+
    | id | name |
    +----+------+
    |  1 | leo  |
    +----+------+
    1 row in set (0.00 sec)
    mysql> insert into inc values(id,'dem');
    Query OK, 1 row affected (0.00 sec)
    mysql> select * from inc;
    +----+------+
    | id | name |
    +----+------+
    |  1 | leo  |
    |  2 | dem  |
    +----+------+
    2 rows in set (0.00 sec)
    可以看出自增列默认是从1开始的
    3、设置自增列
    如果你不希望自增列是从1开始,可以使用下面的语句修改自增的起始值
    alter table inc auto_increment=100;
    mysql> insert into inc values(id,'jack');
    Query OK, 1 row affected (0.01 sec)
    mysql> select * from inc;
    +-----+------+
    | id  | name |
    +-----+------+
    |   1 | leo  |
    |   2 | dem  |
    | 100 | jack |
    +-----+------+
    3 rows in set (0.00 sec)

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29989552/viewspace-2050333/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/29989552/viewspace-2050333/

    展开全文
  • MySQL自增列的步长问题 唯一索引和联合唯一 外键的变种 SQL数据行的增删改查 视图 触发器 函数 存储过程 事务 游标 动态执行SQL(防SQL注入) 1....
    MySQL自增列的步长问题
    1. 唯一索引和联合唯一
    2. 外键的变种
    3. SQL数据行的增删改查
    4. 视图
    5. 触发器
    6. 函数
    7. 存储过程
    8. 事务
    9. 游标
    10. 动态执行SQL(防SQL注入)
     
     
     

    1.MySQL自增列的步长问题:
    1.基于会话级别(单次登陆状态下):
    show session variables like 'auto_inc%';    #查看自增长的默认步数,一般为1
    set session auto_increment_increment=2;    #设置自增长会话步长为2
    set session auto_increment_offset=10;    #设置默认自增长初始值
    2.基于全局级别(所有用户生效):
    show global variables like 'auto_inc%';    #查看全局变量中的自增长的默认步长
    set global auto_increment_increment=2;    #设置全局会话步长
    set global auto_increment_offset=10;    #设置全局自增长初始值
     

    2.唯一索引和联合唯一:
    create table t1(
        id int,
        num int,
        name char
        unique uql (num)    #唯一索引
        unique uql (num, name)    #联合唯一
        );
    唯一索引和主键 的共同点:
        1.都有加速查找的功能;
        2.都是唯一,不能重复
    唯一索引和主键的不同点:
        主键既不能重复也不能为空;
        而唯一索引不能重复,但是可以有值为空,比如联合索引中可以设置一个值为null
     

    3.外键的变种:
    1.一对一:博客用户表
    2.一对多:百合网相亲记录表
    3.多对多:用户主机关系表

     

     

    4.SQL数据行的增删改查:
    增:
    insert into test(name, age) values('name', 18);
    insert into test(name, age) values('name1', 18),('name2', 18);    #一次性插入多个值
    insert into test(name, age) select name,age from test1;    #把某张表中的数据插入
    删:
    delete from test;
    delete from test where id>2 and name='name1';
    改:
    updata test set name='name2',age=19 where id>12 and name='name1';
    查:
    select * from test;
    select id,name from test where id>2;
    select name,age,123 from test;
    select name as rname from test;
    select * from test where id in (1,3,5,7);
    select * from test where id in (select id from test1);
    select * from test where id between 5 and 9;    #闭区间,左右都可以取到
    通配符
    select * from test where name like 'name%';    %匹配无数字符;_匹配一个字符
    分页
    select * from test limit 10;    取前十条
    select * from test limit 0,10;    表示从0开始,取0后面的10条
    select * from test limit 10 offset 20;    表示从20开始,取20后的前10条
    排序
    select * from test order by id desc;    id从大到小排列
    select * from test order by id asc;    id从小到大排列
    select * from test order by age desc, id asc;    多个不同排序
    select * from test order by desc limit 10;    取后十条
    分组(聚合函数:count,max,min,sum,avg求平均值)
    select max(id),id from test group by sex;    如果遇到相同的sex,只会取最大id的
    select count(id),id from test group by sex;    计数
    select count(id) as count,id form test group by sex;
    select count(id),id from test group by sex having count(id)>2;    对于聚合函数结果进行二次筛选时,必须使用having
    连表操作:
    #左右连表 join
    select * from test1,test2 where test1.id = test2.part_id;
    select * from test1 left join test2 on test1.id = test2.part_id;     test1左边会全部显示
    select * from test right join test2 on test1.id = test2.part_id;    test1右边会全部显示
    select * from test innder join test2 on test1.id = test2.part_id;    会把出现null的那一行隐藏
    #上下连表 union
    select id,name from test1
    union    #自动去重
    select id,name from test2;
    select id,name from test1
    union all    #不去重
    select id,name from test2;
    转储mysql文件:
    mysqldump -uroot test1  > test1.sql -p    #数据表结构+数据
    mysqldump -uroot -d test1  > test1.sql -p    #只有数据表结构
    导入mysql文件:
    create databases test1;
    mysqldump -uroot -d test1 < test1.sql -p;
    临时表
    select id from (select id from test where num>60) as B;
    添加条件
    select min(num),min(num)+1,case when num<10 then 0 else min(num) end from score
     

    5.视图:
    #创建
    create view as view1 select * from test where id>10;
    #视图是一个临时表
    #视图是虚拟出来的,不是物理表,因此不能插入数据
    #修改
    alter view 视图名称 as SQL
    #删除
    drop view 视图名称;
     

    6.触发器:
    #插入前
    create trigger t1 BEFORE INSERT on student for EACH ROW
    BEGIN
    INSERT into teacher(tname) values(NEW.sname);
    END
    #插入后 after insert
    #删除前 before delete
    #删除后 after delete
    #更新前 before update
    #更新后 after update
    #由于默认;结束,因此不会执行end,所以要执行触发器之前要先修改终止符
     
    delimiter //
    create trigger t1 BEFORE INSERT on student for EACH ROW
    BEGIN
    INSERT into teacher(tname) values(sname);
    END //
    delimiter ;
    #创建时自动插入:
    drop trigger t1;    #结束上一个触发器
    delimiter //
    create trigger t1 BEFORE INSERT on student for EACH ROW
    BEGIN
    INSERT into teacher(tname) values(NEW.sname);
    END //
    delimiter ;
     
    insert into student(gender,class_if,sname) values('女',1,'abc')
     

    7.函数:
    #自定义函数(有返回值)
    #创建函数
    delimiter \\
    create function f1(
        i1 int,
        i2 int)
    returns int
    BEGIN
        declare num int;    声明一个变量类型是整数
        set num = i1 + i2;
        return(num);
    END \\
    delimiter ;
    #运行函数
    select f1(1,100);
    内置函数:
    时间重点
     

    8.SQL存储过程:
    1.简单存储过程
    delimiter //
    create PROCEDURE p1()
    BEGIN
        select * from student;
        insert into teacher(tname) values('ct');
    END
    delimiter ;
    #调用存储过程
    call p1;
    cursor.callproc('p1')
    2.传参数(in,out,inout)
    delimiter //
    create PROCEDURE p2(
        in n1 int,
        in n2 int
    )
    BEGIN
        select * from student where sid>n1;
    END
    #调用
    call p2(12,2);
    cursor.callproc('p2',(12,2))
    delimiter //
    create PROCEDURE p2(
        in n1 int,
        out n2 int    #out伪装返回值
    )
    BEGIN
        set n2 = 123123;
        select * from student where sid>n1;
    END
    #调用
    set @vi = 0     #创建了一个session级的变量叫做v1,可以在外部接收
    call p2(12,@v1)
    select @v1;    接收变量
    cursor.execute('select @_p2_0,@_p2_1')    #pymysql中接收存储过程变量
    存储过程的特性:
        a.可传参 (in out inout)
        b.pymysql
    为什么有结果值又有out伪造的返回值:
        out的作用:用于标识存储过程的执行结果,如1为失败,2为成功,3为局部成功
     

    9.事务:
    delimiter //
    create procedure p4(
        out status int
    )
    BEGIN
        1.声明如果出现异常则执行{
            set status = 1;
            rollback;    #回滚
        }
        开始事务
            --a账户减少100
            --b账户增加100
            commit;
        结束
        set status = 2;
        #如果这里的事务执行顺利,会得到变量等于2,不会执行回滚
    END //
    delimiter ;
    delimiter \\
    create PROCESDURE p1(
        out p_return_code tinyint
    )
    BEGIN
        declare exit handler for sqlexception    #这样代码的意思是如果没有顺利执行,就执行下面的代码
        BEGIN
            -- ERROR
            set p_return_code = 1;
            rollback;
        END;
        
        START TRANSACTION;
            DELETE from tb1;
            insert into tb2(name) values('seven');
        COMMIT;
        
        --SUCCESS
        set p_return_code = 0;
        
        END\\
    delimiter ;
    #正确的返回0,错误的返回1
     

    10.游标:
    delimiter //
    create procedure p6()
    begin
        declare row_id int;    --自定义变量1
        declare row_num varchar(50);    --自定义变量2
        declare done INT DEFAULT FALSE;  
     
        declare my_cursor CURSOR FOR select id,num from A;
        declare CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;  
     
    open my_cursor;    #打开游标
        xxoo: LOOP    #开始循环
            fetch my_cursor into row_id,row_num;    #取一行数据赋值给row_id和row_num
            if done then
                leave xxoo;
            END IF;
            insert into teacher(tname) values(ssname);
        end loop xxoo;    #终止循环
    close my cursor;    #关闭游标
     
    end //
    delimter;
     

    11.动态执行SQL(防SQL注入):
    delimiter //
    create procefure p7(
        in tpl varchar(255),
        in arg int
    )
    begin
        1.预检测某个东西,SQL语句合法化
        2.SQL = 格式化 tp+arg
        3.执行SQL语句
        
       set @x0 = arg;   #声明变量
       PREPARE(准备) XXX(变量) FROM 'select * from student where sid > ?';
        EXECUTE(执行) xxx USING @arg(替换上面的?);
        DEALLOCATE prepare prod;(执行已经格式化完成的SQL语句)
     
    end //
    delimter;
     
    call p7('select * from tb where id > ?',9)
    delimiter \\
                CREATE PROCEDURE p8 (
                    in nid int
                )
                BEGIN
                    set @nid = nid;
                    PREPARE prod FROM 'select * from student where sid > ?';
                    EXECUTE prod USING @nid;
                    DEALLOCATE prepare prod;
                END\\
                delimiter ;
     
     
     

    转载于:https://www.cnblogs.com/changwoo/p/9568534.html

    展开全文
  • MySQL自增列之起始与步长 1. 自增列——起始:auto_increment --默认初始值为1,默认步长为1 代码演示: --创建user表: create table user ( ID int(4)primary key auto_increment, name varchar(6) not null , ...

    MySQL自增列之起始与步长

    1. 自增列——起始:auto_increment --默认初始值为1,默认步长为1
    代码演示:

    --创建user表:
    create table user (
    ID int(4)primary key auto_increment,
    name varchar(6) not null ,
    age int (4) not null);
    
    --插入数据16条  运行了4次
    insert into user(name,age) value ('haha',16);
    insert into user(name,age) value ('coco',15);
    insert into user(name,age) value ('momo',19);
    insert into user(name,age) value ('xixi',20);
    

    运行:ID 自增:
    在这里插入图片描述
    删除数据:

    -- 删除表中数据
    DELETE FROM `user`;
    -- 再加一条数据
    insert into user(name,age) value ('gogo',21);
    

    自定义初始值:alter table 表名 auto_increment;

    -- alter table user auto_increment=1;
    -- insert into user(name,age) value ('gogo',21);
    -- alter table user auto_increment=9;
    insert into user(name,age) value ('gogo',21);
    

    运行:
    在这里插入图片描述

    2. 自增列——步长

    ①MySQL:自增步长:

    • 基于会话级别:
      show session variables like 'auto_inc%"; --查看会话步长
      set session auto_increment_increment=4; --设置会话步长为4 (这里设置后关闭会话,再进行数据库操作会恢复默认值)
      set session auto_increment_offset=2; --设置自增起始值为2;

    演示:(注意先把user表数据删除并把表的自增起始值设置为1,不然表的ID值的起始值达不到自己所期望的值,

    DELETE FROM `user`;
    alter table user auto_increment=1;
    set session auto_increment_offset=2;
    set session auto_increment_increment=4;
    show session variables like  'auto_inc%';
    insert into user(name,age) value ('gogo',21);
    insert into user(name,age) value ('haha',16);
    insert into user(name,age) value ('coco',15);
    insert into user(name,age) value ('momo',19);
    insert into user(name,age) value ('xixi',20);
    

    结果:

    在这里插入图片描述
    在这里插入图片描述
    关闭navicat再添加几条数据:结果:
    在这里插入图片描述

    在这里插入图片描述

    • 基于全局级别:

      show global variables like 'auto_inc%"; --查看全局步长
      set global auto_increment_increment=3; --设置全局步长为3 (关闭会话,再进行数据库操作不会恢复到默认值)
      set global auto_increment_offset=2; --设置自增起始值为2;

    ② sqlserver:自增步长:基于基础表级别

    展开全文
  • 一、MySQL自增列之起始值 1.查看自增列起始值 show create table t10 查看建表语句 我们看到图片中的auto_increment=11,代表下一次的自动增长id从11开始,我们可以增加一条数据来验证一下: 我们看到,auto_...

    一、MySQL自增列之起始值

    1.查看自增列起始值

    show create table t10 查看建表语句
    在这里插入图片描述
    我们看到图片中的auto_increment=11,代表下一次的自动增长id从11开始,我们可以增加一条数据来验证一下:

    在这里插入图片描述
    我们看到,auto_increment = 12,所以证明我们的推测是正确的。

    2.修改自增列起始值:

    alter table t10 auto_increment = 30;
    表示修改自增列的起始值为30
    在这里插入图片描述
    我们看到,自增列从id为30开始了

    二、MYSQL自增列之步长

    这里不再举例,读者可自行尝试

    MYSQL:自增步长

    基于会话级别:(一次连接有效)
        show session variables like 'auto_inc%';  查看全局变量
        set session auto_increment_increment=2; 设置会话步长为2(当这次连接断开,这个步长就失效了)
    基于全局级别:
        show global variables like 'auto_inc%'; 查看全局变量
        set global auto_increment_increment=2;  设置全局步长
    

    sqlServer:自增步长

    基于表级别:
        create table t2(
            id int not null auto_increment primary key,
            name varchar(10)
        )engine=innodb auto_increment=4,步长=20 default charset=utf8;
    

    所以,相比下来sqlserver的更加好一点

    展开全文
  • 设置MySQL自增列的自增初值

    千次阅读 2017-11-07 09:41:07
    在许多类似的项目中,我们可能会把以前的数据库直接复制到新的项目中,但是有些表中的自增列都很大,后面插入数据会在此基础上递增,那么如果来设置自增的初值呢?
  • mysql自增列重排序号

    2021-04-05 17:16:04
    ALTER TABLE 表名 AUTO_INCREMENT =n; -- n为要重新开始的数字,如1、2、3
  • MySQL自增列(AUTO_INCREMENT)和其它数据库的自增列对比,有很多特性和不同点(甚至不同存储引擎、不同版本也有一些不同的特性),让人感觉有点稍微复杂。下面我们从一些测试开始,来认识、了解一下这方面的特殊...
  • MySQL自增主键详解

    万次阅读 多人点赞 2019-06-02 10:02:16
    2.InnoDB引擎的自增值,在MySQL5.7及之前的版本,自增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找自增值的最大值max(id),然后将max(id)+步长作为这个表当前的自增值 select max(ai_...
  • 修改mysql自增字段的方法 修改 test_user 库 user 表 auto_increment为 10000(从10000开始递增) mysql> alter table test_user.user auto_increment=10000; Query OK, 0 rows affected (0.12 sec) Records...
  • 本文介绍mysql自增ID的起始值修改与设置方法
  • MySQL自增列问题其实很有意思,在重启数据库之后,会按照max(id)+1的方式来计算,这样一个看起来有些别扭的实现方式在早期版本就饱受诟病,在MySQL 5.7都没有解决掉,终于在8.0松口了,计划在这个版本中修复。...
  • 在mysql中很多朋友都认为字段为AUTO_INCREMENT类型自增ID值是无法修改,其实这样理解是错误的,下面介绍mysql自增ID的起始值修改与设置方法。通常的设置自增字段的方法:创建表格时添加:create table table1(id int...
  • PB用ODBC连接Mysql,在数据窗口中插入一条记录,向数据库提交记录后不能自动返回自增列 id(identity value ),在SQL Server下是可以自动返回自增列id。 测试表test定义如下: CREATE TABLE test ( id INT NOT ...
  • 重置Mysql自增列的开始序号

    千次阅读 2019-06-21 21:37:00
    ALTER TABLE TableName AUTO_INCREMENT = 5; 代表重新从5开始(包括5) 转载于:https://www.cnblogs.com/feihusurfer/p/11066956.html
  • 从Oracle切换到阿里云;...rds库中,有自己的id自增列, 同步到polardb上使用rds自己生成的值(不使用polardb的id自增值); Oracle数据没有id列,通过Polardb的id自增列自动生成值; 因此为了避免id冲突,将...
  • MySQL自增ID 起始值 修改方法

    千次阅读 2018-11-13 17:23:01
    在mysql中很多朋友都认为字段为AUTO_INCREMENT类型自增ID值是无法修改,其实这样理解是错误的,下面介绍mysql自增ID的起始值修改与设置方法。 通常的设置自增字段的方法: 创建表格时添加: 1 create table table1...
  • 前几天开发童鞋反馈一个利用load data infile命令导入... 拿到问题后,首先查看现场,发现问题表的中记录的最大值比自增列的值要大,那么很明显,当有记录进行插入时,自增列产生的值就有可能与已有的记录主键冲突,导
  • mysql自增id

    2020-09-26 15:54:32
    mysql自增id 如果希望在每次插入新记录时,自动地创建主键字段的值。可以在表中创建一个 auto-increment 字段。MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。默认地AUTO_INCREMENT 的开始值是 1...
  • MySQL中的自增列

    2018-05-07 09:44:25
    MySQL的自增列情况比较特殊,之前分析了两篇。 MySQL自增列主从不一致的测试(r12笔记第37天) MySQL自增列的重复值问题(r12笔记第25天)...
  • 问题根源: 其实真正的问题涉及到Mysql自增的设计。 详情可以参阅: https://www.cnblogs.com/JiangLe/p/6362770.html   大体就是数据库的模式对这种自增插入有3种设置。原有的环境以及生产为2,更新后改为1...
  • mysql 自增间隔修改

    2020-11-12 17:37:38
    今天数据库表自增列的间隔突然变成了3,怎么都搞不定,最后全靠伟大的百度解决。 解决方式: 命令: show VARIABLES like '%increment%' 查看参数,果然是 3 , 接着使用修改命令 : set @@auto_increment_increment...
  • 最近项目中需要重置mysql表的自增序列号,特此记录便于日后查阅。 ALTER TABLE TableName AUTO_INCREMENT = 5; 注:代表重新从5开始(包括5) 到此Mysql 重置自增列的开始序号介绍完成。
  • 对于innodb_autoinc_lock_mode 各种参数的...对于自增列的锁定,据说是innodb_autoinc_lock_mode = 2模式下有较高的性能,MySQL 8.0下innodb_autoinc_lock_mode 默认值为2。于是通过修改改参数,测试不同参数下的...
  • 主要介绍了SqlServer Mysql数据库修改自增列的值及相应问题的解决方案的相关资料,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,439
精华内容 13,775
关键字:

mysql自增列修改方法

mysql 订阅