varchar

SQL Server里简单参数化的痛苦

…衆ロ難τιáo~ 提交于 2020-04-01 03:24:11
在今天的文章里,我想谈下对于即席SQL语句(ad-hoc SQL statements),SQL Server使用的 简单参数化(Simple Parameterization) 的一些特性和副作用。首先,如果你的SQL语句包含这些, 简单参数化 不会发生: JOIN IN BULK INSERT UNION INTO DISTINCT TOP GROUP BY HAVING COMPUTE Sub Queries 一般来说,如果你处理所谓的 安全执行计划(Safe Execution Plan) ,SQL Server自动参数化你的SQL语句:不管提供的参数值,查询总必须通向一样的执行计划。如果你的执行计划里有书签查找,这就是不可能的例子。因为 临界点 定义了是否进行书签查找还是全表/聚集索引扫描。 自动参数化并不那么酷! 如果SQL Server能自动参数化你的SQL语句,你还是要考虑下SQL Server引入的自动参数化SQL语句的一些副作用。我们来看一个具体的例子。下列查询创建一个表,执行一个会被SQL Server自动参数化的简单SQL语句。 1 -- Create a simple table 2 CREATE TABLE Orders 3 ( 4 Col1 INT IDENTITY(1, 1) PRIMARY KEY NOT NULL, 5 Price DECIMAL

MySQL到底能有多少个字段

人盡茶涼 提交于 2020-04-01 01:23:31
今天技术讨论群里 “一切随遇而安”同学看书时出现一个疑问,一个MySQL的表中到底可以有多少个字段?带着这个疑问,我们展开了探讨,也接着讨论了一个单字段长度的问题。 1. 官方文档说明 官方文档的内容如下,主要意思是字段个数限制达不到理想的4096个,且和字段类型有关,innodb引擎的字段上限是1017,。 2. 测试表字段数限制 2.1 测试innodb引擎表 因官方文档介绍了innodb表字段限制是1017,因此可以写程序进行模拟。思路如下: a) 创建一张1个 char(1) 类型的innodb表 b) 循环往该表新增字段 直至报错 我使用的是python 脚本进行测试,脚本如下: #!/usr/bin/python # coding=utf-8 import pymysql as mdb import os sor_conn = mdb.connect(host='127.0.0.1',port=3306,user='root',passwd='123456') sor_cur = sor_conn.cursor() v_sql_d = "drop table if exists test.test_c ;" # 为了程序重复执行,添加判断 sor_cur.execute(v_sql_d) sor_conn.commit() v_sql_c = "create table

7.MySQL表的约束

喜欢而已 提交于 2020-03-29 18:32:22
1.默认约束(DEFAULT ) 为数据表中的字段指定默认值。保证事物的属性一定会有一个值。 BLOB、TEXT数据类型 不支持 默认约束。 1 CREATE DATABASE mahaiwuji; 2 USE mahaiwuji; 3 4 CREATE TABLE student1 ( 5 id INT, 6 sname VARCHAR(30), 7 sex VARCHAR(1) DEFAULT '男' 8 ) ENGINE = INNODB DEFAULT CHARSET = utf8; 9 10 INSERT INTO student1 VALUES (1,'张三','男'); 11 INSERT INTO student1 VALUES (2,'李四','女'); 12 INSERT INTO student1(id,sname) VALUES (3,'王五'); 2.非空约束(NOT NULL) 字段的值不能为NULL。 1 CREATE TABLE student2 ( 2 id INT, 3 sname VARCHAR(30) NOT NULL, 4 sex VARCHAR(1) 5 ) ENGINE = INNODB DEFAULT CHARSET = utf8; 6 7 INSERT INTO student2 VALUES (1,'张三','男'); 8

检查当前库下内容含有指定字符的所有存储过程

岁酱吖の 提交于 2020-03-29 04:43:52
由于配置表改变了,要对当前数据库下所有SP进行检查,对于有引用这个表的SP都要作相应的改变,如果是一个一个SP查询,那工作量太大了,所以写了一个SP,对包含有对该表引用的SP都列出来。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author:jim.yang -- Create date: 2009-9-2 -- Description:检查当前库下内容含有指定字符的所有存储过程 -- #p_procedure_searchStr 'sms_5' -- ============================================= ALTER PROCEDURE #p_procedure_searchStr @str varchar(100) AS BEGIN create table #t1(name varchar(100),text varchar(8000)) create table #t2(text varchar(8000)) --得到库所有的sp select identity(int,1,1) autoid,name into #proc from sys.Procedures where

InnoDB基础

假装没事ソ 提交于 2020-03-29 02:09:30
   在InnoDB中,数据存储在磁盘上,处理数据时需要先将数据从磁盘读取,再写到内存。InnoDB采用 局部性原理 加载。 一、局部性原理   从磁盘读取数据时,不需要一行一行读取,而是以页为单位读取,操作系统中一页4kb,InnoDB中一页16kb。 二、InnoDB页结构   页是InnoDB管理存储空间的基本单位,一个页的大小默认是16KB。 三、InnoDB行格式   一行记录可以以不同的格式存在InnoDB中,行格式分别是Compact、Redundant、Dynamic和Compressed行格式。   我们可以在创建或修改表的语句中指定行格式:     CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称     ALTER TABLE 表名 ROW_FORMAT=行格式名称 1、Compact行格 式 :      (1)变长字段长度列表   MySQL支持一些变长的数据类型,比如VARCHAR(M)、VARBINARY(M)、TEXT类型,BLOB类型,这些数据类型修饰列称为变长字段。变长字段长度列表 即所有变长字段的真实数据占用的字节长度构成的列表。    VARCHAR(M),M代表最大能存多少个字符。   (2)NULL标志位(列表)   Compact行格式会把可以值为NULL的列统一管理起来,存一个二进制标记(1为NULL

mysql常见面试题目

北城余情 提交于 2020-03-28 04:48:47
1, mysql的复制原理以及流程。 (1)先问基本原理流程,3个线程以及之间的关联。 (2)再问一致性,延时性,数据恢复。 (3)再问各种工作遇到的复制bug的解决方法 2,mysql中myisam与innodb的区别,至少5点。 (1) 问5点不同 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。(X) (2) 问各种不同mysql版本的2者的改进 (3)2者的索引的实现方式 3,问mysql中varchar与char的区别以及varchar(50)中的30代表的涵义。 (1)varchar与char的区别 char是一种固定长度的类型,varchar则是一种可变长度的类型 (2)varchar(50)中50的涵义 最多存放50个字符 (3)int(20)中20的涵义 int(M)中的M indicates the maximum display width (最大显示宽度)for integer types. The maximum legal display width is 255. (4)为什么MySQL这样设计? 4

MySQL数据类型与优化

泄露秘密 提交于 2020-03-26 21:20:15
原创itcats_cn 最后发布于2019-11-07 22:07:01 阅读数 713 收藏 展开 关于数据类型的优化 1、假如只需要存0~255之间的数,无负数,应使用tinyint unsigned(保证最小数据类型) 2、如果长度不可定,如varchar,应该选择一个你认为不会超过范围的最小类型 比如: varchar(20),可以存20个中文、英文、符号,不要无脑使用varchar(150) 3、整形比字符操作代价更低。比如应该使用MySQL内建的类型(date/time/datetime)而不是字符串来存储日期和时间 4、应该使用整形存储IP地址,而不是字符串 5、尽量避免使用NULL,通常情况下最好指定列为NOT NULL,除非真的要存储NULL值 6、DATETIME和TIMESTAMP列都可以存储相同类型的数据:时间和日期,且精确到秒。然而TIMESTAMP只使用DATETIME一半的内存空间,并且会根据时区变化,具有特殊的自动更新能力。另一方面,TIMESTAMP允许的时间范围要小得多,有时候它的特殊能力会变成障碍 整数类型 1、TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT分别使用8(-127~127或0~255)、16(0~65535)、24(0~1600万)、32、64位存储空间。 2、整数类型有可选的UNSIGNED属性

项目开发规范,数据库设计规范

核能气质少年 提交于 2020-03-25 15:35:00
1. 命名规范 定义这个规范的目的是让项目中全部的文档都看起来像一个人写的,添加可读性。降低项目组中由于换人而带来的损失。 (这些规范并非一定要绝对遵守,可是一定要让程序有良好的可读性) 1.1 namespace 的命名 namespace的名字应该都是由一个大写字母开头的单词组成,若由多个单词组成。每一个单词的首字母大写。 1.2 Class 的命名 Class 的名字必须由大写字母开头而其它字母都小写的单词组成。 比如: class Raster; 1.3 局部变量的命名 变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。 1.4 Static 变量的命名 Static 变量的名字应该都大写,而且指出完整含义。 1.5 參数的命名 參数的名字必须和变量的命名规范一致。 1.6 数组的命名 数组应该总是用以下的方式来命名: byte[] buffer; 而不是: byte buffer[]; 1.7 代码凝视 类头部凝视 1.用文字说明代码的作用。并正确指出该代码的编写思路和逻辑方法; 1. 在每一个类的開始赋予一个凝视标头; 可參考:(至少须要这几项,Description:描写叙述该类功能。作者,时间。 ) /** * Description: 用户管理 * @Author : wjl * @Create Date: 2015 - 8 - 17 下午 4:06

分页存储过程

狂风中的少年 提交于 2020-03-25 14:02:28
本存储过程没有返回总记录数,但支持Ms sql 2000、2005 Create PROCEDURE dbo.pro_getListByPage ( @tbname VARCHAR ( 30 ), -- 表名称 @fldname VARCHAR ( 20 ), -- 自动增加列 @column VARCHAR ( 200 ), -- 返回列 @pagesize INT , -- 每页显示条数 @pageindex INT , -- 当前页数 @where VARCHAR ( 300 ), -- 不带where的条件 @orderby VARCHAR ( 200 ), -- 排序字段 @orderbytype VARCHAR ( 5 ) -- 排序类型asc,desc ) AS DECLARE @sqlstr VARCHAR ( 2000 ) DECLARE @strOrder VARCHAR ( 250 ) DECLARE @strTmp VARCHAR ( 50 ) -- -数据 IF @orderbytype = ' desc ' begin SET @strOrder = ' order by ' + @fldname + ' desc ' set @strTmp = ' <(select min ' end ELSE begin SET @strOrder = '