Python-数据类型 主键auto_increment

1.详细的建表语句 *****    create table 表名(    字段名1 数据类型[(长度) 约束条件],    字段名2 数据类型[(长度) 约束条件]    );

解释:        类型:使用限制字段必须以什么样的数据类型传值        约束条件:约束条件是在类型之外添加一种额外的限制      为什么需要给数据分类?(189  一八九)        1.描述数据更加准确        2.节省内存空间    注意:        1. 在同一张表中,字段名是不能相同        2. 宽度和约束条件可选,字段名和类型是必须的        3、最后一个字段后不加逗号    create database db37;

insert 语句        insert into 表名 values(值1,值n,....)        要求值得顺序 个数 必须与表字段完全对应    另一种写法        insert into 表名(字段名1,字段名n,....) values(值1,值n,....)        可以选择性得插入某些字段 要求值得顺序 必须与表名后面声明得字段一致

2.数据类型 *****整数类型    1、作用:id号,各种号码,年龄,等级    2、分类:        tinyint(**)1字节 (-128,127)        int (*****) 4字节        bigint(***)8字节        smallint   2字节        mediumint  3字节    3、测试:        默认有符号的        设置为无符号unsigned            1.create table t2(age tinyint unsigned);            2.建表后用alter修改

create table t2(x tinyint unsigned);        insert into t2 values(-1),(256);

create table t4(x int(12) unsigned);        insert into t4 values(4294967296123);

4、强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制        所以在创建表示,如果字段采用的是整型类型,完全无需指定显示宽度,        默认的显示宽度,足够显示完整当初存放的数据

# 显示时,不够8位用0填充,如果超出8位则正常显示        create table t5(x int(8) unsigned zerofill);        insert into t5 values(4294967296123);        insert into t5 values(1);

总结:除了存储范围没啥区别         都是整型         默认有符号         对于显示宽度 原理是相同的

长度参数如果不指定 会有默认值(3)

严格模式    什么是严格模式        对插入的数据严格要求 不再范围内直接报错        例如往tinyint中插入大于255的值将报错    什么是非严格模式        不对插入的数据严格要求 不再范围内也可以保存        保存的当前类型最大支持的值

5.6默认是非严格模式    5.7以后默认严格模式

查看SQL模式        select @@sql_mode;        show variables like "sql_mode";        show variables like "%sql_mode%";

修改SQL模式        set @@sql_mode = "值";    正常情况不需要改    +----------------------------+---------------------+    | Variable_name              | Value               |    +----------------------------+---------------------+    | binlogging_impossible_mode | IGNORE_ERROR        |    | block_encryption_mode      | aes-128-ecb         |    | gtid_mode                  | OFF                 |    | innodb_autoinc_lock_mode   | 1                   |    | innodb_strict_mode         | OFF                 |    | pseudo_slave_mode          | OFF                 |    | slave_exec_mode            | STRICT              |    | sql_mode                   | STRICT_TRANS_TABLES |    +----------------------------+---------------------+    8 rows in set (0.00 sec)

#修改sql_mode为严格模式:在该模式下,如果插入的数据超过限制,则会立即报错    mysql> set global sql_mode="strict_trans_tables";

浮点类型    作用:存储身高、体重、薪资    分类:        float (*****)4字节  满足大部分使用场景        double  (**)8字节        decimal (**)不固定  适合银行系统 科学研究等    create table t9(num float(m,d))    m 表示总长度  d 表示小数部分的长度    长度表示不是数据存储范围 而是字符长度    10.12 总长为4  小数部分为2

各个类型的最大长度    float (255,30) ***** 括号内不填,默认没有小数,整数非零的数字显示6位    double (255,30)    decimal (65,30)

区别:        float与double的精度不同  都是不准确的小数        decimal 准确的小数  不会丢失精度

括号中m和d的值 可以限制数据存储范围 与整型不同    重点:记住m和d的含义    测试:        #相同点            1、对于三者来说,都能存放30位小数,        #不同点:            1、精度的排序从低到高:float,double,decimal            2、float与double类型能存放的整数位比decimal更多

create table t9(x float(255,30));        create table t10(x double(255,30));        create table t11(x decimal(65,30));

insert into t9 values(1.111111111111111111111111111111);        insert into t10 values(1.111111111111111111111111111111);        insert into t11 values(1.111111111111111111111111111111);

mysql> select * from t9;        +----------------------------------+        | x                                |        +----------------------------------+        | 1.111111164093017600000000000000 |        +----------------------------------+        1 row in set (0.00 sec)

mysql> select * from t10;        +----------------------------------+        | x                                |        +----------------------------------+        | 1.111111111111111200000000000000 |        +----------------------------------+        1 row in set (0.00 sec)

mysql> select * from t11;        +----------------------------------+        | x                                |        +----------------------------------+        | 1.111111111111111111111111111111 |        +----------------------------------+        1 row in set (0.00 sec)

字符串类型    1、作用:姓名,地址,描述类的信息

2、分类:        char 定长字符串   使用频率更高        varchar 可变长度字符串        注意字符串中 长度指定的是数据的字符长度  与字节没关系

create table t13(c1 char,c2 varchar(10));        在创建时 varchar必须指定长度  char有默认值  (1)

不同点:            a char(3) b char(3)            A  |B   |            char类型在取数据时 就根据长度来获取 不关心真实数据长度            无论的数据有多长 占用的空间是固定的 造成了一定空间浪费            name char(5)                # 缺点:浪费空间                # 优点:存取速度都快                egon alex lxx  wxx  yx

a varchar(30) b varchar(30)            (1)A(1)B            varchar类型在取数据时 先获取数据长度 在根据长度获取真实数据  关心真实数据长度            先存储长度需要一个字节 再存储真实数据  不会浪费空间            但是 由于需要计算数据的长度 所以存取速度会比定长慢            name varchar(5)                # 缺点:存取速度都慢                # 优点:节省空间                (1bytes+egon)(1bytes+alex)(1bytes+lxx)

相同点:            括号中的数字 都是表示存储最大字符长度

mysql会在存储数据时自动将数据末尾的空格去掉        如果必须要存空格 需要修改sql_mode  增加 PAD_CHAR_TO_FULL_LENGTH 意思是把空格当作有效数据

# 注意:        由于自动去除空格这个机制 在使用等于符号 和like时有区别            select *from t1 where name = "yh     "; name字段明确地等于一个值,该值后填充空格是没有用,会自动去除空格            select *from t1 where name like "yh     "; name字段模糊匹配一个值,该值后填充空格是有用的,不会自动去除空格            like 用于模糊匹配   使用%表示0或任意个任意字符 使用_表示一个任意字符

3、测试:字符的宽度限制单位是字符个数        create table t12(x char(4)); # 超出4个字符则报错,不够4个字符则用空格补全成4个字符        create table t13(y varchar(4));# 超出4个字符则报错,不够4个字符那么字符有几个就存几个

insert into t12 values(‘hello‘);        insert into t13 values(‘hello‘);

insert into t12 values(‘a‘); #‘a    ‘        insert into t13 values(‘a‘); #‘a‘

set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";        select char_length(x) from t12; #4        select char_length(y) from t13; #1

日期和时间    1、作用:时间相关    2、分类:        date:1999-01-27        time: 11:11:11        datetime*****:1999-01-27 11:11:11        year:1999        timestamp *****        timestamp特点是:可以给null 自动输入当前时间  当这条记录被修改了会自动更新当前时间    3、测试        create table student(            id int,            name char(16),            born_year year,            birth date,            class_time time,            reg_time datetime        );

insert into student values(1,‘egon‘,‘2000‘,‘2000-01-27‘,‘08:30:00‘,‘2013-11-11 11:11:11‘);

枚举    枚举enum,多选一个        enum  可以指定一堆字符串的值  在插入数据时  数据必须这堆字符串中的其中一个 ("男的","女的")  多选一集合    集合set,多选多        set  可以指定一堆字符串的值  在插入数据时  数据必须这堆字符串中的其中一个或多个 ("男的","女的")  多选多   枚举和集合共同点:数据都是字符串类型    测试        create table teacher(            id int,            name char(16),            sex enum(‘male‘,‘female‘,‘others‘),            hobbies set(‘play‘,‘read‘,‘music‘,‘piao‘)        );

3.约束****    是一种对数据限制        已经学习过的 数据类型 unsigned无符号 字符串长度 浮点的长度

约束的作用是?        为了保证数据的正确性,完整性    例如要存储密码   char(20)   只限制了类型和长度,   无法保证数据的正确性

额外的约束    语法:        创建时指定约束        create table 表名称(字段名 类型(长度) 约束名称1 约束名称n,....)        后期修改的方式添加 约束        alter table 表名称 modify 字段名 类型(长度) 约束名称1 约束名称n,....

NOT NULL 非空约束  限制该字段的值不能为空    UNIQUE 唯一性约束  限制该字段的值是唯一的不能出现重复    DEFAULT 默认值约束 如果插入数据时没有指定该字段的值则使用默认值    PRIMARY KEY 主键约束 限制该字段 不能为空 并且是唯一的   可以唯一标识一条数据 *****    FOREIGN KEY 外键约束 用来指向另一个表的主键

#not null + default测试        create table t15(            id int,            name char(16) not null,            sex enum(‘male‘,‘female‘,‘other‘) not null default "male"        );

alter table t15 modify name char(16) not null;

insert into t15(id,name) values        (1,‘egon1‘),        (2,‘egon2‘),        (3,‘egon3‘);

每一个表都应该有一个主键 需要唯一标识 否则可以可能出现完全相同的两个数据 无法区分    UNIQUE 不能重复  但是可以为空 这样也不能唯一标识    UNIQUE NOT NULL 不能为空且唯一  可以唯一标识一条数据  书写顺序无所谓

UNIQUE NOT NULL 与 主键的区别        UNIQUE NOT NULL 不能被其他表引用 (不能作为其它表的外键)        UNIQUE NOT NULL 约束一个表中可以有多个   但是主键只能有一个    #unique:限制字段的值唯一

#单列唯一        create table t16(            id int unique,            name char(16)        );

# 联合唯一        create table server(            id int unique,            ip char(15),            port int,            unique(ip,port) #!!!!!        );

索引:用于加速查询    InnoDB 中 索引是树形结构        为了提高查询效率 InnoDB为找一个不为空 且唯一的字段作为主键        如果表中不存在这样的字段 会自动帮你建一个隐藏主键字段  但是无法提升查询效率

只要是使用innoDB 就应该为每个表指定一个非空 且唯一的字段        InnoDB阻止数据时 首先使用主键  如果没有主键 找一个非空且唯一  如果也没有 建一个隐藏字段

多字段联合主键: 不常用        学生表  stu_id course_id 做为联合主键,只有当两个字段都重复才算重复        1 1 已有数据        1 2 可以插入        2 1 可以插入        1 1 不能插入

#primary key:单单从约束角度去看,primary key就等同于not null unique        #强调(******)        1、一张表中必须有,并且只能有一个主键        2、一张表中都应该有一个id字段,而且应该把id字段做成主键        如一张表中没有主键,第一个not null unique的字段会默认成为主键

create table t17(            id int primary key,            name char(16),            age int,            sex char(6)        )engine=innodb;

#联合主键        create table t19(            ip char(15),            port int,            primary key(ip,port) #!!!!        );

# auto_increment注意点:        1、通常与primary key连用,而且通常是给id字段加        2、auto_incremnt只能给被定义成key(unique key,primary key)的字段加

# primary key auto_increment        create table t20(            id int primary key auto_increment,            name char(16)        )engine=innodb;

当一个表中 由于业务需求没有一个非空且唯一的字段时 我们可以建一个新的字段专门作为主键        管理主键的值挺麻烦的  你得记录上一次的主键值        mysql可以帮你自动管理主键  auto_increment 自动增长        auto_increment 只能用于整型字段 并且该字段必须具备索引    所以 通常 主键都会加上auto_increment

手动修改自动增长计数        alter table 表名 auto_increment  新的值;        注意:如果新的值小于当前的最大值 是无效的

通常建一个表就要建一个主键  主键的类型通常是整型

存储引擎    发动机        汽油机        柴油机 柴油价格便宜 动力还强  噪音大  不完全燃烧        电机 加速快  噪音小  续航问题

一个产品或服务的核心部分称之为引擎        mysql的核心功能存取数据        mysql存储引擎就是负责存取数据那一段代码

小结    建表完整语句    数据类型        整数(长度)  显示宽度  与存取没有关系        char定长 varchar可变长        sql_mode  严格模式    存储引擎

原文地址:https://www.cnblogs.com/du-jun/p/9991681.html

时间: 2024-10-09 19:05:28

Python-数据类型 主键auto_increment的相关文章

MYSQL主键自动增加的配置

文章一 原文地址: http://ej38.com/showinfo/mysql-202971.html 文章二:   点击转入第二篇文章 在数据库应用,我们经常要用到唯一编号.在MySQL中可通过字段的AUTO_INCREMENT属性来自动生成.MySQL支持多种数据表,每种数据表的自增属性都有所不同. ISAM表 如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号.编号从1开始,并1为基数递增. 当插入记录时,没有为AUTO_INCREME

MySQL获取其他表的主键

通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键.本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值: 通过JDBC2.0提供的insertRow()方式 通过JDBC3.0提供的getGeneratedKeys()方式 通过SQL select LAST_INSERT_ID()函数 通过SQL @@IDENTITY 变量 1. 通过JDBC2.0提供的insertRow()方式 自jdbc2.0以来,可以通过下面的方式

(转) Hibernate持久化类与主键生成策略

http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英文名称是Persistent Object(简称PO),PO=POJO+hbm映射配置文件. 对于Hibernate中的PO,有如下编写规则: 必须提供一个无参数的public构造方法. 所有属性要用private修饰,对外提供public的get/set方法. 在PO类必须提供一个标识属性,让它与

表的操作-建立表-删除表-修改表的名字-修改列的名字及数据类型-删除/添加主键-在表的最后增加一列-查看表的结构

USE db; -- 列出查看当前数据库中的所有表 SHOW TABLES; SHOW TABLES LIKE 's%'; CREATE TABLE 表名 ( 列名 类型 修饰 约束, sid INT(3) UNSIGNED ZEROFILL PRIMARY KEY AUTO_INCREMENT sgender ENUM('男','女','保密') DEFAULT '男' )ENGINE=MYISAM DEFAULT CHARSET=utf8; -- 建立表 CREATE TABLE IF NO

修改Oracle数据库表的主键对应列的数据类型

我们产品从SPC100升级到SPC200的时候,由于数据库表列的数据类型发生了改变,需要写SQL脚本,完成数据库的升级.需要将表T_MOBILE_INDVCONFIG的主键列id从varchar2(100),改成number(17).可以参考如下SQL: --将原来的ID列重命名为bak_id ALTER TABLE T_MOBILE_INDVCONFIG RENAME COLUMN id TO bak_ID; --添加一个与原来的列一样名字的列 ALTER TABLE T_MOBILE_IND

获取mssqlserver数据库表的字段名称,字段说明,数据类型,主键等表的信息

sql脚本: SELECT TableName=case when a.colorder=1 then d.name else '' end,---表名 TableShowsThat=case when a.colorder=1 then isnull(f.value,'') else '' end,---表说明 TheSerialNumberField=a.colorder,---字段序号 FieldName=a.name,---字段名 Identification=case when COL

MYSQL替换有Auto_increment的主键

在Mysql中,Auto_increment 一般都设在主键上,当你想要替换表单的主键时,要先删除自增长的特性才能删除主键的特性. 删除自增长    alter table A change id id int(5) ; 删除主键       alter table A drop primary key; 这时才能把其它列设为主键.

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY'

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY' 解决方法: 在my.cnf的[mysqld]片段中添加设置innodb_autoinc_lock_mode=0 同时注意调大jdbc的活跃链接数,如设置 jdbc.maxActive=300,因为设置innodb_autoinc_lock_mode=0可能导致链接过多. 注意,这种方式只需要在并发性能测试时设置,因为这种方式在插入记录时需

oracle&&Sqlserver获取表名列名主键及数据类型

SQlserver获得列名,列类型,列类型长度,scale,prec等数据类型(syscolumns,systypes,sysobjects均为视图) select a.name as colname, b.name as typename,a.length as length,a.scale as scale,a.prec as prec from syscolumns a,systypes b ,sysobjects c where a.xusertype=b.xusertype and a